Extraindo conteúdo de documentos no Aspose.Words para Java

Introdução à extração de conteúdo de documentos no Aspose.Words para Java

No mundo do processamento de documentos, extrair conteúdo de documentos é um requisito comum. Se você precisa extrair texto, tabelas, imagens ou elementos específicos de documentos, o Aspose.Words para Java fornece ferramentas poderosas para tornar essa tarefa fácil. Neste guia abrangente, nós o guiaremos pelo processo de extração de conteúdo de documentos usando o Aspose.Words para Java.

Pré-requisitos

Antes de mergulharmos no processo de extração, certifique-se de ter os seguintes pré-requisitos em vigor:

  1. Aspose.Words para Java: Você deve ter o Aspose.Words para Java instalado e configurado em seu ambiente de desenvolvimento Java. Você pode baixá-lo emaqui.

  2. Um documento para extrair conteúdo: para este guia, usaremos um documento de exemplo chamado “Extrair conteúdo.docx”. Certifique-se de ter um documento semelhante pronto para extração.

Extraindo conteúdo entre nós de nível de bloco

// Exemplo de código Java para extrair conteúdo entre nós de nível de bloco
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");

Extraindo conteúdo entre marcadores

//Exemplo de código Java para extrair conteúdo entre favoritos
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");

Extraindo conteúdo entre intervalos de comentários

// Exemplo de código Java para extrair conteúdo entre intervalos de comentários
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");

Extraindo conteúdo entre parágrafos

// Exemplo de código Java para extrair conteúdo entre parágrafos
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");

Extraindo conteúdo entre estilos de parágrafo

// Exemplo de código Java para extrair conteúdo entre estilos de parágrafo
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");

Extraindo conteúdo entre execuções

// Exemplo de código Java para extrair conteúdo entre execuções
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));

Extraindo conteúdo usando DocumentVisitor

// Exemplo de código Java para extrair conteúdo 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());

Extraindo conteúdo usando campo

// Exemplo de código Java para extrair conteúdo 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");

Extraindo Índice

// Exemplo de código Java para extrair índice
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));
        }
    }
}

Extraindo somente texto

// Exemplo de código Java para extrair somente 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));

Extraindo conteúdo com base em estilos

// Exemplo de código Java para extrair conteúdo com base em 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;
}

Extraindo e imprimindo texto

// Exemplo de código Java para extrair 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());

Extraindo imagens para arquivos

// Exemplo de código Java para extrair imagens para arquivos
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++;
    }
}

Conclusão

Parabéns! Você aprendeu como extrair conteúdo de documentos usando Aspose.Words para Java. Este guia abordou várias técnicas de extração, incluindo conteúdo entre nós de nível de bloco, marcadores, intervalos de comentários, parágrafos e muito mais. Agora você está equipado para lidar com a extração de conteúdo de documentos de forma eficiente em seus aplicativos Java.

Perguntas frequentes

Como faço para extrair conteúdo de seções específicas do documento?

Para extrair conteúdo de seções específicas do documento, você pode identificar os pontos inicial e final das seções e usar os métodos apropriados do Aspose.Words for Java para extrair conteúdo entre eles.

Posso extrair conteúdo de documentos protegidos por senha?

Sim, o Aspose.Words para Java fornece funcionalidade para extrair conteúdo de documentos protegidos por senha. Você pode fornecer a senha ao abrir o documento usando oDocument construtor de classe.

Como posso extrair conteúdo e salvá-lo em diferentes formatos, como texto simples ou HTML?

Você pode extrair conteúdo de um documento e salvá-lo em diferentes formatos usando Aspose.Words para Java. Após extrair o conteúdo, você pode usar oDocument métodos de classe para salvá-lo em formatos como texto simples, HTML ou outros.

Existe uma maneira de extrair conteúdo de elementos específicos do documento, como tabelas ou imagens?

Sim, você pode extrair conteúdo de elementos específicos do documento, como tabelas ou imagens, usando o Aspose.Words para Java. Identifique os elementos que você quer extrair e, em seguida, use os métodos apropriados para extrair o conteúdo deles.

Como posso automatizar o processo de extração de conteúdo no meu aplicativo Java?

Para automatizar o processo de extração de conteúdo em seu aplicativo Java, você pode criar um código personalizado com base nas técnicas descritas neste guia. Você também pode implementar lógica para iterar por vários documentos e extrair conteúdo conforme necessário.