如何在保护文档中设置目录可编辑,即可手动更新整个目录

当我设置文档保护属性为只读后,我希望在该文档中可以手动更新整个目录。

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)

这个问题能否解决?

@whitemeen 当您尝试手动设置可编辑范围时,也会出现同样的情况。我不知道为什么会出现这种情况,也许是 MS Word 内部出了问题。不过您可以用鼠标右键单击 TOC 并更新该字段。