Uvod u Docx4J

1. Pregled

U ovom ćemo se članku usredotočiti na stvaranje a.docx dokument pomoću knjižnice docx4j.

Docx4j je Java knjižnica koja se koristi za stvaranje i upravljanje Officeom OpenXML datoteke - što znači da može raditi samo s .docx vrstu datoteke, dok starije verzije programa Microsoft Word koriste a .doc ekstenzija (binarne datoteke).

Imajte na umu da OpenXML format podržava Microsoft Office počevši od verzije 2007.

2. Postavljanje Mavena

Da bismo počeli raditi s docx4j, moramo dodati potrebnu ovisnost u našu pom.xml:

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

Imajte na umu da u Maven Central Repository uvijek možemo potražiti najnovije verzije ovisnosti.

The JAXB potrebna je ovisnost, jer docx4j koristi ovu knjižnicu ispod haube za marširanje / uklanjanje XML dijelova u a docx datoteka.

3. Stvorite dokument datoteke Docx

3.1. Tekstualni elementi i stil

Pogledajmo prvo kako stvoriti jednostavan docx datoteka - s odlomkom teksta:

WordprocessingMLPackage wordPackage = WordprocessingMLPackage.createPackage (); MainDocumentPart mainDocumentPart = wordPackage.getMainDocumentPart (); mainDocumentPart.addStyledParagraphOfText ("Naslov", "Pozdrav svijetu!"); mainDocumentPart.addParagraphOfText ("Dobrodošli u Baeldung"); Datoteka exportFile = nova datoteka ("welcome.docx"); wordPackage.save (exportFile); 

Evo rezultata dobrodošli.docx datoteka:

Da bismo stvorili novi dokument, moramo se poslužiti Obrada riječiMLPackage, koji predstavlja a docx uloži u OpenXML formatu, dok je MainDocumentPart razred drži prikaz glavnog document.xml dio.

Da pojasnimo stvari, otpakirajte dobrodošli.docx datoteku i otvorite riječ / dokument.xml datoteku da biste vidjeli kako izgleda XML prikaz:

      Pozdrav svijete! Dobrodošli u Baeldung! 

Kao što vidimo, svaka rečenica je predstavljena trkom (r) teksta (t) unutar odlomka (str), i to je ono što addParagraphOfText () metoda je za.

The addStyledParagraphOfText () učiniti malo više od toga; stvara svojstva odlomka (pPr) koji sadrži stil primjene na odlomak.

Jednostavno rečeno, odlomci deklariraju odvojene izvode, a svako izvođenje sadrži neke elemente teksta:

Da bismo stvorili dokument lijepog izgleda, moramo imati potpunu kontrolu nad tim elementima (odlomak, pokreni, i tekst).

Otkrijmo kako stilizirati sadržaj pomoću runProperties (RPr) objekt:

ObjectFactory factory = Context.getWmlObjectFactory (); P p = tvornica.createP (); R r = tvornica.createR (); Tekst t = factory.createText (); t.setValue ("Dobrodošli u baeldung"); r.getContent (). add (t); p.getContent (). add (r); RPr rpr = factory.createRPr (); BooleanDefaultTrue b = novo BooleanDefaultTrue (); rpr.setB (b); rpr.setI (b); rpr.setCaps (b); Boja zelena = factory.createColor (); green.setVal ("zeleno"); rpr.setColor (zelena); r.setRPr (rpr); mainDocumentPart.getContent (). add (p); Datoteka exportFile = nova datoteka ("welcome.docx"); wordPackage.save (exportFile);

Evo kako izgleda rezultat:

Nakon što stvorimo odlomak, izvođenje i element teksta pomoću createP (), createR () i createText () odnosno proglasili smo novi runProperties objekt (RPr) da biste dodali malo stila elementu teksta.

The rpr objekt se koristi za postavljanje svojstava oblikovanja, podebljano (B), Kurziv (Ja), i velikim slovima (Kape), ta se svojstva primjenjuju na tekst pokrenut pomoću setRPr () metoda.

3.2. Rad sa slikama

Docx4j nudi jednostavan način dodavanja slika u naš Wordov dokument:

