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.