Cómo extraer 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 mismos 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 ofrece herramientas poderosas para facilitar esta tarea. En esta guía completa, lo guiaremos a través del proceso de extracción de contenido de documentos con Aspose.Words para Java.
Prerrequisitos
Antes de sumergirnos en el proceso de extracción, asegúrese de tener los siguientes requisitos previos:
Aspose.Words para Java: Debe tener Aspose.Words para Java instalado y configurado en su entorno de desarrollo Java. Puede descargarlo desdeaquí.
Un documento del que extraer contenido: para esta guía, utilizaremos un documento de muestra llamado “Extraer contenido.docx”. Asegúrese de tener un documento similar listo para la 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");
Cómo 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");
Cómo 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");
Cómo extraer 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 mediante DocumentVisitor
Document doc = new Document("Your Directory Path" + "Absolute position tab.docx");
MyDocToTxtWriter myConverter = new MyDocToTxtWriter();
doc.accept(myConverter);
System.out.println(myConverter.getText());
Extracción de contenido mediante un campo
// Ejemplo de código Java para extraer contenido mediante 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");
Extraer 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 en función de estilos
// Ejemplo de código Java para extraer contenido en función de 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;
}
Extracción e impresión de 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
¡Felicitaciones! Aprendió a extraer contenido de documentos con Aspose.Words para Java. Esta guía cubrió varias técnicas de extracción, incluido el contenido entre nodos de nivel de bloque, marcadores, rangos de comentarios, párrafos y más. Ahora está equipado para manejar la extracción de contenido de 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 del documento, puede identificar los puntos de inicio y finalización de las secciones y utilizar los métodos Aspose.Words para Java adecuados para extraer contenido entre ellos.
¿Puedo extraer contenido de documentos protegidos con contraseña?
Sí, Aspose.Words para Java ofrece una función para extraer contenido de documentos protegidos con contraseña. Puede proporcionar la contraseña al abrir el documento mediante el botónDocument
constructor de clase.
¿Cómo puedo extraer contenido y guardarlo en diferentes formatos, como texto simple o HTML?
Puede extraer contenido de un documento y guardarlo en diferentes formatos utilizando Aspose.Words para Java. Después de extraer el contenido, puede utilizar elDocument
métodos de clase para guardarlo en formatos como texto simple, HTML u otros.
¿Hay alguna forma de extraer contenido de elementos específicos del documento, como tablas o imágenes?
Sí, puedes extraer contenido de elementos específicos de un documento, como tablas o imágenes, mediante Aspose.Words para Java. Identifica los elementos que deseas extraer y luego utiliza 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 iterar a través de varios documentos y extraer contenido según sea necesario.