WPS 只读文档设置可编辑域的兼容性问题

我正在使用 Apose.Words 设置 test-1.docx 只读文档的可编辑域,代码如下:

test-1.docx (34.5 KB)

public static void main(String[] args) {
  try {
      // 加载要进行编辑限制的文档
      Document doc = new Document("D:/test-1.docx");
  
      doc.protect(ProtectionType.READ_ONLY, "123456");
  
      DocumentBuilder builder = new DocumentBuilder(doc);
      BookmarkCollection bookmarks = doc.getRange().getBookmarks();
      int count = bookmarks.getCount();
      for (int i = 0; i < count; i++) {
          Bookmark bookmark = bookmarks.get(i);
          builder.moveToBookmark(bookmark.getName(), true, true);
          EditableRangeStart innerEditableRangeStart = builder.startEditableRange();
          builder.moveToBookmark(bookmark.getName(), false, true);
          builder.endEditableRange(innerEditableRangeStart);
      }
  
      // 保存保护后的文档
      doc.save("D:/test-2.docx");
  } catch (Exception e) {
      log.info("处理异常:", e);
  }
}

test-2.docx (16.5 KB)

将生成的 test-2.docx 文档通过 Ms Office 打开时,它存在正确的可编辑域,如下:

但是,当我使用 WPS Office 打开时,却没有可编辑的区域,如下:

使用 DocumentExplorer 软件打开该 test-2.docx 文档查看文档结构,如下:

我尝试查看 Ms Office 手动创建可编辑域的文档结构与通过代码创建的可编辑域的文档结构。

  1. Ms Office 手动创建可编辑域:

源文件:test-1.docx (34.5 KB)

生成文件:test-3.docx (34.8 KB)

文档结构:

可见,Ms Office 手动创建可编辑域的文档结构与通过代码创建的可编辑域的文档结构一致。但是通过 WPS Office 打开代码创建可编辑域的文档时,却没有可编辑的区域。

这是什么原因?是否是代码中可编辑域的边界范围设置不正确?

@whitemeen 像这样更改代码

for (int i = 0; i < count; i++) {
    Bookmark bookmark = bookmarks.get(i);
    builder.moveToBookmark(bookmark.getName(), true, true);
    EditableRangeStart innerEditableRangeStart = builder.startEditableRange();
    builder.moveToBookmark(bookmark.getName(), false, true);
    builder.endEditableRange(innerEditableRangeStart);

    innerEditableRangeStart.getEditableRange().setEditorGroup(EditorType.EVERYONE);
}

看起来,如果不设置编辑器组,WPS 就无法定义可编辑范围。