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 节点之后找到的注释节点。
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) {
//我们需要单独处理每个标记,因此将其传递给单独的方法。
//应首先处理结束以保留节点索引。
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/以获取详细的文档和资源。