当读取到一个文档时,这个文档是有添加批注或者有修订记录,怎么判断有修订记录和批注,以及怎么忽略评论,和去除修订模式
@ouchli 您可以使用 Document.hasRevisions 属性来检测文档是否有修订。 您可以使用 Revisions.acceptAll() 和 Revisions.rejectAll() 方法接受或拒绝文档中的修订。
要检测文档是否有注释,您可以简单地获取文档中 NodeType.COMMENT
的子级。
你好,请问怎么获取文档中的 所有修订处的位置
@ouchli 您可以使用 LayoutCollector 来确定节点所在的页码。因此,您可以获取具有修订版本的节点,并使用 LayoutCollector
和 LayoutEnumerator
来获取这些节点的位置。
怎么获取具有修订版本的节点呢
@ouchli 您可以使用以下代码:
Document doc = new Document("C:\\Temp\\in.docx");
for (Node node : (Iterable<Node>)doc.getChildNodes(NodeType.ANY, true))
{
if (isRevison(node))
{
// This node has revision.
}
}
private static boolean isRevison(Node node)
{
if (node instanceof Inline) {
Inline inline = (Inline)node;
return inline.isDeleteRevision() || inline.isMoveToRevision() || inline.isMoveFromRevision() || inline.isFormatRevision() || inline.isInsertRevision();
}
if (node instanceof Paragraph) {
Paragraph para = (Paragraph)node;
return para.isDeleteRevision() || para.isMoveToRevision() || para.isMoveFromRevision() || para.isFormatRevision() || para.isInsertRevision();
}
return false;
}
好的,谢谢,还有就是请问可以给某个Node 节点添加批注吗?
@ouchli 无法手动向节点添加修订。 您只能使用 Aspose.Words 以编程方式进行更改。 请参阅我们的文档以了解如何使用修订版:
https://docs.aspose.com/words/java/track-changes-in-a-document/
你好,我使用如下代码之后:报错了,请问为什么会报错呢
Document doc = new Document("D:\\Desktop\\文档.docx");
NodeCollection<Comment> childNodes = doc.getChildNodes(NodeType.COMMENT, true);
for (Comment childNode : childNodes) {
childNode.addReply("作者", "", new Date(), "回复");
}
doc.save("D:\\Desktop\\文档1.docx");
@ouchli 由于现有的 MS Office 限制,文档中仅允许 1 级回复。 因此您无法将回复添加到另一个回复中。 您应该像这样修改您的代码:
Document doc = new Document("C:\\Temp\\in.docx");
NodeCollection<Comment> childNodes = doc.getChildNodes(NodeType.COMMENT, true);
for (Comment childNode : childNodes)
{
// Check whether reply can be added to the comment
if (childNode.getParentId() < 0)
childNode.addReply("Aspose", "", new Date(), "Test comment");
}
doc.save("C:\\Temp\\out.docx");
好的 谢谢您,再问一下
我使用 document.deepClone() 拷贝之后的Document与原来的Document有什么区别吗?
java.lang.IllegalArgumentException: The newChild was created from a different document than the one that created this node.
使用克隆文档之后会报这个错
@ouchli 克隆文档时,会创建该文档的单独实例。 因此,对克隆文档所做的更改不会对原始文档产生任何影响。
由于克隆文档和原始文档是文档对象的不同实例,因此这些文档之间的节点不能互换。 需要将节点从一个文档导入到另一个文档,以便在另一个文档中使用一个文档中的节点。
我从克隆的文档里面得到一个段落,要给源文档的这个段落加批注,然后使用
documentSource.importNode(paragraph, true);
去导入这个段落节点之后,还是会报错
java.lang.IllegalArgumentException: The newChild was created from a different document than the one that created this node.'
@ouchli 将节点从一个文档导入到另一个文档后,您可以在目标文档中使用它。 例如看下面的代码:
Document doc = new Document("C:\\Temp\\in.docx");
Document clone = doc.deepClone();
// Import node from source document to the cloned document.
Paragraph srcParagraph = doc.getFirstSection().getBody().getFirstParagraph();
Paragraph importedParagraph = (Paragraph)clone.importNode(srcParagraph, true);
// The importedParagraph now belongs to the cloned document
// and can be used in it.
// Add imported node into the cloned document.
clone.getFirstSection().getBody().appendChild(importedParagraph);
clone.save("C:\\Temp\\out.docx");