Microsoft Word Processing i Java med Apache POI

1. Oversikt

Apache POI er et Java-bibliotek for å jobbe med de forskjellige filformatene basert på Office Open XML-standarder (OOXML) og Microsofts OLE 2 Compound Document-format (OLE2).

Denne opplæringen fokuserer på støtten til Apache POI for Microsoft Word, det mest brukte Office-filformatet. Den går gjennom trinnene som trengs for å formatere og generere en MS Word-fil og hvordan du analyserer denne filen.

2. Maven-avhengigheter

Den eneste avhengigheten som kreves for at Apache POI skal håndtere MS Word-filer, er:

 org.apache.poi poi-ooxml 3.15 

Klikk her for den nyeste versjonen av denne gjenstanden.

3. Klargjøring

La oss nå se på noen av elementene som brukes til å lette genereringen av en MS Word-fil.

3.1. Ressursfiler

Vi samler innholdet i tre tekstfiler og skriver dem inn i en MS Word-fil - med navnet hvile-med-våren.docx.

i tillegg logo-leaf.png filen brukes til å sette inn et bilde i den nye filen. Alle disse filene finnes på klassestien og er representert av flere statiske variabler:

offentlig statisk strenglogo = "logo-leaf.png"; offentlig statisk streng avsnitt 1 = "poi-word-para1.txt"; offentlig statisk streng avsnitt2 = "poi-word-para2.txt"; offentlig statisk streng avsnitt3 = "poi-word-para3.txt"; offentlig statisk strengutgang = "rest-with-spring.docx";

For de som er nysgjerrige, blir innholdet av disse ressursfilene i depotet, hvis lenke er gitt i den siste delen av denne veiledningen, hentet fra denne kurssiden her på siden.

3.2. Hjelpermetode

Hovedmetoden som består av logikk som brukes til å generere en MS Word-fil, som er beskrevet i følgende avsnitt, bruker en hjelpemetode:

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

Denne metoden trekker ut innholdet i en tekstfil som ligger på klassestien, hvis navn er sendt inn String argument. Deretter sammenkobles linjene i denne filen og returnerer sammenføyningen String.

4. Generering av MS Word-filer

Denne delen gir instruksjoner om hvordan du formaterer og genererer en Microsoft Word-fil. Før vi arbeider med en hvilken som helst del av filen, må vi ha en XWPFDokument forekomst:

XWPFDocument-dokument = nytt XWPFDocument ();

4.1. Formatering av tittel og undertekst

For å lage tittelen, må vi først instansiere XWPFParagraph klasse og angi justeringen på det nye objektet:

XWPFParagraph title = document.createParagraph (); title.setAlignment (ParagraphAlignment.CENTER);

Innholdet i et avsnitt må pakkes inn i et XWPFRun gjenstand. Vi kan konfigurere dette objektet til å angi en tekstverdi og tilhørende stiler:

XWPFRun titleRun = title.createRun (); titleRun.setText ("Bygg din REST API med våren"); titleRun.setColor ("009933"); titleRun.setBold (true); titleRun.setFontFamily ("Courier"); titleRun.setFontSize (20);

Man skal være i stand til å utlede formålene med settmetodene fra navnene deres.

På en lignende måte skaper vi en XWPFParagraph forekomst som vedlegger underteksten:

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

La oss også formatere underteksten:

XWPFRun subTitleRun = subTitle.createRun (); subTitleRun.setText ("fra grunnleggende HTTP til API-mestring"); subTitleRun.setColor ("00CC44"); subTitleRun.setFontFamily ("Courier"); subTitleRun.setFontSize (16); subTitleRun.setTextPosition (20); subTitleRun.setUnderline (UnderlinePatterns.DOT_DOT_DASH);

De setTextPosition metoden angir avstanden mellom underteksten og det påfølgende bildet, mens setUnderline bestemmer understrekningsmønsteret.

Legg merke til at vi hardkoder innholdet i både tittel og undertekst, ettersom disse utsagnene er for korte til å rettferdiggjøre bruken av en hjelpemetode.

4.2. Sette inn et bilde

Et bilde må også pakkes inn i et XWPFParagraph forekomst. Vi vil at bildet skal være horisontalt sentrert og plassert under undertittelen, og følgende kodebit må derfor settes under koden ovenfor:

XWPFParagraph image = document.createParagraph (); image.setAlignment (ParagraphAlignment.CENTER);

Slik angir du avstanden mellom dette bildet og teksten under det:

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

Et bilde blir tatt fra en fil på klassestien og deretter satt inn i MS Word-filen med de angitte dimensjonene:

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. Formatering av avsnitt

