Bevezetés a Docx4J-be

1. Áttekintés

Ebben a cikkben a.docx dokumentum a docx4j könyvtár segítségével.

A Docx4j egy Java könyvtár, amelyet az Office létrehozására és kezelésére használnak OpenXML fájlok - ami azt jelenti, hogy csak a .docx fájltípus, míg a Microsoft Word régebbi verziói a .doc kiterjesztés (bináris fájlok).

Vegye figyelembe, hogy a OpenXML formátumot a Microsoft Office támogatja a 2007-es verziótól kezdve.

2. Maven Setup

A docx4j használatának megkezdéséhez hozzá kell adnunk a szükséges függőséget pom.xml:

 org.docx4j docx4j 3.3.5 javax.xml.bind jaxb-api 2.1 

Ne feledje, hogy mindig a legfrissebb függőségi verziókat keressük meg a Maven központi adattárában.

A JAXB függőségre van szükség, mivel a docx4j ezt a könyvtárat használja a motorháztető alatt az XML részek rendezésére / eltávolítására a docx fájl.

3. Hozzon létre egy Docx fájl dokumentumot

3.1. Szöveges elemek és stílus

Először nézzük meg, hogyan lehet egyszerűt létrehozni docx fájl - szöveges bekezdéssel:

WordprocessingMLPackage wordPackage = WordprocessingMLPackage.createPackage (); MainDocumentPart mainDocumentPart = wordPackage.getMainDocumentPart (); mainDocumentPart.addStyledParagraphOfText ("Title", "Hello World!"); mainDocumentPart.addParagraphOfText ("Welcome To Baeldung"); File exportFile = új fájl ("welcome.docx"); wordPackage.save (exportFile); 

Itt az eredmény szívesen.docx fájl:

Új dokumentum létrehozásához ki kell használnunk a WordprocessingMLPackage, amely a docx fájl OpenXML formátumban, míg a MainDocumentPart osztály a fő képviseletét tartja document.xml rész.

A dolgok tisztázásához csomagoljuk ki a szívesen.docx fájlt, és nyissa meg a word / document.xml fájlt, hogy lássa, hogyan néz ki az XML ábrázolás:

      Helló Világ! Üdvözöljük a Baeldungban! 

Ahogy látjuk, minden mondatot egy futás képvisel (r) szöveg (t) egy bekezdésen belül (o), és ez az addParagraphOfText () módszer a.

A addStyledParagraphOfText () tegyen ennél valamivel többet; bekezdés tulajdonságokat hoz létre (pPr), amely megtartja a bekezdésre alkalmazandó stílust.

Egyszerűen fogalmazva, a bekezdések külön futásokat deklarálnak, és mindegyik futás tartalmaz néhány szövegelemet:

Ahhoz, hogy szép megjelenésű dokumentumot készítsen, teljes mértékben ellenőrizni kell ezeket az elemeket (bekezdés, futás, és szöveg).

Fedezzük fel, hogyan stilizálhatjuk tartalmainkat a runProperties (RPr) tárgy:

ObjectFactory gyár = Context.getWmlObjectFactory (); P p = gyár.teremtésP (); R r = gyár.teremtésR (); T szöveg = gyár.createText (); t.setValue ("Welcome To Baeldung"); r.getContent (). add (t); p.getContent (). add (r); RPr rpr = gyár.createRPr (); BooleanDefaultTrue b = new BooleanDefaultTrue (); rpr.setB (b); rpr.setI (b); rpr.setCaps (b); Zöld szín = gyár.createColor (); green.setVal ("zöld"); rpr.setColor (zöld); r.setRPr (rpr); mainDocumentPart.getContent (). add (p); File exportFile = új fájl ("welcome.docx"); wordPackage.save (exportFile);

Így néz ki az eredmény:

Miután létrehoztunk egy bekezdést, egy futást és egy szöveges elemet a használatával createP (), createR () és createText () illetve újat jelentettünk be runProperties tárgy (RPr), hogy adjon némi stílust a szövegelemhez.

A rpr objektumot használjuk a formázási tulajdonságok beállításához, félkövér (B), Dőlt betűvel (én) és nagybetűs (Sapkák), ezeket a tulajdonságokat a setRPr () módszer.

3.2. Képek használata

A Docx4j egyszerű módot kínál a képek hozzáadására a Word dokumentumunkba:

