Извлечение контента из документов в Aspose.Words для Java
Введение в извлечение контента из документов в Aspose.Words для Java
В мире обработки документов извлечение контента из документов является обычным требованием. Если вам нужно извлечь текст, таблицы, изображения или определенные элементы документа, Aspose.Words для Java предоставляет мощные инструменты, которые сделают эту задачу легкой. В этом подробном руководстве мы проведем вас через процесс извлечения контента из документов с помощью Aspose.Words для Java.
Предпосылки
Прежде чем мы углубимся в процесс извлечения, убедитесь, что у вас выполнены следующие предварительные условия:
Aspose.Words for Java: Aspose.Words for Java должен быть установлен и настроен в вашей среде разработки Java. Вы можете загрузить его сздесь.
Документ для извлечения контента: в этом руководстве мы будем использовать образец документа с именем «Извлечь контент.docx». Убедитесь, что у вас есть аналогичный документ, готовый к извлечению.
Извлечение контента между узлами блочного уровня
// Пример кода Java для извлечения содержимого между узлами уровня блока
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");
Извлечение контента между закладками
//Пример кода Java для извлечения содержимого между закладками
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");
Извлечение контента между диапазонами комментариев
// Пример кода Java для извлечения содержимого между диапазонами комментариев
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");
Извлечение содержимого между абзацами
// Пример кода Java для извлечения содержимого между абзацами
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");
Извлечение содержимого между стилями абзацев
// Пример кода Java для извлечения содержимого между стилями абзацев
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");
Извлечение контента между запусками
// Пример кода Java для извлечения контента между запусками
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));
Извлечение контента с помощью DocumentVisitor
// Пример кода Java для извлечения контента с помощью DocumentVisitor
Document doc = new Document("Your Directory Path" + "Absolute position tab.docx");
MyDocToTxtWriter myConverter = new MyDocToTxtWriter();
doc.accept(myConverter);
System.out.println(myConverter.getText());
Извлечение контента с использованием поля
// Пример кода Java для извлечения контента с использованием поля
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");
Извлечение оглавления
// Пример кода Java для извлечения оглавления
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));
}
}
}
Извлечение только текста
// Пример кода Java для извлечения только текста
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));
Извлечение контента на основе стилей
// Пример кода Java для извлечения контента на основе стилей
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;
}
Извлечение и печать текста
// Пример кода Java для извлечения и печати текста
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());
Извлечение изображений в файлы
// Пример кода Java для извлечения изображений в файлы
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++;
}
}
Заключение
Поздравляем! Вы узнали, как извлекать содержимое из документов с помощью Aspose.Words for Java. В этом руководстве рассматриваются различные методы извлечения, включая содержимое между узлами уровня блока, закладки, диапазоны комментариев, абзацы и многое другое. Теперь вы готовы эффективно извлекать содержимое документов в своих приложениях Java.
Часто задаваемые вопросы
Как извлечь содержимое из определенных разделов документа?
Чтобы извлечь содержимое из определенных разделов документа, можно определить начальную и конечную точки разделов и использовать соответствующие методы Aspose.Words для Java для извлечения содержимого между ними.
Могу ли я извлечь содержимое из документов, защищенных паролем?
Да, Aspose.Words for Java предоставляет функционал для извлечения контента из защищенных паролем документов. Вы можете указать пароль при открытии документа с помощьюDocument
конструктор класса.
Как извлечь контент и сохранить его в разных форматах, например, в виде обычного текста или HTML?
Вы можете извлечь содержимое из документа и сохранить его в различных форматах с помощью Aspose.Words for Java. После извлечения содержимого вы можете использоватьDocument
методы класса для сохранения его в таких форматах, как обычный текст, HTML и других.
Есть ли способ извлечь содержимое из определенных элементов документа, таких как таблицы или изображения?
Да, вы можете извлекать содержимое из определенных элементов документа, таких как таблицы или изображения, используя Aspose.Words for Java. Определите элементы, которые вы хотите извлечь, а затем используйте соответствующие методы для извлечения их содержимого.
Как автоматизировать процесс извлечения контента в моем Java-приложении?
Чтобы автоматизировать процесс извлечения контента в вашем приложении Java, вы можете создать собственный код на основе методов, описанных в этом руководстве. Вы также можете реализовать логику для итерации по нескольким документам и извлечения контента по мере необходимости.