Microsoft Word Processing v Jave s Apache POI

1. Prehľad

Apache POI je knižnica Java na prácu s rôznymi formátmi súborov na základe štandardov Office Open XML (OOXML) a Microsoft OLE 2 Compound Document Format (OLE2).

Tento výukový program sa zameriava na podporu POI Apache pre Microsoft Word, najbežnejšie používaný formát súborov Office. Prechádza krokmi potrebnými na naformátovanie a vygenerovanie súboru MS Word a na to, ako tento súbor analyzovať.

2. Maven závislosti

Jediná závislosť, ktorá sa vyžaduje, aby Apache POI spracovával súbory MS Word, je:

 org.apache.poi poi-ooxml 3.15 

Kliknutím sem získate najnovšiu verziu tohto artefaktu.

3. Príprava

Pozrime sa teraz na niektoré prvky použité na uľahčenie generovania súboru MS Word.

3.1. Zdrojové súbory

Zozbierame obsah troch textových súborov a zapíšeme ich do súboru MS Word s názvom oddych-s-jarou.docx.

Okrem toho logo-list.png súbor sa používa na vloženie obrázka do tohto nového súboru. Všetky tieto súbory existujú na triednej ceste a sú reprezentované niekoľkými statickými premennými:

public static String logo = "logo-leaf.png"; public static Reťazec odsek1 = "poi-word-para1.txt"; verejný statický reťazec odsek2 = "poi-word-para2.txt"; verejný statický reťazec odsek3 = "poi-word-para3.txt"; verejný statický výstup reťazca = "rest-with-spring.docx";

Pre tých zvedavcov je obsah týchto zdrojových súborov v úložisku, ktorého odkaz je uvedený v poslednej časti tohto tutoriálu, extrahovaný z tejto stránky kurzu tu na tejto stránke.

3.2. Pomocná metóda

Hlavná metóda pozostávajúca z logiky použitej na generovanie súboru MS Word, ktorá je popísaná v nasledujúcej časti, využíva pomocnú metódu:

public String convertTextFileToString (String fileName) {try (Stream stream = Files.lines (Paths.get (ClassLoader.getSystemResource (fileName) .toURI ()))) {return stream.collect (Collectors.joining ("")); } catch (IOException | URISyntaxException e) {return null; }}

Táto metóda extrahuje obsah obsiahnutý v textovom súbore umiestnenom na ceste triedy, ktorého názov je vložený String argument. Potom zreťazí riadky v tomto súbore a vráti spojenie String.

4. Generovanie súborov MS Word

Táto časť poskytuje pokyny na formátovanie a generovanie súboru Microsoft Word. Pred prácou na ktorejkoľvek časti súboru musíme mať XWPFDocument inštancia:

Dokument XWPFDocument = nový XWPFDocument ();

4.1. Formátovanie názvu a titulkov

Na vytvorenie nadpisu je potrebné najskôr vytvoriť inštanciu XWPFParagraf triedy a nastavte zarovnanie na nový objekt:

XWPFParagraph title = document.createParagraph (); title.setAlignment (OdstavecAlignment.CENTRUM);

Obsah odseku musí byť zabalený do XWPFRun objekt. Tento objekt môžeme nakonfigurovať tak, aby nastavil textovú hodnotu a s ňou spojené štýly:

XWPFRun titleRun = title.createRun (); titleRun.setText ("Zostavte si svoje REST API s jarou"); titleRun.setColor ("009933"); titleRun.setBold (true); titleRun.setFontFamily ("Courier"); titleRun.setFontSize (20);

Jeden by mal byť schopný odvodiť účel metód množiny z ich mien.

Podobným spôsobom vytvoríme XWPFParagraf inštancia obsahujúca podnadpis:

XWPFParagraph subTitle = document.createParagraph (); subTitle.setAlignment (paragraphAlignment.CENTER);

Naformátujme si tiež titulky:

XWPFRun subTitleRun = subTitle.createRun (); subTitleRun.setText ("od základov HTTP po Mastery API"); subTitleRun.setColor ("00CC44"); subTitleRun.setFontFamily ("Courier"); subTitleRun.setFontSize (16); subTitleRun.setTextPosition (20); subTitleRun.setUnderline (UnderlinePatterns.DOT_DOT_DASH);

The setTextPosition metóda nastaví vzdialenosť medzi titulkami a následným obrázkom, zatiaľ čo setUnderline určuje vzor podčiarknutia.

Všimnite si, že obsah titulkov aj podnadpisov kódujeme natvrdo, pretože tieto tvrdenia sú príliš krátke na to, aby ospravedlnili použitie pomocnej metódy.

4.2. Vkladanie obrázka

Obrázok musí byť zabalený do XWPFParagraf inštancia. Chceme, aby bol obrázok vodorovne vycentrovaný a umiestnený pod podnadpisom, takže pod uvedený kód treba vložiť nasledujúci úryvok:

XWPFParagraph image = document.createParagraph (); image.setAlignment (OdsekAlignment.CENTRUM);

Tu je postup, ako nastaviť vzdialenosť medzi týmto obrázkom a textom pod ním:

XWPFRun imageRun = image.createRun (); imageRun.setTextPosition (20);

