Extracción de contenido de documentos en Aspose.Words para Java

Introducción a la extracción de contenido de documentos en Aspose.Words para Java

En el mundo del procesamiento de documentos, extraer contenido de los documentos es un requisito común. Ya sea que necesite extraer texto, tablas, imágenes o elementos específicos de un documento, Aspose.Words para Java proporciona potentes herramientas para facilitar esta tarea. En esta guía completa, lo guiaremos a través del proceso de extracción de contenido de documentos usando Aspose.Words para Java.

Requisitos previos

Antes de sumergirnos en el proceso de extracción, asegúrese de cumplir con los siguientes requisitos previos:

  1. Aspose.Words para Java: debe tener Aspose.Words para Java instalado y configurado en su entorno de desarrollo Java. Puedes descargarlo desdeaquí.

  2. Un documento del que extraer contenido: para esta guía, usaremos un documento de muestra llamado “Extraer contenido.docx”. Asegúrese de tener un documento similar listo para su extracción.

Extracción de contenido entre nodos a nivel de bloque

// Ejemplo de código Java para extraer contenido entre nodos a nivel de bloque
Document doc = new Document("Your Directory Path" + "Extract content.docx");
Paragraph startPara = (Paragraph) doc.getLastSection().getChild(NodeType.PARAGRAPH, 2, true);
Table endTable = (Table) doc.getLastSection().getChild(NodeType.TABLE, 0, true);
ArrayList<Node> extractedNodes = ExtractContentHelper.extractContent(startPara, endTable, true);
Collections.reverse(extractedNodes);
while (extractedNodes.size() > 0) {
    endTable.getParentNode().insertAfter((Node) extractedNodes.get(0), endTable);
    extractedNodes.remove(0);
}
doc.save("Your Directory Path" + "ExtractContent.ExtractContentBetweenBlockLevelNodes.docx");

Extraer contenido entre marcadores

//Ejemplo de código Java para extraer contenido entre marcadores
Document doc = new Document("Your Directory Path" + "Extract content.docx");
Bookmark bookmark = doc.getRange().getBookmarks().get("Bookmark1");
BookmarkStart bookmarkStart = bookmark.getBookmarkStart();
BookmarkEnd bookmarkEnd = bookmark.getBookmarkEnd();
ArrayList<Node> extractedNodesInclusive = ExtractContentHelper.extractContent(bookmarkStart, bookmarkEnd, true);
Document dstDoc = ExtractContentHelper.generateDocument(doc, extractedNodesInclusive);
dstDoc.save("Your Directory Path" + "ExtractContent.ExtractContentBetweenBookmark.IncludingBookmark.docx");
ArrayList<Node> extractedNodesExclusive = ExtractContentHelper.extractContent(bookmarkStart, bookmarkEnd, false);
dstDoc = ExtractContentHelper.generateDocument(doc, extractedNodesExclusive);
dstDoc.save("Your Directory Path" + "ExtractContent.ExtractContentBetweenBookmark.WithoutBookmark.docx");

Extracción de contenido entre rangos de comentarios

// Ejemplo de código Java para extraer contenido entre rangos de comentarios
Document doc = new Document("Your Directory Path" + "Extract content.docx");
CommentRangeStart commentStart = (CommentRangeStart) doc.getChild(NodeType.COMMENT_RANGE_START, 0, true);
CommentRangeEnd commentEnd = (CommentRangeEnd) doc.getChild(NodeType.COMMENT_RANGE_END, 0, true);
ArrayList<Node> extractedNodesInclusive = ExtractContentHelper.extractContent(commentStart, commentEnd, true);
Document dstDoc = ExtractContentHelper.generateDocument(doc, extractedNodesInclusive);
dstDoc.save("Your Directory Path" + "ExtractContent.ExtractContentBetweenCommentRange.IncludingComment.docx");
ArrayList<Node> extractedNodesExclusive = ExtractContentHelper.extractContent(commentStart, commentEnd, false);
dstDoc = ExtractContentHelper.generateDocument(doc, extractedNodesExclusive);
dstDoc.save("Your Directory Path" + "ExtractContent.ExtractContentBetweenCommentRange.WithoutComment.docx");

Extraer contenido entre párrafos

// Ejemplo de código Java para extraer contenido entre párrafos
Document doc = new Document("Your Directory Path" + "Extract content.docx");
Paragraph startPara = (Paragraph) doc.getFirstSection().getBody().getChild(NodeType.PARAGRAPH, 6, true);
Paragraph endPara = (Paragraph) doc.getFirstSection().getBody().getChild(NodeType.PARAGRAPH, 10, true);
ArrayList<Node> extractedNodes = ExtractContentHelper.extractContent(startPara, endPara, true);
Document dstDoc = ExtractContentHelper.generateDocument(doc, extractedNodes);
dstDoc.save("Your Directory Path" + "ExtractContent.ExtractContentBetweenParagraphs.docx");