File image = új File ("image.jpg"); bájt [] fileContent = Files.readAllBytes (image.toPath ()); BinaryPartAbstractImage imagePart = BinaryPartAbstractImage .createImagePart (wordPackage, fileContent); Inline inline = imagePart.createImageInline ("Baeldung kép (fájlnév utalás)", "Alt szöveg", 1, 2, hamis); P Imageparagraph = addImageToParagraph (sorban); mainDocumentPart.getContent (). add (Imageparagraph);

És itt van, amit a addImageToParagraph () A módszer így néz ki:

privát statikus P addImageToParagraph (Inline inline) {ObjectFactory gyár = new ObjectFactory (); P p = gyár.teremtésP (); R r = gyár.teremtésR (); p.getContent (). add (r); Rajzrajz = gyár.createDrawing (); r.getContent (). add (rajz); rajz.getAnchorOrInline (). add (inline); visszatérő p; }

Először hoztuk létre azt a fájlt, amely tartalmazza a képet, amelyet hozzá akarunk adni a fő dokumentumrészhez, majd összekötöttük a képet ábrázoló bájt tömböt wordMLPackage tárgy.

A képrész létrehozása után létre kell hoznunk egy Sorban objektum a createImageInline () módszer.

A addImageToParagraph () módszer beágyazza a Sorban objektum a Rajz hogy hozzá lehessen adni a fuss.

Végül, mint egy szöveges bekezdés, a képet tartalmazó bekezdés is hozzáadódik a mainDocumentPart.

És íme a kapott dokumentum:

3.3. Táblázatok készítése

A Docx4j segítségével a táblázatok (Tbl), a sorok (Tr) és az oszlopok (Tc) kezelése is meglehetősen egyszerű.

Nézzük meg, hogyan hozhat létre egy 3 × 3 méretű táblázatot, és adhat hozzá tartalmat:

int írhatóWidthTwips = wordPackage.getDocumentModel () .getSections (). get (0) .getPageDimensions (). getWritableWidthTwips (); int oszlopNumber = 3; Tbl tbl = TblFactory.createTable (3, 3, writeableWidthTwips / columnNumber); Sorok felsorolása = tbl.getContent (); az (Objektumsor: sorok) {Tr tr = (Tr) sorhoz; Lista cellák = tr.getContent (); az (Object cell: cellák) {Tc td = (Tc) cellához; td.getContent (). add (p); }}

Tekintettel néhány sorra és oszlopra, a táblázat létrehozása() módszer újat hoz létre Tbl objektum, a harmadik érv az oszlop szélességére utal twips-ben (ami távolságmérés - 1 / 1440. hüvelyk).

Miután létrehozta, iterálhatunk a tbl objektumot, és adja hozzá Bekezdés objektumokat minden cellába.

Lássuk, hogyan néz ki a végeredmény:

4. Docx fájl dokumentum elolvasása

Most, hogy felfedeztük a docx4j használatát dokumentumok létrehozásához, nézzük meg, hogyan kell olvasni egy meglévő docx fájlt, és kinyomtatni annak tartalmát:

File doc = új fájl ("helloWorld.docx"); WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage .load (doc); MainDocumentPart mainDocumentPart = wordMLPackage .getMainDocumentPart (); String textNodesXPath = "// w: t"; List textNodes = mainDocumentPart .getJAXBNodesViaXPath (textNodesXPath, true); mert (Object obj: textNodes) {Szöveg szöveg = (Szöveg) ((JAXBElement) obj) .getValue (); String textValue = text.getValue (); System.out.println (textValue); }

Ebben a példában létrehoztuk a WordprocessingMLPackage objektum egy létező alapján helloWorld.docx fájlt a Betöltés() módszer.

Ezt követően a XPath kifejezés (// w: t) az összes szöveges csomópont lekéréséhez a fő dokumentumrészről.

A getJAXBNodesViaXPath () metódus visszaadja a JAXBElement tárgyakat.

Ennek eredményeként a mainDocumentPart objektum van nyomtatva a konzolon.

Ne feledje, hogy mindig kibonthatjuk a docx fájljainkat, hogy jobban megértsük az XML struktúrát, amely segít a problémák elemzésében és jobb betekintést nyújt azok kezelésébe.

5. Következtetés

Ebben a cikkben rájöttünk, hogy a docx4j hogyan könnyíti meg az MSWord dokumentum összetett műveleteinek végrehajtását, például bekezdések, táblázatok, dokumentumrészek létrehozása és képek hozzáadása.

A kódrészletek, mint mindig, a GitHubon találhatók.


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