在 Aspose.Words for Java 中從文件中提取內容
在 Aspose.Words for Java 中從文件中提取內容的簡介
在文件處理領域,從文件中提取內容是一個常見的要求。無論您需要提取文字、表格、圖像或特定的文件元素,Aspose.Words for Java 都提供了強大的工具來使此任務變得輕而易舉。在本綜合指南中,我們將引導您完成使用 Aspose.Words for Java 從文件中提取內容的過程。
先決條件
在我們深入了解提取過程之前,請確保您具備以下先決條件:
Aspose.Words for Java:您應該在 Java 開發環境中安裝並設定 Aspose.Words for Java。您可以從以下位置下載:這裡.
從中提取內容的文件:在本指南中,我們將使用名為「Extract content.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 擷取內容
//使用 DocumentVisitor 擷取內容的 Java 程式碼範例
Document doc = new Document("Your Directory Path" + "Absolute position tab.docx");
MyDocToTxtWriter myConverter = new MyDocToTxtWriter();
doc.accept(myConverter);
System.out.println(myConverter.getText());
使用字段提取內容
//使用 Field 提取內容的 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 for Java 方法提取它們之間的內容。
我可以從受密碼保護的文件中提取內容嗎?
是的,Aspose.Words for Java 提供了從受密碼保護的文件中提取內容的功能。您可以使用開啟文件時提供密碼Document
類別構造函數。
如何提取內容並將其儲存為不同格式(例如純文字或 HTML)?
您可以使用 Aspose.Words for Java 從文件中提取內容並將其儲存為不同的格式。提取內容後,您可以使用Document
類別方法將其儲存為純文字、HTML 或其他格式。
有沒有辦法從特定文件元素(例如表格或圖像)中提取內容?
是的,您可以使用 Aspose.Words for Java 從特定文件元素(例如表格或圖像)中提取內容。確定要提取的元素,然後使用適當的方法提取其內容。
如何在 Java 應用程式中自動執行內容提取過程?
若要在 Java 應用程式中自動執行內容擷取流程,您可以根據本指南中所述的技術建立自訂程式碼。您還可以實現邏輯來迭代多個文件並根據需要提取內容。