Extracción de contenido entre estilos de párrafo

// Ejemplo de código Java para extraer contenido entre estilos de párrafo
Document doc = new Document("Your Directory Path" + "Extract content.docx");
ArrayList<Paragraph> parasStyleHeading1 = ExtractContentHelper.paragraphsByStyleName(doc, "Heading 1");
ArrayList<Paragraph> parasStyleHeading3 = ExtractContentHelper.paragraphsByStyleName(doc, "Heading 3");
Node startPara1 = parasStyleHeading1.get(0);
Node endPara1 = parasStyleHeading3.get(0);
ArrayList<Node> extractedNodes = ExtractContentHelper.extractContent(startPara1, endPara1, false);
Document dstDoc = ExtractContentHelper.generateDocument(doc, extractedNodes);
dstDoc.save("Your Directory Path" + "ExtractContent.ExtractContentBetweenParagraphStyles.docx");

Extracción de contenido entre ejecuciones

// Ejemplo de código Java para extraer contenido entre ejecuciones
Document doc = new Document("Your Directory Path" + "Extract content.docx");
Paragraph para = (Paragraph) doc.getChild(NodeType.PARAGRAPH, 7, true);
Run startRun = para.getRuns().get(1);
Run endRun = para.getRuns().get(4);
ArrayList<Node> extractedNodes = ExtractContentHelper.extractContent(startRun, endRun, true);
Node node = (Node) extractedNodes.get(0);
System.out.println(node.toString(SaveFormat.TEXT));

Extracción de contenido mediante DocumentVisitor

// Ejemplo de código Java para extraer contenido usando DocumentVisitor
Document doc = new Document("Your Directory Path" + "Absolute position tab.docx");
MyDocToTxtWriter myConverter = new MyDocToTxtWriter();
doc.accept(myConverter);
System.out.println(myConverter.getText());

Extraer contenido usando el campo

// Ejemplo de código Java para extraer contenido usando Field
Document doc = new Document("Your Directory Path" + "Extract content.docx");
DocumentBuilder builder = new DocumentBuilder(doc);
builder.moveToMergeField("Fullname", false, false);
FieldStart startField = (FieldStart) builder.getCurrentNode();
Paragraph endPara = (Paragraph) doc.getFirstSection().getChild(NodeType.PARAGRAPH, 5, true);
ArrayList<Node> extractedNodes = ExtractContentHelper.extractContent(startField, endPara, false);
Document dstDoc = ExtractContentHelper.generateDocument(doc, extractedNodes);
dstDoc.save("Your Directory Path" + "ExtractContent.ExtractContentUsingField.docx");

Extracción de la tabla de contenidos

// Ejemplo de código Java para extraer la tabla de contenidos
Document doc = new Document("Your Directory Path" + "Table of contents.docx");
for (Field field : doc.getRange().getFields()) {
    if (field.getType() == FieldType.FIELD_HYPERLINK) {
        FieldHyperlink hyperlink = (FieldHyperlink) field;
        if (hyperlink.getSubAddress() != null && hyperlink.getSubAddress().startsWith("_Toc")) {
            Paragraph tocItem = (Paragraph) field.getStart().getAncestor(NodeType.PARAGRAPH);
            System.out.println(tocItem.toString(SaveFormat.TEXT).trim());
            System.out.println("------------------");
            Bookmark bm = doc.getRange().getBookmarks().get(hyperlink.getSubAddress());
            Paragraph pointer = (Paragraph) bm.getBookmarkStart().getAncestor(NodeType.PARAGRAPH);
            System.out.println(pointer.toString(SaveFormat.TEXT));
        }
    }
}

Extraer solo texto

// Ejemplo de código Java para extraer solo texto
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.insertField("MERGEFIELD Field");
System.out.println("GetText() Result: " + doc.getText());
System.out.println("ToString() Result: " + doc.toString(SaveFormat.TEXT));

Extracción de contenido basado en estilos

// Ejemplo de código Java para extraer contenido basado en estilos
Document doc = new Document("Your Directory Path" + "Styles.docx");
final String PARA_STYLE = "Heading 1";
final String RUN_STYLE = "Intense Emphasis";
ArrayList<Paragraph> paragraphs = paragraphsByStyleName(doc, PARA_STYLE);
System.out.println("Paragraphs with \"{paraStyle}\" styles ({paragraphs.Count}):");
for (Paragraph paragraph : paragraphs)
    System.out.println(paragraph.toString(SaveFormat.TEXT));
