Microsoft szövegszerkesztés Java-ban Apache POI-val

1. Áttekintés

Az Apache POI egy Java könyvtár, amely az Office Open XML szabványokon (OOXML) és a Microsoft OLE 2 Összetett dokumentum formátumán (OLE2) alapuló különféle fájlformátumokkal használható.

Ez az oktatóanyag az Apache POI támogatására összpontosít a Microsoft Word számára, amely a leggyakrabban használt Office fájlformátum. Végigvezeti az MS Word fájl formázásához és létrehozásához szükséges lépéseket, valamint a fájl elemzésének módját.

2. Maven-függőségek

Az egyetlen függőség, amely az Apache POI-nak az MS Word fájlok kezeléséhez szükséges:

 org.apache.poi poi-ooxml 3.15 

Kattintson ide a műtárgy legújabb verziójához.

3. Előkészítés

Most nézzük meg az MS Word fájlok előállításának megkönnyítésére használt néhány elemet.

3.1. Erőforrás fájlok

Összegyűjtjük három szöveges fájl tartalmát, és beírjuk őket egy MS Word fájlba pihenés-tavasszal.docx.

Ezen felül a logo-leaf.png fájl segítségével képet lehet beilleszteni az új fájlba. Ezek a fájlok léteznek az osztályúton, és számos statikus változó képviseli őket:

nyilvános statikus karakterlánc logó = "logo-leaf.png"; public static String bekezdés1 = "poi-word-para1.txt"; public static String2 bekezdés = "poi-word-para2.txt"; public static String3 bekezdés = "poi-word-para3.txt"; public static String output = "rest-with-spring.docx";

Kíváncsi azoknak az erőforrásfájloknak a lerakatban lévő tartalmára, amelyeknek a linkje az oktatóanyag utolsó szakaszában található, kivonják erről a kurzusoldalról itt, a webhelyen.

3.2. Segítő módszer

Az MS Word fájl előállításához használt logikából álló fő módszer, amelyet a következő szakasz ismertet, egy segítő módszert használ:

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; }}

Ez a módszer az osztályúton található szövegfájl tartalmát vonja ki, amelynek neve a beírt név Húr érv. Ezután összefűzi a sorokat ebben a fájlban, és visszaadja az összekapcsolást Húr.

4. MS Word fájlgenerálás

Ez a szakasz utasításokat ad a Microsoft Word fájl formázására és létrehozására. Mielőtt a fájl bármely részén dolgoznánk, rendelkeznünk kell egy XWPFDocument példa:

XWPFDocument document = új XWPFDocument ();

4.1. A cím és az alcím formázása

A cím megalkotásához először a XWPFPekezdés osztály és állítsa be az igazítást az új objektumra:

XWPFParagraph title = document.createParagraph (); title.setAlignment (BekezdésAlignment.CENTER);

A bekezdés tartalmát be kell csomagolni egy XWPFRun tárgy. Konfigurálhatjuk ezt az objektumot egy szövegérték és a hozzá tartozó stílusok beállítására:

XWPFRun titleRun = title.createRun (); titleRun.setText ("Készítsd el a REST API-t tavasszal"); titleRun.setColor ("009933"); titleRun.setBold (true); titleRun.setFontFamily ("Futár"); titleRun.setFontSize (20);

Lehetségesnek kell lenniük arra, hogy a set-módszerek céljaira a nevükből következzenek.

Hasonló módon létrehozunk egy XWPFparaméter az alcímet tartalmazó példány:

XWPFParagraph subTitle = document.createParagraph (); subTitle.setAlignment (BekezdésAlignment.CENTER);

Formázzuk a feliratot is:

XWPFRun subTitleRun = subTitle.createRun (); subTitleRun.setText ("a HTTP alapjaitól az API elsajátításáig"); subTitleRun.setColor ("00CC44"); subTitleRun.setFontFamily ("Futár"); subTitleRun.setFontSize (16); subTitleRun.setTextPosition (20); subTitleRun.setUnderline (UnderlinePatterns.DOT_DOT_DASH);

A setTextPosition metódus a felirat és az azt követő kép közötti távolságot állítja be, míg setUnderline meghatározza az aláhúzási mintát.

Figyeljük meg, hogy a cím és az alcím tartalmát is keményen kódoljuk, mivel ezek az állítások túl rövidek ahhoz, hogy igazolják a segítő módszer használatát.

4.2. Kép beszúrása

Egy képet is be kell csomagolni egy XWPFPekezdés példa. Azt akarjuk, hogy a kép vízszintesen középre kerüljön, és az alcím alá kerüljön, ezért a következő kódrészletet a fent megadott kód alá kell helyezni:

XWPFParagraph image = document.createParagraph (); image.setAlignment (bekezdésAlignment.CENTER);

Így állíthatja be a kép és az alatta lévő szöveg közötti távolságot:

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

A kép egy osztályfájlból származó fájlból készül, majd a megadott dimenziókkal illeszkedik az MS Word fájlba:

