在 Aspose.Words for Java 中提取內容的輔助方法
Aspose.Words for Java 中擷取內容的輔助方法簡介
Aspose.Words for Java 是一個功能強大的函式庫,可讓開發人員以程式設計方式處理 Word 文件。使用 Word 文件時的常見任務是從中提取內容。在本文中,我們將探索一些使用 Aspose.Words for Java 有效提取內容的輔助方法。
先決條件
在我們深入研究程式碼範例之前,請確保您已在 Java 專案中安裝並設定了 Aspose.Words for Java。您可以從以下位置下載:這裡.
輔助方法1:依樣式擷取段落
public static 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;
}
您可以使用此方法提取 Word 文件中具有特定樣式的段落。當您想要提取具有特定格式的內容(例如標題或區塊引號)時,這非常有用。
輔助方法2:透過節點擷取內容
public static ArrayList<Node> extractContentBetweenNodes(Node startNode, Node endNode, boolean isInclusive) {
//首先,檢查傳遞給此方法的節點是否有效。
verifyParameterNodes(startNode, endNode);
//建立一個清單來儲存提取的節點。
ArrayList<Node> nodes = new ArrayList<Node>();
//如果任一標記是評論的一部分,包括評論本身,我們需要移動指針
//轉發到 CommentRangeEnd 節點之後找到的 Comment 節點。
if (endNode.getNodeType() == NodeType.COMMENT_RANGE_END && isInclusive) {
Node node = findNextNode(NodeType.COMMENT, endNode.getNextSibling());
if (node != null)
endNode = node;
}
//保留傳遞給此方法的原始節點的記錄,以便在需要時分割標記節點。
Node originalStartNode = startNode;
Node originalEndNode = endNode;
//基於區塊級節點(段落和表格)提取內容。遍歷父節點來找到它們。
//我們將根據標記節點是否內聯來分割第一個和最後一個節點的內容。
startNode = getAncestorInBody(startNode);
endNode = getAncestorInBody(endNode);
boolean isExtracting = true;
boolean isStartingNode = true;
//我們從文檔中提取的當前節點。
Node currNode = startNode;
//開始提取內容。處理所有區塊級節點並專門分割第一個
//需要時加入最後一個節點,以便保留段落格式。
//這種方法比常規提取器稍微複雜一些,因為我們需要考慮因素
//使用內聯節點、字段、書籤等進行提取,使其有用。
while (isExtracting) {
//克隆當前節點及其子節點以獲得副本。
Node cloneNode = currNode.deepClone(true);
boolean isEndingNode = currNode.equals(endNode);
if (isStartingNode || isEndingNode) {
//我們需要單獨處理每個標記,因此將其傳遞給單獨的方法。
//應先處理End以保留節點索引。
if (isEndingNode) {
// !isStartingNode:如果標記是同一節點,請勿新增節點兩次。
processMarker(cloneNode, nodes, originalEndNode, currNode, isInclusive,
false, !isStartingNode, false);
isExtracting = false;
}
//條件需要分開,因為區塊級開始和結束標記可能是同一節點。
if (isStartingNode) {
processMarker(cloneNode, nodes, originalStartNode, currNode, isInclusive,
true, true, false);
isStartingNode = false;
}
} else
//節點不是開始或結束標記,只需將副本添加到清單中即可。
nodes.add(cloneNode);
//移動到下一個節點並將其提取。如果下一個節點為空,
//其餘內容可以在不同的部分中找到。
if (currNode.getNextSibling() == null && isExtracting) {
//轉到下一部分。
Section nextSection = (Section) currNode.getAncestor(NodeType.SECTION).getNextSibling();
currNode = nextSection.getBody().getFirstChild();
} else {
//移動到主體中的下一個節點。
currNode = currNode.getNextSibling();
}
}
//為了與內嵌書籤模式相容,請新增下一段(空)。
if (isInclusive && originalEndNode == endNode && !originalEndNode.isComposite())
includeNextParagraph(endNode, nodes);
//返回節點標記之間的節點。
return nodes;
}
此方法可讓您提取兩個指定節點之間的內容,無論它們是段落、表格或任何其他區塊級元素。它處理各種場景,包括內聯標記、欄位和書籤。
輔助方法 3:產生新文檔
public static Document generateDocument(Document srcDoc, ArrayList<Node> nodes) throws Exception {
Document dstDoc = new Document();
//從空白文檔中刪除第一段。
dstDoc.getFirstSection().getBody().removeAllChildren();
//將清單中的每個節點匯入到新文件中。保留節點的原始格式。
NodeImporter importer = new NodeImporter(srcDoc, dstDoc, ImportFormatMode.KEEP_SOURCE_FORMATTING);
for (Node node : nodes) {
Node importNode = importer.importNode(node, true);
dstDoc.getFirstSection().getBody().appendChild(importNode);
}
return dstDoc;
}
此方法可讓您透過從來源文件匯入節點清單來產生新文件。它保留了節點的原始格式,這使得它對於創建具有特定內容的新文件非常有用。
結論
從 Word 文件中提取內容可能是許多文件處理任務的關鍵部分。 Aspose.Words for Java 提供了強大的幫助器方法來簡化此過程。無論您需要按樣式、節點之間的內容提取段落,還是生成新文檔,這些方法都將幫助您在 Java 應用程式中有效地處理 Word 文件。
常見問題解答
如何安裝 Aspose.Words for Java?
要安裝 Aspose.Words for Java,您可以從 Aspose 網站下載。訪問這裡取得最新版本。
我可以從 Word 文件的特定部分提取內容嗎?
是的,您可以使用本文中提到的方法從 Word 文件的特定部分中提取內容。只需指定定義要提取的部分的開始和結束節點即可。
Aspose.Words for Java 與 Java 11 相容嗎?
是的,Aspose.Words for Java 與 Java 11 及更高版本相容。您可以在 Java 應用程式中使用它,不會出現任何問題。
我可以自訂提取內容的格式嗎?
是的,您可以透過修改生成文件中匯入的節點來自訂提取內容的格式。 Aspose.Words for Java 提供了廣泛的格式化選項來滿足您的需求。
在哪裡可以找到 Aspose.Words for Java 的更多文件和範例?
您可以在 Aspose 網站上找到 Aspose.Words for Java 的綜合文件和範例。訪問https://reference.aspose.com/words/java/取得詳細的文件和資源。