Apache POI XWPF
Java API за Word OOXML документи
Решение с отворен код за създаване, четене, редактиране и конвертиране на DOCX файлове на Microsoft Word в Java приложения.
Apache POI XWPF предоставя функционалност за четене и писане на Microsoft Word 2007 DOCX файлов формат. XWPF има доста стабилен основен API, осигуряващ достъп до основните части на Word DOCX файл. Може да се използва за основно и специфично извличане на текст, манипулиране на горен и долен колонтитул, манипулиране на текст и функции за стилизиране.
Apache POI XWPF е по-известен с генериране на файлове и редактиране на документи в Microsoft Word, форматиране на текст и абзаци, вмъкване на изображения, създаване и анализиране на таблици, функции за циркулярни съобщения, управление на елементи на формуляри и много други.
Първи стъпки с Apache POI XWPF
На първо място, трябва да имате инсталиран Java Development Kit (JDK) на вашата система. Ако вече го имате, продължете към страницата за изтегляне на Apache POI, за да получите най-новата стабилна версия в архив. Извлечете съдържанието на ZIP файла във всяка директория, откъдето необходимите библиотеки могат да бъдат свързани към вашата Java програма. Това е всичко!
Позоваването на Apache POI във вашия базиран на Maven Java проект е още по-лесно. Всичко, от което се нуждаете, е да добавите следната зависимост във вашия pom.xml и да оставите вашата IDE да извлича и препраща към Apache POI Jar файловете.
Apache POI Maven зависимост
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.0</version>
</dependency>
Генерирайте и редактирайте Word документи с помощта на Java API
Apache POI XWPF позволява на софтуерните програмисти да създават нови Word документи във файлов формат DOCX. Разработчиците могат също да заредят съществуващ DOCX файл на Microsoft Word, за да го редактират според нуждите на приложението си. Позволява ви да добавяте нови абзаци, да вмъквате текст, да прилагате подравняване на текст и граници, да променяте стила на текста и др.
Генерирайте DOCX файл от нулата
// initialize a blank document
XWPFDocument document = new XWPFDocument();
// create a new file
FileOutputStream out = new FileOutputStream(new File("document.docx"));
// create a new paragraph paragraph
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run = paragraph.createRun();
run.setText("File Format Developer Guide - " +
"Learn about computer files that you come across in " +
"your daily work at: www.fileformat.com ");
document.write(out);
out.close();
Добавете абзац, изображение и таблица към Word документи
Apache POI XWPF позволява на разработчиците да добавят абзаци и изображения към документи на Word. API осигурява и функция за добавяне на таблици към DOCX документи като същевременно прави възможно създаването на прости и вложени таблици с дефинирани от потребителя данни.
Създайте нов DOCX файл с таблица
// initialize a blank document
XWPFDocument document = new XWPFDocument();
// create a new file
FileOutputStream out = new FileOutputStream(new File("table.docx"));
// create a new table
XWPFTable table = document.createTable();
// create first row
XWPFTableRow tableRowOne = table.getRow(0);
tableRowOne.getCell(0).setText("Serial No");
tableRowOne.addNewTableCell().setText("Products");
tableRowOne.addNewTableCell().setText("Formats");
// create second row
XWPFTableRow tableRowTwo = table.createRow();
tableRowTwo.getCell(0).setText("1");
tableRowTwo.getCell(1).setText("Apache POI XWPF");
tableRowTwo.getCell(2).setText("DOCX, HTML, FO, TXT, PDF");
// create third row
XWPFTableRow tableRowThree = table.createRow();
tableRowThree.getCell(0).setText("2");
tableRowThree.getCell(1).setText("Apache POI HWPF");
tableRowThree.getCell(2).setText("DOC, HTML, FO, TXT");
document.write(out);
out.close();
Извличане на текст от Word OOXML документ
Apache POI XWPF предоставя специализиран клас за извличане на данни от DOCX документи на Microsoft Word само с няколко реда код. По същия начин може също да извлича заглавия, бележки под линия, данни от таблици и т.н. от файл на Word.
Извличане на текст от файл на Word
// load DOCX file
FileInputStream fis = new FileInputStream("document.docx");
// open file
XWPFDocument file = new XWPFDocument(OPCPackage.open(fis));
// read text
XWPFWordExtractor ext = new XWPFWordExtractor(file);
// display text
System.out.println(ext.getText());
Добавете персонализиран горен и долен колонтитул към DOCX документи
Горният и долният колонтитул са важна част от документа на Word, тъй като обикновено съдържат допълнителна информация като дати, номера на страници, име на автора и бележки под линия, които помагат за поддържането на по-дълги документи организирани и по-лесни за четене. Apache POI XWPF позволява на Java разработчиците да добавят персонализирани горни и долни колонтитули към Word документи.
Управление на персонализиран горен и долен колонтитул в Word DOCX файл
public class HeaderFooterTable {
public static void main(String[] args) throws IOException {
try (XWPFDocument doc = new XWPFDocument()) {
// Create a header with a 1 row, 3 column table
XWPFHeader hdr = doc.createHeader(HeaderFooterType.DEFAULT);
XWPFTable tbl = hdr.createTable(1, 3);
// Set the padding around text in the cells to 1/10th of an inch
int pad = (int) (.1 * 1440);
tbl.setCellMargins(pad, pad, pad, pad);
// Set table width to 6.5 inches in 1440ths of a point
tbl.setWidth((int) (6.5 * 1440));
CTTbl ctTbl = tbl.getCTTbl();
CTTblPr ctTblPr = ctTbl.addNewTblPr();
CTTblLayoutType layoutType = ctTblPr.addNewTblLayout();
layoutType.setType(STTblLayoutType.FIXED);
BigInteger w = new BigInteger("3120");
CTTblGrid grid = ctTbl.addNewTblGrid();
for (int i = 0; i < 3; i++) {
CTTblGridCol gridCol = grid.addNewGridCol();
gridCol.setW(w);
}
// Add paragraphs to the cells
XWPFTableRow row = tbl.getRow(0);
XWPFTableCell cell = row.getCell(0);
XWPFParagraph p = cell.getParagraphArray(0);
XWPFRun r = p.createRun();
r.setText("header left cell");
cell = row.getCell(1);
p = cell.getParagraphArray(0);
r = p.createRun();
r.setText("header center cell");
cell = row.getCell(2);
p = cell.getParagraphArray(0);
r = p.createRun();
r.setText("header right cell");
// Create a footer with a Paragraph
XWPFFooter ftr = doc.createFooter(HeaderFooterType.DEFAULT);
p = ftr.createParagraph();
r = p.createRun();
r.setText("footer text");
try (OutputStream os = new FileOutputStream(new File("headertable.docx"))) {
doc.write(os);
}
}
}
}