ouchli
1
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 代码看起来不错。 您能否在此附上您的输入、输出和预期文件以供我们参考? 我们将检查该问题并为您提供更多信息。
ouchli
3
原附件
代码生成的附件
预期生成附件
参数
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)