Apache POI XWPF
API de Java para documentos de Word OOXML
Solución de código abierto para crear, leer, editar y convertir archivos DOCX de Microsoft Word en aplicaciones Java.
Apache POI XWPF proporciona la funcionalidad para leer y escribir el formato de archivo DOCX de Microsoft Word 2007. XWPF tiene una API central bastante estable, que brinda acceso a las partes principales de un archivo DOCX de Word. Se puede usar para extracción de texto básica y específica, manipulación de encabezado y pie de página, manipulación de texto y funciones de estilo.
Apache POI XWPF es más conocido por la generación de archivos y la edición de documentos de Microsoft Word, el formato de texto y párrafos, la inserción de imágenes, la creación y el análisis de tablas, las funciones de combinación de correspondencia, la gestión de elementos de formulario y mucho más.
Primeros pasos con Apache POI XWPF
En primer lugar, debe tener instalado el kit de desarrollo de Java (JDK) en su sistema. Si ya lo tiene, vaya a la página de descarga de Apache POI para obtener la última versión estable en un archivo. Extraiga el contenido del archivo ZIP en cualquier directorio desde donde se puedan vincular las bibliotecas requeridas a su programa Java. ¡Eso es todo!
Hacer referencia a Apache POI en su proyecto Java basado en Maven es aún más simple. Todo lo que necesita es agregar la siguiente dependencia en su pom.xml y dejar que su IDE obtenga y haga referencia a los archivos Jar de POI de Apache.
Dependencia de 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>
Genere y edite documentos de Word usando la API de Java
Apache POI XWPF permite a los programadores de software crear nuevos documentos de Word en formato de archivo DOCX. Los desarrolladores también pueden cargar un archivo DOCX de Microsoft Word existente para editarlo según las necesidades de su aplicación. Le permite agregar nuevos párrafos, insertar texto, aplicar alineación y bordes de texto, cambiar el estilo del texto y más.
Generar un archivo DOCX desde cero
// 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();
Agregar párrafo, imagen y tabla a documentos de Word
Apache POI XWPF permite a los desarrolladores agregar párrafos e imágenes a documentos de Word. La API también proporciona la función para agregar tablas a documentos DOCX al tiempo que permite crear tablas simples y anidadas con datos definidos por el usuario.
Crear un nuevo archivo DOCX con una tabla
// 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();
Extraer texto del documento Word OOXML
Apache POI XWPF proporciona la clase especializada para extraer datos de documentos DOCX de Microsoft Word con solo unas pocas líneas de código. De la misma manera, también puede extraer encabezados, notas al pie, datos de tablas, etc. de un archivo de Word.
Extraer texto de un archivo de 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());
Agregar encabezado y pie de página personalizados a documentos DOCX
El encabezado y el pie de página son una parte importante del documento de Word, ya que generalmente contienen información adicional, como fechas, números de página, nombre del autor y notas al pie, que ayudan a mantener los documentos más largos organizados y fáciles de leer. Apache POI XWPF permite a los desarrolladores de Java agregar encabezados y pies de página personalizados a los documentos de Word.
Administrar encabezado y pie de página personalizados en el archivo DOCX de 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);
}
}
}
}