Apache POI XWPF

 
 

API Java для документов Word OOXML

Решение с открытым исходным кодом для создания, чтения, редактирования и преобразования файлов Microsoft Word DOCX в приложениях Java.

Apache POI XWPF обеспечивает функциональность для чтения и записи файлов формата Microsoft Word 2007 DOCX. XWPF имеет довольно стабильный основной API, обеспечивающий доступ к основным частям файла Word DOCX. Его можно использовать для базового и специального извлечения текста, управления верхним и нижним колонтитулами, обработки текста и функций стиля. 

Apache POI XWPF более известен своими функциями создания и редактирования документов Microsoft Word, форматирования текста и абзацев, вставки изображений, создания и анализа таблиц, функций слияния почты, управления элементами форм и многого другого.

Previous Next

Начало работы с Apache POI XWPF

Прежде всего, в вашей системе должен быть установлен Java Development Kit (JDK). Если он у вас уже есть, перейдите на страницу загрузки Apache POI, чтобы получить последнюю стабильную версию в архиве. Извлеките содержимое ZIP-файла в любой каталог, откуда необходимые библиотеки могут быть связаны с вашей программой Java. Это все!

Ссылка на Apache POI в вашем Java-проекте на основе Maven еще проще. Все, что вам нужно, это добавить следующую зависимость в ваш pom.xml и позволить вашей среде IDE извлекать и ссылаться на файлы Jar Apache POI.

Зависимость 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);
      }
    }
  }
}
 Русский