Path 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. Bekezdések formázása

Így hozzuk létre az első bekezdést a poi-word-para1.txt fájl:

XWPFParagraph para1 = document.createParagraph (); para1.setAlignment (BekezdésAlignment.BOTH); String string1 = convertTextFileToString (bekezdés1); XWPFRun para1Run = para1.createRun (); para1Run.setText (string1);

Nyilvánvaló, hogy egy bekezdés létrehozása hasonló a cím vagy az alcím létrehozásához. Az egyetlen különbség itt a segítő módszer használata a keményen kódolt húrok helyett.

Hasonló módon létrehozhatunk két másik bekezdést a fájlok tartalmának felhasználásával poi-word-para2.txt és poi-word-para3.txt:

XWPFParagraph para2 = document.createParagraph (); para2.setAlignment (bekezdésAlignment.RIGHT); String string2 = convertTextFileToString (2. bekezdés); XWPFRun para2Run = para2.createRun (); para2Run.setText (string2); para2Run.setItalic (true); XWPFParagraph para3 = document.createParagraph (); para3.setAlignment (bekezdésAlignment.LEFT); String string3 = convertTextFileToString (3. bekezdés); XWPFRun para3Run = para3.createRun (); para3Run.setText (string3);

E három bekezdés létrehozása szinte megegyezik, kivéve bizonyos stílusokat, például az igazítást vagy a dőlt betűt.

4.4. MS Word fájl előállítása

Most készen állunk kiírni egy Microsoft Word fájlt a memóriába a dokumentum változó:

FileOutputStream out = új FileOutputStream (output); document.write (out); out.close (); document.close ();

Az ebben a szakaszban található összes kódrészlet egy megnevezett metódusba van csomagolva handleSimpleDoc.

5. Elemzés és tesztelés

Ez a szakasz az MS Word fájlok elemzését és az eredmény ellenőrzését vázolja fel.

5.1. Készítmény

Statikus mezőt deklarálunk a tesztosztályban:

statikus WordDocument wordDocument;

Ez a mező arra az osztály egy példányára vonatkozik, amely a 3. és 4. szakaszban bemutatott összes kódtöredéket magában foglalja.

Az elemzés és a tesztelés előtt inicializálnunk kell a fent deklarált statikus változót, és elő kell állítanunk a pihenés-tavasszal.docx fájl az aktuális munkakönyvtárba a handleSimpleDoc módszer:

A @BeforeClass public static void generatorMSWordFile () dobja a Kivételt {WordTest.wordDocument = new WordDocument (); wordDocument.handleSimpleDoc (); }

Térjünk át az utolsó lépésre: az MS Word fájl elemzésére és az eredmény ellenőrzésére.

5.2. Az MS Word fájl elemzése és ellenőrzése

Először kivonjuk a tartalmat az adott MS Word fájlból a projektkönyvtárba, és a tartalmat tároljuk a Lista nak,-nek XWPFPekezdés:

Path msWordPath = Paths.get (WordDocument.output); XWPFDocument document = új XWPFDocument (Files.newInputStream (msWordPath)); Listás bekezdések = document.getParagraphs (); document.close ();

Ezután ellenőrizzük, hogy a cím tartalma és stílusa megegyezik-e azzal, amit korábban beállítottunk:

XWPFParagraph title = bekezdések.get (0); XWPFRun titleRun = title.getRuns (). Get (0); assertEquals ("Építsd meg a REST API-t tavasszal", title.getText ()); assertEquals ("009933", titleRun.getColor ()); assertTrue (titleRun.isBold ()); assertEquals ("Futár", titleRun.getFontFamily ()); assertEquals (20, titleRun.getFontSize ());

Az egyszerűség kedvéért csak ellenőrizzük a fájl más részeinek tartalmát, a stílusokat kihagyva. Stílusaik ellenőrzése hasonló ahhoz, amit a címmel tettünk:

assertEquals ("a HTTP alapjaitól az API Masteryig", bekezdések.get (1) .getText ()); assertEquals ("Mitől jó egy API?", bekezdések.get (3) .getText ()); assertEquals (wordDocument.convertTextFileToString (WordDocument. past1), bekezdések.get (4) .getText ()); assertEquals (wordDocument.convertTextFileToString (WordDocument. past2), bekezdések.get (5) .getText ()); assertEquals (wordDocument.convertTextFileToString (WordDocument.paragraph3), bekezdések.get (6) .getText ());

Most abban bízhatunk, hogy a pihenés-tavasszal.docx fájl sikeres volt.

6. Következtetés

Ez az oktatóanyag bemutatta az Apache POI támogatását a Microsoft Word formátumhoz. Az MS Word fájl előállításához és annak tartalmának ellenőrzéséhez szükséges lépéseket hajtotta végre.

Ezen példák és kódrészletek megvalósítása megtalálható egy GitHub projektben.


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