Obrázok sa odoberie zo súboru na triednej ceste a potom sa vloží do súboru MS Word so zadanými rozmermi:

Cesta imagePath = Paths.get (ClassLoader.getSystemResource (logo) .toURI ()); imageRun.addPicture (Files.newInputStream (imagePath), XWPFDocument.PICTURE_TYPE_PNG, imagePath.getFileName (). toString (), Units.toEMU (50), Units.toEMU (50));

4.3. Formátovanie odsekov

Takto vytvoríme prvý odsek s obsahom prevzatým z poi-word-para1.txt spis:

XWPFParagraph para1 = document.createParagraph (); para1.setAlignment (paragraphAlignment.BOTH); Reťazec string1 = convertTextFileToString (odsek1); XWPFRun para1Run = para1.createRun (); para1Run.setText (string1);

Je zrejmé, že vytvorenie odseku je podobné vytvoreniu názvu alebo podnadpisu. Jediným rozdielom je použitie metódy helper namiesto pevne zakódovaných reťazcov.

Podobným spôsobom môžeme pomocou obsahu zo súborov vytvoriť ďalšie dva odseky poi-word-para2.txt a poi-word-para3.txt:

XWPFParagraph para2 = document.createParagraph (); para2.setAlignment (paragraphAlignment.RIGHT); Reťazec string2 = convertTextFileToString (odsek2); XWPFRun para2Run = para2.createRun (); para2Run.setText (string2); para2Run.setItalic (true); XWPFParagraph para3 = document.createParagraph (); para3.setAlignment (paragraphAlignment.LEFT); Reťazec string3 = convertTextFileToString (odsek3); XWPFRun para3Run = para3.createRun (); para3Run.setText (string3);

Tvorba týchto troch odsekov je takmer rovnaká, s výnimkou niektorých štýlov, ako je zarovnanie alebo kurzíva.

4.4. Generuje sa súbor MS Word

Teraz sme pripravení vypisovať súbor Microsoft Word do pamäte z dokument premenná:

FileOutputStream out = nový FileOutputStream (výstup); document.write (out); out.close (); document.close ();

Všetky útržky kódu v tejto časti sú zabalené do pomenovanej metódy handleSimpleDoc.

5. Analýza a testovanie

Táto časť popisuje syntaktickú analýzu súborov MS Word a overenie výsledku.

5.1. Príprava

V testovacej triede deklarujeme statické pole:

statický WordDocument wordDocument;

Toto pole sa používa na odkaz na inštanciu triedy, ktorá obklopuje všetky fragmenty kódu zobrazené v častiach 3 a 4.

Pred analýzou a testovaním musíme inicializovať statickú premennú deklarovanú priamo vyššie a vygenerovať oddych-s-jarou.docx súbor v aktuálnom pracovnom adresári vyvolaním súboru handleSimpleDoc metóda:

@BeforeClass public static void generateMSWordFile () vyvolá výnimku {WordTest.wordDocument = nový WordDocument (); wordDocument.handleSimpleDoc (); }

Prejdime k poslednému kroku: analýze súboru MS Word a overeniu výsledku.

5.2. Analýza súboru MS Word a overenie

Najskôr z adresára projektu extrahujeme obsah z daného súboru MS Word a obsah uložíme do a Zoznam z XWPFParagraf:

Cesta msWordPath = Cesta.get (WordDocument.output); XWPFDocument document = nový XWPFDocument (Files.newInputStream (msWordPath)); Zoznam odsekov = document.getParagraphs (); document.close ();

Ďalej sa uistite, že obsah a štýl názvu sú rovnaké ako tie, ktoré sme nastavili predtým:

XWPFParagraph title = paragraphs.get (0); XWPFRun titleRun = title.getRuns (). Get (0); assertEquals ("Zostavte si svoje REST API s jarou", title.getText ()); assertEquals ("009933", titleRun.getColor ()); assertTrue (titleRun.isBold ()); assertEquals ("Courier", titleRun.getFontFamily ()); assertEquals (20, titleRun.getFontSize ());

Kvôli jednoduchosti iba overíme obsah ostatných častí súboru a štýly vynecháme. Overenie ich štýlov je podobné tomu, ktoré sme vykonali s názvom:

assertEquals ("od základov HTTP k ovládaniu API", odstavcis.get (1) .getText ()); assertEquals ("Čo robí dobré API?", odstavcis.get (3) .getText ()); assertEquals (wordDocument.convertTextFileToString (WordDocument.paragraph1), odseks.get (4) .getText ()); assertEquals (wordDocument.convertTextFileToString (WordDocument.paragraph2), odseks.get (5) .getText ()); assertEquals (wordDocument.convertTextFileToString (WordDocument.paragraph3), odseks.get (6) .getText ());

Teraz si môžeme byť istí, že vytvorenie oddych-s-jarou.docx súbor bol úspešný.

6. Záver

V tomto výučbe bola predstavená podpora Apache POI pre formát Microsoft Word. Prešiel krokmi potrebnými na vygenerovanie súboru MS Word a na overenie jeho obsahu.

Implementáciu všetkých týchto príkladov a útržkov kódu nájdete v projekte GitHub.


$config[zx-auto] not found$config[zx-overlay] not found