Slik lager vi første avsnitt med innhold hentet fra poi-word-para1.txt fil:

XWPFParagraph para1 = document.createParagraph (); para1.setAlignment (ParagraphAlignment.BOTH); Strengstreng1 = convertTextFileToString (avsnitt 1); XWPFRun para1Run = para1.createRun (); para1Run.setText (streng1);

Det er tydelig at opprettelsen av et avsnitt ligner på opprettelsen av tittelen eller undertittelen. Den eneste forskjellen her er bruken av hjelpemetoden i stedet for hardkodede strenger.

På en lignende måte kan vi lage to andre avsnitt ved hjelp av innhold fra filer poi-word-para2.txt og poi-word-para3.txt:

XWPFParagraph para2 = document.createParagraph (); para2.setAlignment (ParagraphAlignment.RIGHT); Strengstreng2 = convertTextFileToString (avsnitt2); XWPFRun para2Run = para2.createRun (); para2Run.setText (streng2); para2Run.setItalic (true); XWPFParagraph para3 = document.createParagraph (); para3.setAlignment (ParagraphAlignment.LEFT); Strengstreng3 = convertTextFileToString (avsnitt 3); XWPFRun para3Run = para3.createRun (); para3Run.setText (string3);

Opprettelsen av disse tre avsnittene er nesten den samme, bortsett fra noen styling som justering eller kursiv.

4.4. Genererer MS Word-fil

Nå er vi klare til å skrive ut en Microsoft Word-fil til minnet fra dokument variabel:

FileOutputStream ut = ny FileOutputStream (utgang); document.write (ut); ut. lukk (); document.close ();

Alle kodebitene i denne delen er pakket inn i en metode som heter håndtakSimpleDoc.

5. Analyse og testing

Denne delen skisserer analysering av MS Word-filer og bekreftelse av resultatet.

5.1. Forberedelse

Vi erklærer et statisk felt i testklassen:

statisk WordDocument wordDocument;

Dette feltet brukes til å referere til en forekomst av klassen som omslutter alle kodefragmentene vist i seksjoner 3 og 4.

Før parsing og testing, må vi initialisere den statiske variabelen deklarert rett ovenfor og generere hvile-med-våren.docx filen i gjeldende arbeidskatalog ved å påkalle håndtakSimpleDoc metode:

@BeforeClass offentlig statisk tomrom generereMSWordFile () kaster unntak {WordTest.wordDocument = nytt WordDocument (); wordDocument.handleSimpleDoc (); }

La oss gå videre til det siste trinnet: parsing av MS Word-filen og verifisering av resultatet.

5.2. Analyse av MS Word-fil og bekreftelse

Først trekker vi ut innholdet fra den gitte MS Word-filen i prosjektkatalogen og lagrer innholdet i en Liste av XWPFParagraph:

Sti msWordPath = Paths.get (WordDocument.output); XWPFDocument-dokument = nytt XWPFDocument (Files.newInputStream (msWordPath)); Liste avsnitt = document.getParagraphs (); document.close ();

La oss deretter sørge for at innholdet og stilen på tittelen er den samme som vi har satt før:

XWPFParagraph title = paragraphs.get (0); XWPFRun titleRun = title.getRuns (). Get (0); assertEquals ("Bygg din REST API med Spring", title.getText ()); assertEquals ("009933", titleRun.getColor ()); assertTrue (titleRun.isBold ()); assertEquals ("Courier", titleRun.getFontFamily ()); assertEquals (20, titleRun.getFontSize ());

For enkelhets skyld validerer vi bare innholdet i andre deler av filen, og utelater stilene. Bekreftelsen av stilene deres ligner på det vi har gjort med tittelen:

assertEquals ("fra HTTP-grunnleggende til API-mestring", avsnitts.get (1) .getText ()); assertEquals ("Hva gjør en god API?", avsnitts.get (3) .getText ()); assertEquals (wordDocument.convertTextFileToString (WordDocument.paragraph1), avsnitts.get (4) .getText ()); assertEquals (wordDocument.convertTextFileToString (WordDocument.paragraph2), avsnitts.get (5) .getText ()); assertEquals (wordDocument.convertTextFileToString (WordDocument.paragraph3), paragraphs.get (6) .getText ());

Nå kan vi være sikre på at etableringen av hvile-med-våren.docx filen har vært vellykket.

6. Konklusjon

Denne opplæringen introduserte Apache POI-støtte for Microsoft Word-format. Det gikk gjennom trinnene som trengs for å generere en MS Word-fil og for å verifisere innholdet.

Implementeringen av alle disse eksemplene og kodebiter kan bli funnet i et GitHub-prosjekt.


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