批注是一种常用于对特定文档内容进行注解的工具或方法,起到解释说明、标记指正的作用。在本篇文章中,将介绍如何操作Word批注的方法,包括:
1. 添加批注:添加文本到批注、插入图片到批注;
1.1 给指定段落添加批注
1.2 给指定字符串添加批注
2. 回复批注;
3. 修改或替换批注:用文本替换批注中的文本内容、用文本替换批注中的图片、用图片替换批注中的图片;
4. 删除批注:删除指定批注中的所有内容、删除指定批注中的指定内容
5. 读取批注
5.1 读取批注中的文本
5.2 读取批注中的图片
使用工具:Free Spire.Doc for Java (免费版)
Jar文件获取及导入:
方法1:通过官网获取jar包,并解压。解压后,将lib文件夹下的Spire.Doc.jar文件导入java程序。
方法2:通过添加maven依赖导入到maven项目,参考导入步骤。
Java示例代码
【示例1】给段落添加批注(文本、图片)importcom.spire.doc.*;
importcom.spire.doc.documents.Paragraph;
importcom.spire.ment;
publicclassAddComment{
publicstaticvoidmain(String[]args){
//加载测试文档
Documentdoc=newDocument("test.docx");
//获取指定段落
Sectionsec=doc.getSections().get(0);
Paragraphpara=sec.getParagraphs().get(3);
//插入文本到批注
Commentcomment=para.appendComment("请在试验中将包含以下特征的实验样本记录在册,并整理好周记录报表,供后续观察取样。");
comment.getFormat().setAuthor("审校组");
//插入图片到批注
comment.getBody().addParagraph().appendPicture("tp.png");
//保存文档
doc.saveToFile("AddComment.docx",FileFormat.Docx_);
}
}
批注添加效果:
【示例2】给指定字符串添加批注importcom.spire.doc.*;
importcom.spire.mentMark;
importcom.spire.mentMarkType;
importcom.spire.doc.documents.Paragraph;
importcom.spire.doc.documents.TextSelection;
importcom.spire.ment;
publicclassAddCommentToCharacters{
publicstaticvoidmain(String[]args){
//加载测试文档
Documentdoc=newDocument();
doc.loadFromFile("test.docx");
//查找指定字符串
TextSelection[]selections=doc.findAllString("皱状厚膜",true,false);
//获取关键字符串所在段落
Paragraphpara=selections[0].getAsOneRange().getOwnerParagraph();
intindex=para.getChildObjects().indexOf(selections[0].getAsOneRange());
//添加批注ID
CommentMarkstart=newCommentMark(doc);
start.setCommentId(1);
start.setType(ment_Start);
CommentMarkend=newCommentMark(doc);
end.setType(ment_End);
end.setCommentId(1);
//添加批注内容
Stringstr="给指定字符串添加批注";
Commentcomment=newComment(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_);
doc.dispose();
}
}
批注添加效果:
【示例3】回复批注importcom.spire.doc.*;
importcom.spire.ment;
publicclassReplyComment{
publicstaticvoidmain(String[]args)throwsException{
//加载测试文档
Documentdoc=newDocument("AddComment.docx");
//获取指定批注
Commentcomment=doc.getComments().get(0);
//回复批注
CommentrelyC=newComment(doc);
relyC.getFormat().setAuthor("实验组");
relyC.getBody().addParagraph().appendText("已完成。");
comment.replyToComment(relyC);
//保存文档
doc.saveToFile("ReplyComment.docx",FileFormat.Docx_);
}
}
批注回复效果:
【示例4】修改或替换批注importcom.spire.doc.*;
publicclassModifyComment{
publicstaticvoidmain(String[]args){
//加载含有批注的测试文档
Documentdoc=newDocument("sample.docx");
//获取第一个批注中的第一段,用文本替换原有批注中的文本
doc.getComments().get(0).getBody().getParagraphs().get(0).replace("请在试验中将包含以下特征的实验样本记录在册,并整理好周记录报表,供后续观察取样。","参照以下实验方法!",false,false);
//获取第一个批注中的第二段,用文本替换原有批注中的图片
doc.getComments().get(0).getBody().getParagraphs().get(1).setText("请上报管理科!");
//获取第一个批注中的第三段,删除原有图片,再调用方法添加新图片(用图片替换图片)
doc.getComments().get(0).getBody().getParagraphs().get(2).getChildObjects().removeAt(0);
doc.getComments().get(0).getBody().getParagraphs().get(2).appendPicture("2.png");
//保存文档
doc.saveToFile("ModifyComment.docx",FileFormat.Docx_);
}
}
修改或替换结果:
【示例5】删除批注importcom.spire.doc.*;
importcom.spire.doc.FileFormat;
publicclassDeleteComment{
publicstaticvoidmain(String[]args){
//加载测试文档
Documentdoc=newDocument("AddComment.docx");
//调用方法删除指定批注(删除批注中的所有内容)
doc.getComments().removeAt(0);
//删除指定批注中的指定段落(删除批注中的部分内容)
doc.getComments().get(0).getBody().getParagraphs().get(1).getChildObjects().removeAt(0);
//保存文档
doc.saveToFile("DeleteComment",FileFormat.Docx_);
}
}
批注删除效果:
【示例6】读取批注中的文本importcom.spire.doc.*;
importcom.spire.doc.documents.Paragraph;
importcom.spire.ment;
importcom.spire.doc.fields.TextRange;
publicclassReadComment{
publicstaticvoidmain(String[]args){
//加载测试文档
Documentdoc=newDocument();
doc.loadFromFile("测试文档.docx");
//实例化String类型变量
Stringtext="";
/*//获取指定批注中的文本
Commentcomment=doc.getComments().get(0);
Paragraphparagraph=comment.getBody().getParagraphs().get(0);
for(Objectobj:paragraph.getChildObjects()){
if(objinstanceofTextRange){
TextRangetextRange=(TextRange)obj;
text=text+textRange.getText();
}
}*/
//遍历所有批注
for(inti=0;i
Commentcomment=doc.getComments().get(i);
//遍历所有批注中的段落
for(intj=0;j
Paragraphparagraph=comment.getBody().getParagraphs().get(j);
//遍历段落中的对象
for(Objectobject:paragraph.getChildObjects()){
//读取文本
if(objectinstanceofTextRange){
TextRangetextRange=(TextRange)object;
text=text+textRange.getText();
}
}
}
}
//输入文本内容
System.out.println(text);
}
}
批注文本读取结果:
【示例7】读取批注中的图片importcom.spire.doc.*;
importcom.spire.doc.documents.Paragraph;
importcom.spire.ment;
importcom.spire.doc.fields.DocPicture;
importjavax.imageio.ImageIO;
importjava.awt.image.RenderedImage;
importjava.io.File;
importjava.io.IOException;
importjava.util.ArrayList;
publicclassExtractImgsInComment{
publicstaticvoidmain(String[]args)throwsIOException{
//加载测试文档
Documentdoc=newDocument();
doc.loadFromFile("AddComment.docx");
//创建ArrayList数组对象
ArrayListimages=newArrayList();
//遍历所有批注
for(inti=0;i
Commentcomment=doc.getComments().get(i);
//遍历所有批注中的段落
for(intj=0;j
Paragraphparagraph=comment.getBody().getParagraphs().get(j);
//遍历段落中的对象
for(Objectobject:paragraph.getChildObjects()){
//获取图片对象
if(objectinstanceofDocPicture){
DocPicturepicture=(DocPicture)object;
images.add(picture.getImage());
}
}
}
}
//提取图片,并指定图片格式
for(intz=0;z
Filefile=newFile(String.format("图片-%d.png",z));
ImageIO.write((RenderedImage)images.get(z),"PNG",file);
}
}
}
批注图片读取结果:
(本文完)