在上一篇文章中介绍的 添加批注 是通过 Paragraph.appendComment() 方法给整个段落添加批注,默认情况下,如果没有选择文本,批注标记将放在段落的末尾。如果要向特定文本添加批注,需要在文本范围的开始和结束处放置批注标记(由CommentMark类表示),本文将对此做进一步介绍。
import com.spire.doc.*;
import com.spire.doc.documents.CommentMark;
import com.spire.doc.documents.CommentMarkType;
import com.spire.doc.documents.Paragraph;
import com.spire.doc.documents.TextSelection;
import com.spire.doc.fields.Comment;
public class AddCommentToCharacters {
public static void main(String[] args) {
//加载测试文档
Document doc = new Document();
doc.loadFromFile("test.docx");
//查找指定字符串
TextSelection[] selections = doc.findAllString("皱状厚膜", true, false);
//获取关键字符串所在段落
Paragraph para = selections[0].getAsOneRange().getOwnerParagraph();
int index = para.getChildObjects().indexOf(selections[0].getAsOneRange());
//设置批注ID
CommentMark start = new CommentMark(doc);
start.setCommentId(1);
start.setType(CommentMarkType.Comment_Start);
CommentMark end = new CommentMark(doc);
end.setType(CommentMarkType.Comment_End);
end.setCommentId(1);
//添加批注内容
String str = "给指定字符串添加批注";
Comment comment = new Comment(doc);
comment.getFormat().setCommentId(1);
comment.getBody().addParagraph().appendText(str);
comment.getFormat().setAuthor("作者:");
comment.getFormat().setInitial("CM");
para.getChildObjects().insert(index, start);
para.getChildObjects().insert(index + 1, selections[0].getAsOneRange());
para.getChildObjects().insert(index + 2,end);
para.getChildObjects().insert(index + 3, comment);
//保存文档
doc.saveToFile("字符串批注.docx",FileFormat.Docx_2013);
doc.dispose();
}
}
批注添加效果: