连续添加批注

public static void addComment(List<AddCommentTextDto> addCommentTextDtoList, Document document) {
        initLicense();
        if (CollectionUtils.isEmpty(addCommentTextDtoList)) {
            return;
        }
        for (AddCommentTextDto addCommentTextDto : addCommentTextDtoList) {
            Section section = (Section) document.getChild(NodeType.SECTION, addCommentTextDto.getSectionIndex(), true);
            Body body = (Body) section.getChild(NodeType.BODY, addCommentTextDto.getBodyIndex(), true);
            Paragraph para = (Paragraph) body.getChild(NodeType.PARAGRAPH, addCommentTextDto.getParagraphIndex(), true);
            int length = para.getRuns().toArray().length;
            Run cmtAnchorRun = para.getRuns().get(length - 1);
            Run run = para.getRuns().get(WxcmConst.NUM_0);
            Comment comment = new Comment(document, addCommentTextDto.getAuth(), "", new Date());
            comment.setText(addCommentTextDto.getCommentText());
            para.appendChild(comment);
            para.insertBefore(new CommentRangeStart(document, comment.getId()), cmtAnchorRun);
            para.insertAfter(new CommentRangeEnd(document, comment.getId()), run);
        }
    }

请问按照这种 连续添加批注 的方式,为什么只能给第一个添加批注成功,剩下的就不成功呢

@ouchli 代码看起来不错。 您能否在此附上您的输入、输出和预期文件以供我们参考? 我们将检查该问题并为您提供更多信息。

原附件


代码生成的附件

预期生成附件

参数

List<AddCommentTextDto> list = new ArrayList<>();
AddCommentTextDto addCommentTextDto = new AddCommentTextDto();
addCommentTextDto.setAuth("作者");
addCommentTextDto.setCommentText("批注1");
addCommentTextDto.setSectionIndex(0);
addCommentTextDto.setBodyIndex(0);
addCommentTextDto.setParagraphIndex(3);
list.add(addCommentTextDto);

AddCommentTextDto addCommentTextDto1 = new AddCommentTextDto();
addCommentTextDto1.setAuth("作者");
addCommentTextDto1.setCommentText("批注2");
addCommentTextDto1.setSectionIndex(0);
addCommentTextDto1.setBodyIndex(0);
addCommentTextDto1.setParagraphIndex(4);
list.add(addCommentTextDto1);

AddCommentTextDto addCommentTextDto2 = new AddCommentTextDto();
addCommentTextDto2.setAuth("作者");
addCommentTextDto2.setCommentText("批注3");
addCommentTextDto2.setSectionIndex(0);
addCommentTextDto2.setBodyIndex(0);
addCommentTextDto2.setParagraphIndex(5);
list.add(addCommentTextDto2);
addComment(list, docA);

@ouchli 看起来出现问题是因为您将isDeep标志指定为true。 在这种情况下,Aspose.Words 在整个文档树中查找指定类型的节点,在您的情况下,第四段是从先前插入的注释中返回的。 请像这样修改您的代码:

Section section = (Section) document.getChild(NodeType.SECTION, addCommentTextDto.getSectionIndex(), false);
Body body = (Body) section.getChild(NodeType.BODY, addCommentTextDto.getBodyIndex(), false);
Paragraph para = (Paragraph) body.getChild(NodeType.PARAGRAPH, addCommentTextDto.getParagraphIndex(), false)