Apache POI XWPF
Java API para Word OOXML Documentos
Solução de código aberto para criar, ler, editar e converter arquivos DOCX do Microsoft Word em aplicativos Java.
O Apache POI XWPF fornece a funcionalidade para ler e gravar o formato de arquivo DOCX do Microsoft Word 2007. O XWPF possui uma API central bastante estável, fornecendo acesso às partes principais de um arquivo DOCX do Word. Ele pode ser usado para extração de texto básico e específico, manipulação de cabeçalho e rodapé, manipulação de texto e recursos de estilo.
O Apache POI XWPF é mais conhecido pela geração de arquivos do Microsoft Word e edição de documentos, formatação de texto e parágrafos, inserção de imagens, criação e análise de tabelas, recursos de mala direta, gerenciamento de elementos de formulário e muito mais.
Introdução ao Apache POI XWPF
Antes de tudo, você precisa ter o Java Development Kit (JDK) instalado em seu sistema. Se você já o possui, vá para a página download do POI do Apache para obter a versão estável mais recente em um arquivo. Extraia o conteúdo do arquivo ZIP em qualquer diretório de onde as bibliotecas necessárias possam ser vinculadas ao seu programa Java. Isso é tudo!
Fazer referência ao Apache POI em seu projeto Java baseado em Maven é ainda mais simples. Tudo que você precisa é adicionar a seguinte dependência em seu pom.xml e deixar seu IDE buscar e referenciar os arquivos Apache POI Jar.
Dependência do 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>
Gerar e editar documentos do Word usando a API Java
O Apache POI XWPF permite que os programadores de software criem novos documentos do Word no formato de arquivo DOCX. Os desenvolvedores também podem carregar um arquivo DOCX do Microsoft Word existente para editá-lo de acordo com as necessidades do aplicativo. Ele permite adicionar novos parágrafos, inserir texto, aplicar alinhamento e bordas de texto, alterar o estilo do texto e muito mais.
Gerar um arquivo DOCX do zero
// 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();
Adicionar parágrafo, imagem e tabela a documentos do Word
O Apache POI XWPF permite que os desenvolvedores adicionem parágrafos e imagens a documentos do Word. A API também oferece o recurso de adicionar tabelas a documentos DOCX e possibilita a criação de tabelas simples e aninhadas com dados definidos pelo usuário.
Criar um novo arquivo DOCX com uma tabela
// 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();
Extrair texto do documento OOXML do Word
O Apache POI XWPF fornece a classe especializada para extrair dados de documentos DOCX do Microsoft Word com apenas algumas linhas de código. Da mesma forma, ele também pode extrair títulos, notas de rodapé, dados de tabela e assim por diante de um arquivo do Word.
Extrair texto de um arquivo do 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());
Adicionar cabeçalho e rodapé personalizados a documentos DOCX
Cabeçalho e rodapé são uma parte importante do documento do Word, pois geralmente contêm informações extras, como datas, números de página, nome do autor e notas de rodapé, que ajudam a manter documentos mais longos organizados e mais fáceis de ler. O Apache POI XWPF permite que os desenvolvedores Java adicionem cabeçalhos e rodapés personalizados a documentos do Word.
Gerenciar cabeçalho e rodapé personalizados no arquivo DOCX do Word
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);
}
}
}
}