Apache POI XWPF
Java API для документів Word OOXML
Рішення з відкритим кодом для створення, читання, редагування та конвертування файлів Microsoft Word DOCX у програмах 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 у вашому проекті Java на основі Maven ще простіше. Все, що вам потрібно, це додати наступну залежність у ваш 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. Розробники також можуть завантажити існуючий файл Microsoft Word DOCX, щоб редагувати його відповідно до потреб своєї програми. Це дозволяє додавати нові абзаци, вставляти текст, застосовувати вирівнювання тексту та рамки, змінювати стиль тексту тощо.
Створіть файл 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 надає спеціалізований клас для вилучення даних із документів Microsoft Word DOCX за допомогою лише кількох рядків коду. Таким же чином він також може витягувати заголовки, виноски, дані таблиці тощо з файлу 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);
}
}
}
}