Slika datoteke = nova datoteka ("image.jpg"); bajt [] fileContent = Files.readAllBytes (image.toPath ()); BinaryPartAbstractImage imagePart = BinaryPartAbstractImage .createImagePart (wordPackage, fileContent); Inline inline = imagePart.createImageInline ("Baeldung slika (savjet za naziv datoteke)", "Alt Text", 1, 2, false); P Imageparagraph = addImageToParagraph (umetnuto); mainDocumentPart.getContent (). add (Imageparagraph);

I evo što je provedba addImageToParagraph () metoda izgleda ovako:

privatni statički P addImageToParagraph (umetnuti u red) {ObjectFactory factory = new ObjectFactory (); P p = tvornica.createP (); R r = tvornica.createR (); p.getContent (). add (r); Crtanje crteža = factory.createDrawing (); r.getContent (). add (crtež); drawing.getAnchorOrInline (). add (inline); povratak p; }

Prvo smo stvorili datoteku koja sadrži sliku koju želimo dodati u naš glavni dio dokumenta, zatim smo povezali niz bajtova koji predstavlja sliku s wordMLPackage objekt.

Jednom kada je stvoren dio slike, moramo stvoriti U redu objekt pomoću createImageInline () metoda.

The addImageToParagraph () metoda ugraditi U redu objekt u a Crtanje tako da se može dodati u trčanje.

Konačno, poput tekstualnog odlomka, odlomak koji sadrži sliku dodaje se u mainDocumentPart.

I evo rezultirajućeg dokumenta:

3.3. Izrada tablica

Docx4j također olakšava manipulaciju tablicama (Tbl), redovima (Tr) i stupcima (Tc).

Pogledajmo kako stvoriti 3 × 3 tablicu i dodati joj neki sadržaj:

int writableWidthTwips = wordPackage.getDocumentModel () .getSections (). get (0) .getPageDimensions (). getWritableWidthTwips (); int columnNumber = 3; Tbl tbl = TblFactory.createTable (3, 3, writableWidthTwips / columnNumber); Redovi popisa = tbl.getContent (); za (Red objekta: redovi) {Tr tr = (Tr) red; Stanice popisa = tr.getContent (); za (ćelija objekta: stanice) {Tc td = (Tc) ćelija; td.getContent (). add (p); }}

S obzirom na neke retke i stupce, createTable () metoda stvara novi Tbl objekt, treći argument odnosi se na širinu stupca u twipsima (što je mjerenje udaljenosti - 1 / 1440th inča).

Jednom stvoreni, možemo prelistavati sadržaj tbl objekt i dodaj Stavak predmeta u svaku ćeliju.

Pogledajmo kako izgleda konačni rezultat:

4. Čitanje dokumenta datoteke Docx

Sad kad smo otkrili kako koristiti docx4j za stvaranje dokumenata, pogledajmo kako čitati postojeću docx datoteku i ispisati njezin sadržaj:

Datoteka doc = nova datoteka ("helloWorld.docx"); WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage .load (doc); MainDocumentPart mainDocumentPart = wordMLPackage .getMainDocumentPart (); Niz tekstaNodesXPath = "// w: t"; Popis textNodes = mainDocumentPart .getJAXBNodesViaXPath (textNodesXPath, true); za (Object obj: textNodes) {Tekst teksta = (Tekst) ((JAXBElement) obj) .getValue (); Niz textValue = text.getValue (); System.out.println (textValue); }

U ovom smo primjeru stvorili Obrada riječiMLPackage objekt temeljen na postojećem pozdravSvijet.docx datoteku, koristeći opterećenje() metoda.

Nakon toga koristili smo XPath izraz (// w: t) za dobivanje svih tekstualnih čvorova iz glavnog dijela dokumenta.

The getJAXBNodesViaXPath () metoda vraća popis JAXBElement predmeta.

Kao rezultat toga, svi elementi teksta unutar datoteke mainDocumentPart objekt ispisuju se u konzoli.

Imajte na umu da uvijek možemo raspakirati naše docx datoteke kako bismo bolje razumjeli XML strukturu, koja pomaže u analizi problema i daje bolji uvid u njihovo rješavanje.

5. Zaključak

U ovom smo članku otkrili kako docx4j olakšava izvođenje složenih operacija na MSWord dokumentu, kao što je stvaranje odlomaka, tablica, dijelova dokumenta i dodavanje slika.

Isječke koda možete pronaći, kao i uvijek, na GitHubu.