为了账号安全,请及时绑定邮箱和手机立即绑定

Java 添加、回复、修改(替换)、删除、读取Word批注

标签:
Java

批注是一种常用于对特定文档内容进行注解的工具或方法,起到解释说明、标记指正的作用。在本篇文章中,将介绍如何操作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】给段落添加批注(文本、图片)

 import com.spire.doc.*;
 import com.spire.doc.documents.Paragraph;
 import com.spire.doc.fields.Comment;
 
 public class AddComment {
     public static void main(String[] args) {
         //加载测试文档
         Document doc = new Document("test.docx");
 
         //获取指定段落
         Section sec = doc.getSections().get(0);
         Paragraph para= sec.getParagraphs().get(3);
 
         //插入文本到批注
         Comment comment = para.appendComment("请在试验中将包含以下特征的实验样本记录在册,并整理好周记录报表,供后续观察取样。");
         comment.getFormat().setAuthor("审校组");
         //插入图片到批注
         comment.getBody().addParagraph().appendPicture("tp.png");
 
         //保存文档
         doc.saveToFile("AddComment.docx", FileFormat.Docx_2010);
     }
 }

批注添加效果:

https://img1.sycdn.imooc.com//5de0b3f80001085910620504.jpg

【示例2】给指定字符串添加批注

 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();
     }
 }

批注添加效果:

https://img1.sycdn.imooc.com//5de0b42c00013b1905540299.jpg


【示例3】回复批注

 import com.spire.doc.*;
 import com.spire.doc.fields.Comment;
 
 public class ReplyComment {
     public static void main(String[] args) throws Exception{
         //加载测试文档
         Document doc = new Document("AddComment.docx");
 
         //获取指定批注
         Comment comment = doc.getComments().get(0);
 
         //回复批注
         Comment relyC= new Comment(doc);
         relyC.getFormat().setAuthor("实验组");
         relyC.getBody().addParagraph().appendText("已完成。");
         comment.replyToComment(relyC);
 
         //保存文档
         doc.saveToFile("ReplyComment.docx",FileFormat.Docx_2010);
     }
 }

批注回复效果:

https://img1.sycdn.imooc.com//5de0b4980001995805540288.jpg


【示例4】修改或替换批注

 import com.spire.doc.*;
 
 public class ModifyComment {
     public static void main(String[] args){
         //加载含有批注的测试文档
         Document doc = new Document("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_2010);
     }
 }

修改或替换结果:

https://img1.sycdn.imooc.com//5de0b4c70001da7705540321.jpg

【示例5】删除批注

 import com.spire.doc.*;
 import com.spire.doc.FileFormat;
 
 public class DeleteComment{
     public static void main(String[] args) {
         //加载测试文档
         Document doc = new Document("AddComment.docx");
 
         //调用方法删除指定批注(删除批注中的所有内容)
         doc.getComments().removeAt(0);
 
         //删除指定批注中的指定段落(删除批注中的部分内容)
         doc.getComments().get(0).getBody().getParagraphs().get(1).getChildObjects().removeAt(0);
 
         //保存文档
         doc.saveToFile("DeleteComment", FileFormat.Docx_2010);
     }
 }

批注删除效果:

https://img1.sycdn.imooc.com//5de0b4fb0001256405540265.jpg

【示例6】读取批注中的文本

 import com.spire.doc.*;
 import com.spire.doc.documents.Paragraph;
 import com.spire.doc.fields.Comment;
 import com.spire.doc.fields.TextRange;
 
 public class ReadComment {
     public static void main(String[] args) {
         //加载测试文档
         Document doc = new Document();
         doc.loadFromFile("测试文档.docx");
 
         //实例化String类型变量
         String text = "";
 
         /*//获取指定批注中的文本
         Comment comment = doc.getComments().get(0);
         Paragraph paragraph = comment.getBody().getParagraphs().get(0);
         for(Object obj:paragraph.getChildObjects()) {
             if(obj instanceof TextRange){
                 TextRange textRange = (TextRange) obj;
                 text = text + textRange.getText();
             }
         }*/
 
 
         //遍历所有批注
         for(int i = 0;i< doc.getComments().getCount();i++){
             Comment comment = doc.getComments().get(i);
             //遍历所有批注中的段落
             for(int j= 0;j < comment.getBody().getParagraphs().getCount();j++) {
                 Paragraph paragraph = comment.getBody().getParagraphs().get(j);
                 //遍历段落中的对象
                 for (Object object : paragraph.getChildObjects()) {
                     //读取文本
                     if (object instanceof TextRange) {
                         TextRange textRange = (TextRange) object;
                         text = text + textRange.getText();
                     }
                 }
             }
         }
         //输入文本内容
         System.out.println(text);
     }
 }

批注文本读取结果:

https://img1.sycdn.imooc.com//5de0b51f00011a7105540190.jpg


【示例7】读取批注中的图片

 import com.spire.doc.*;
 import com.spire.doc.documents.Paragraph;
 import com.spire.doc.fields.Comment;
 import com.spire.doc.fields.DocPicture;
 
 import javax.imageio.ImageIO;
 import java.awt.image.RenderedImage;
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 
 
 public class ExtractImgsInComment {
     public static void main(String[] args) throws IOException{
         //加载测试文档
         Document doc = new Document();
         doc.loadFromFile("AddComment.docx");
 
         //创建ArrayList数组对象
         ArrayList images = new ArrayList();
 
         //遍历所有批注
         for(int i = 0;i< doc.getComments().getCount();i++){
             Comment comment = doc.getComments().get(i);
             //遍历所有批注中的段落
             for(int j= 0;j < comment.getBody().getParagraphs().getCount();j++) {
                 Paragraph paragraph = comment.getBody().getParagraphs().get(j);
                 //遍历段落中的对象
                 for (Object object : paragraph.getChildObjects()) {
                     //获取图片对象
                     if(object instanceof DocPicture){
                         DocPicture picture = (DocPicture) object;
                         images.add(picture.getImage());
                     }
                 }
             }
         }
         //提取图片,并指定图片格式
         for (int z = 0; z< images.size(); z++) {
             File file = new File(String.format("图片-%d.png", z));
             ImageIO.write((RenderedImage) images.get(z), "PNG", file);
         }
     }
 }

批注图片读取结果:

https://img1.sycdn.imooc.com//5de0b53f0001640c04520416.jpg


(本文完)


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
9
获赞与收藏
48

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消