当我设置文档保护属性为只读后,我希望在该文档中可以手动更新整个目录。
test.docx (20.5 KB)
Document doc = new Document("E:/test.docx");
// 设置文档保护属性
doc.protect(ProtectionType.READ_ONLY, "123456");
// 设置目录为可编辑区域
...
// 保存保护后的文档
doc.save("E:/test-download.docx");
当我设置文档保护属性为只读后,我希望在该文档中可以手动更新整个目录。
test.docx (20.5 KB)
Document doc = new Document("E:/test.docx");
// 设置文档保护属性
doc.protect(ProtectionType.READ_ONLY, "123456");
// 设置目录为可编辑区域
...
// 保存保护后的文档
doc.save("E:/test-download.docx");
@whitemeen 遗憾的是,使用 Aspose.Words 无法实现这一点,因为无法在文档中设置此类限制。使用 Aspose.Words 无法选择包含/排除具有文档编辑权限的特定用户。只有 EditableRange 用于设置可编辑的位置。
您可能没有理解我的问题,以我的测试来看是可以的。
源文件:
test1.docx (36.4 KB)
执行代码:
Document doc = new Document("E:/test1.docx");
// 设置文档保护属性
doc.protect(ProtectionType.READ_ONLY, "123456");
DocumentBuilder builder = new DocumentBuilder(doc);
builder.moveToDocumentStart();
EditableRangeStart innerEditableRangeStart = builder.startEditableRange();
// 设置目录为可编辑区域
for (Field field : doc.getRange().getFields()) {
if (field.getType() == FieldType.FIELD_TOC) {
builder.moveToField(field, true);
builder.endEditableRange(innerEditableRangeStart);
// 将可编辑区域加入组:EditorType.EVERYONE:每个人
innerEditableRangeStart.getEditableRange().setEditorGroup(EditorType.EVERYONE);
}
}
// 保存保护后的文档
doc.save("E:/test-download.docx");
image.png (76.2 KB)
只是我不知道如何获取到目录的开始边界,而不是像这样将可编辑区域 start 标识插入到文档开头。我该怎样去获取到目录的开始边界,将可编辑区域 start 标识插入到准确的位置?
@whitemeen 好的,谢谢你的解释。您可以使用以下代码:
Document doc = new Document("input.docx");
DocumentBuilder builder = new DocumentBuilder(doc);
for (Field field : doc.getRange().getFields()) {
if (field.getType() == FieldType.FIELD_TOC) {
EditableRangeStart start = builder.startEditableRange();
EditableRangeEnd end = builder.endEditableRange(start);
// 将可编辑区域加入组:EditorType.EVERYONE:每个人
start.getEditableRange().setEditorGroup(EditorType.EVERYONE);
FieldStart fieldStart = field.getStart();
FieldEnd fieldEnd = field.getEnd();
fieldStart.getParentNode().insertBefore(start, fieldStart);
fieldEnd.getParentNode().insertAfter(end, fieldEnd);
}
}
doc.protect(ProtectionType.READ_ONLY, "123456");
doc.save("output.docx");
我测试来看,依然不能更新整个目录。
image.png (64.8 KB)
test-download.docx (17.7 KB)
但是,当我每次编辑过目录内容后点击目录内容的位置,又可以更新整个目录了。
image.png (62.2 KB)
这个问题能否解决?