Microsoftova obrada riječi u Javi s Apache POI

1. Pregled

Apache POI je Java knjižnica za rad s različitim formatima datoteka koji se temelje na Office Open XML standardima (OOXML) i Microsoftovom OLE 2 formatu složenog dokumenta (OLE2).

Ovaj se vodič fokusira na podršku Apache POI za Microsoft Word, najčešće korišteni format datoteke Office. Prolazi kroz korake potrebne za formatiranje i generiranje MS Word datoteke i kako raščlaniti ovu datoteku.

2. Ovisnosti Mavena

Jedina ovisnost koja je potrebna da Apache POI obrađuje MS Word datoteke je:

 org.apache.poi poi-ooxml 3.15 

Kliknite ovdje za najnoviju verziju ovog artefakta.

3. Priprema

Pogledajmo sada neke elemente koji se koriste za olakšavanje generiranja MS Word datoteke.

3.1. Datoteke resursa

Prikupit ćemo sadržaj tri tekstualne datoteke i zapisati ih u MS Word datoteku pod nazivom odmor s proljećem.docx.

Osim toga, logo-leaf.png datoteka koristi se za umetanje slike u tu novu datoteku. Sve ove datoteke postoje na putu predavanja i predstavljene su s nekoliko statičkih varijabli:

javni statični niz logo = "logo-leaf.png"; javni statički Niz paragraf1 = "poi-word-para1.txt"; javni statički Niz paragraf2 = "poi-word-para2.txt"; javni statički Niz paragraf3 = "poi-word-para3.txt"; javni statički izlazni niz = "rest-with-spring.docx";

Za one koji su znatiželjni, sadržaj ovih datoteka resursa u spremištu, čija je veza navedena u posljednjem odjeljku ovog vodiča, izdvaja se s ove stranice tečaja ovdje na web mjestu.

3.2. Metoda pomagača

Glavna metoda koja se sastoji od logike koja se koristi za generiranje datoteke MS Word, koja je opisana u sljedećem odjeljku, koristi pomoćnu metodu:

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

Ova metoda izdvaja sadržaj sadržan u tekstualnoj datoteci koja se nalazi na putu predavanja, a čije je ime proslijeđeno Niz argument. Zatim spaja retke u ovoj datoteci i vraća spajanje Niz.

4. Generiranje datoteke MS Word

Ovaj odjeljak daje upute za formatiranje i generiranje datoteke Microsoft Word. Prije rada na bilo kojem dijelu datoteke, trebamo imati XWPFDocument primjer:

Dokument XWPFDocument = novi XWPFDocument ();

4.1. Oblikovanje naslova i podnaslova

Da bismo stvorili naslov, prvo moramo napraviti instancu XWPFParagraph klase i postavite poravnanje na novi objekt:

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

Sadržaj odlomka treba umotati u XWPFRun objekt. Ovaj objekt možemo konfigurirati tako da postavi vrijednost teksta i pripadajuće stilove:

XWPFRun titleRun = title.createRun (); titleRun.setText ("Izgradite svoj REST API s proljećem"); titleRun.setColor ("009933"); titleRun.setBold (true); titleRun.setFontFamily ("Kurir"); titleRun.setFontSize (20);

Svrhe set-metoda trebaju se moći zaključiti iz njihovih imena.

Na sličan način stvaramo XWPFParagraph instanca koja prilaže podnaslov:

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

Oblikujmo i podnaslov:

XWPFRun subTitleRun = subTitle.createRun (); subTitleRun.setText ("od osnova HTTP-a do svladavanja API-ja"); subTitleRun.setColor ("00CC44"); subTitleRun.setFontFamily ("Kurir"); subTitleRun.setFontSize (16); subTitleRun.setTextPosition (20); subTitleRun.setUnderline (UnderlinePatterns.DOT_DOT_DASH);

The setTextPosition metoda postavlja udaljenost između podnaslova i sljedeće slike, dok setUnderline određuje obrazac podcrtavanja.

Primijetite da čvrsto kodiramo sadržaj naslova i podnaslova jer su ove izjave prekratke da bi opravdale upotrebu pomoćne metode.

4.2. Umetanje slike

Sliku također treba zamotati u XWPFParagraph primjer. Želimo da slika bude vodoravno centrirana i smještena ispod podnaslova, stoga se ispod gornjeg koda mora staviti sljedeći isječak:

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

Evo kako postaviti udaljenost između ove slike i teksta ispod nje:

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

Slika se uzima iz datoteke na putu predavanja, a zatim se umeće u datoteku MS Word s navedenim dimenzijama:

Put 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. Oblikovanje odlomaka