ArrayList<Run> runs = runsByStyleName(doc, RUN_STYLE);
System.out.println("\nRuns with \"{runStyle}\" styles ({runs.Count}):");
for (Run run : runs)
    System.out.println(run.getRange().getText());
}

public ArrayList<Paragraph> paragraphsByStyleName(Document doc, String styleName) {
    ArrayList<Paragraph> paragraphsWithStyle = new ArrayList<Paragraph>();
    NodeCollection paragraphs = doc.getChildNodes(NodeType.PARAGRAPH, true);
    for (Paragraph paragraph : (Iterable<Paragraph>) paragraphs) {
        if (paragraph.getParagraphFormat().getStyle().getName().equals(styleName))
            paragraphsWithStyle.add(paragraph);
    }
    return paragraphsWithStyle;
}

public ArrayList<Run> runsByStyleName(Document doc, String styleName) {
    ArrayList<Run> runsWithStyle = new ArrayList<Run>();
    NodeCollection runs = doc.getChildNodes(NodeType.RUN, true);
    for (Run run : (Iterable<Run>) runs) {
        if (run.getFont().getStyle().getName().equals(styleName))
            runsWithStyle.add(run);
    }
    return runsWithStyle;
}

Extraer e imprimir texto

// Ejemplo de código Java para extraer e imprimir texto
Document doc = new Document("Your Directory Path" + "Tables.docx");
Table table = (Table) doc.getChild(NodeType.TABLE, 0, true);
System.out.println("Contents of the table: ");
System.out.println(table.getRange().getText());
System.out.println("\nContents of the row: ");
System.out.println(table.getRows().get(1).getRange().getText());
System.out.println("\nContents of the cell: ");
System.out.println(table.getLastRow().getLastCell().getRange().getText());

Extraer imágenes a archivos

// Ejemplo de código Java para extraer imágenes a archivos
Document doc = new Document("Your Directory Path" + "Images.docx");
NodeCollection shapes = doc.getChildNodes(NodeType.SHAPE, true);
int imageIndex = 0;
for (Shape shape : (Iterable<Shape>) shapes) {
    if (shape.hasImage()) {
        String imageFileName = MessageFormat.format("Image.ExportImages.{0}_{1}",
                imageIndex, FileFormatUtil.imageTypeToExtension(shape.getImageData().getImageType()));
        shape.getImageData().save("Your Directory Path" + imageFileName);
        imageIndex++;
    }
}

Conclusión

¡Felicidades! Ha aprendido a extraer contenido de documentos utilizando Aspose.Words para Java. Esta guía cubrió varias técnicas de extracción, incluido contenido entre nodos a nivel de bloque, marcadores, rangos de comentarios, párrafos y más. Ahora está equipado para manejar la extracción del contenido de los documentos de manera eficiente en sus aplicaciones Java.

Preguntas frecuentes

¿Cómo extraigo contenido de secciones específicas de un documento?

Para extraer contenido de secciones específicas de un documento, puede identificar los puntos inicial y final de las secciones y utilizar los métodos Aspose.Words para Java adecuados para extraer contenido entre ellas.

¿Puedo extraer contenido de documentos protegidos con contraseña?

Sí, Aspose.Words para Java proporciona funcionalidad para extraer contenido de documentos protegidos con contraseña. Puede proporcionar la contraseña al abrir el documento utilizando elDocument constructor de clases.

¿Cómo puedo extraer contenido y guardarlo en diferentes formatos, como texto sin formato o HTML?

Puede extraer contenido de un documento y guardarlo en diferentes formatos usando Aspose.Words para Java. Después de extraer el contenido, puede utilizar elDocument métodos de clase para guardarlo en formatos como texto plano, HTML u otros.

¿Existe alguna forma de extraer contenido de elementos específicos del documento, como tablas o imágenes?

Sí, puede extraer contenido de elementos de documentos específicos, como tablas o imágenes, utilizando Aspose.Words para Java. Identifique los elementos que desea extraer y luego utilice los métodos adecuados para extraer su contenido.

¿Cómo puedo automatizar el proceso de extracción de contenido en mi aplicación Java?

Para automatizar el proceso de extracción de contenido en su aplicación Java, puede crear código personalizado basado en las técnicas descritas en esta guía. También puede implementar lógica para recorrer varios documentos y extraer contenido según sea necesario.