Evo kako stvaramo prvi odlomak sa sadržajem preuzetim iz poi-word-para1.txt datoteka:

XWPFParagraph para1 = document.createParagraph (); para1.setAlignment (ParagraphAlignment.BOTH); Niz string1 = convertTextFileToString (odlomak1); XWPFRun para1Run = para1.createRun (); para1Run.setText (string1);

Očito je da je stvaranje odlomka slično stvaranju naslova ili podnaslova. Jedina razlika ovdje je upotreba pomoćne metode umjesto tvrdo kodiranih nizova.

Na sličan način možemo stvoriti još dva odlomka koristeći sadržaje iz datoteka poi-word-para2.txt i poi-word-para3.txt:

XWPFParagraph para2 = document.createParagraph (); para2.setAlignment (ParagraphAlignment.RIGHT); Niz string2 = convertTextFileToString (odlomak2); XWPFRun para2Run = para2.createRun (); para2Run.setText (string2); para2Run.setItalic (true); XWPFParagraph para3 = document.createParagraph (); para3.setAlignment (ParagraphAlignment.LEFT); Niz string3 = convertTextFileToString (odlomak3); XWPFRun para3Run = para3.createRun (); para3Run.setText (string3);

Stvaranje ova tri odlomka gotovo je isto, osim nekih stilova poput poravnanja ili kurziva.

4.4. Generiranje MS Word datoteke

Sada smo spremni za ispis datoteke Microsoft Word u memoriju s dokument varijabla:

FileOutputStream out = novi FileOutputStream (izlaz); document.write (out); out.close (); document.close ();

Svi isječci koda u ovom odjeljku umotani su u metodu imenovanu handleSimpleDoc.

5. Raščlanjivanje i testiranje

Ovaj odjeljak opisuje raščlanjivanje MS Word datoteka i provjeru rezultata.

5.1. Priprema

Deklariramo statičko polje u testnoj klasi:

statični WordDocument wordDocument;

Ovo se polje koristi za upućivanje na instancu klase koja obuhvaća sve fragmente koda prikazane u odjeljcima 3 i 4.

Prije raščlanjivanja i testiranja, moramo inicijalizirati statičku varijablu koja je deklarirana gore i generirati odmor s proljećem.docx datoteku u trenutnom radnom direktoriju pozivanjem datoteke handleSimpleDoc metoda:

@BeforeClass javna statička praznina generiraMSWordFile () baca izuzetak {WordTest.wordDocument = novi WordDocument (); wordDocument.handleSimpleDoc (); }

Prijeđimo na zadnji korak: raščlanjivanje datoteke MS Word i provjera ishoda.

5.2. Raščlanjivanje MS Word datoteke i provjera

Prvo izdvajamo sadržaj iz zadane MS Word datoteke u direktorij projekta i pohranjujemo sadržaj u Popis od XWPFParagraph:

Put msWordPath = Paths.get (WordDocument.output); XWPFDocument dokument = novi XWPFDocument (Files.newInputStream (msWordPath)); Popis paragrafa = document.getParagraphs (); document.close ();

Dalje, pobrinimo se da sadržaj i stil naslova budu isti kao što smo postavili prije:

XWPFParagraph naslov = абзацы.get (0); XWPFRun titleRun = title.getRuns (). Get (0); assertEquals ("Izgradite svoj REST API s Springom", title.getText ()); assertEquals ("009933", titleRun.getColor ()); assertTrue (titleRun.isBold ()); assertEquals ("Kurir", titleRun.getFontFamily ()); assertEquals (20, titleRun.getFontSize ());

Radi jednostavnosti, samo provjeravamo sadržaj ostalih dijelova datoteke, izostavljajući stilove. Provjera njihovih stilova slična je onome što smo učinili s naslovom:

assertEquals ("od osnova HTTP-a do svladavanja API-ja", odlomak.get (1) .getText ()); assertEquals ("Što čini dobar API?", odlomak.get (3) .getText ()); assertEquals (wordDocument.convertTextFileToString (WordDocument.paragraph1), odstavci.get (4) .getText ()); assertEquals (wordDocument.convertTextFileToString (WordDocument.paragraph2), odstavci.get (5) .getText ()); assertEquals (wordDocument.convertTextFileToString (WordDocument.paragraph3), odlomaks.get (6) .getText ());

Sada možemo biti sigurni da je stvaranje odmor s proljećem.docx datoteka je uspješna.

6. Zaključak

Ovaj je vodič predstavio Apache POI podršku za format Microsoft Word. Prošao je korake potrebne za generiranje MS Word datoteke i provjeru njezinog sadržaja.

Implementacija svih ovih primjera i isječaka koda može se naći u projektu GitHub.