# pageoffice-ext **Repository Path**: jeely/pageoffice-ext ## Basic Information - **Project Name**: pageoffice-ext - **Description**: PageOffice扩展项目,实现word文档书签内容获取、替换 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2025-08-11 - **Last Updated**: 2025-08-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # pageoffice-ext 开源项目 ## 项目简介 本项目是一个基于 docx4j 的开源 Java 项目,旨在提供便捷的 Word 文档处理功能,包括文本替换和图片替换。通过该项目,你可以轻松地替换 Word 文档中的书签文本内容和图片,仅支持docx后缀的word文件。 ## 功能特性 - **文本替换**:支持获取、替换 Word 文档中多个书签的文本内容。 - **图片替换**:支持获取、替换、添加 Word 文档中书签位置的图片。 - **文档文本**:支持读取文档内容为文本。 ## 安装与使用 ### 需jdk 1.8以上版本 ### 依赖安装 Maven 项目,可以在 `pom.xml` 中添加以下依赖: ```xml com.zhuozhengsoft pageoffice-ext 1.0.0.3 ``` ## 基本示例 word文档中书签命名必须以PO_开头,例如PO_UserName,代码中可直接使用UserName 不用加PO_,也可使用例如PO_UserName ### 获取书签文本内容 ```java public static void getDataRegionText(){ String filePath = "D:\\word\\test.docx"; // 加载word文档,可以是文件路径,也可以是文件流 WordDocumentExt wordDocumentExt = new WordDocumentExt(filePath); // 获取单个书签,获取书签对象 DataRegionExt dataRegionExt = wordDocumentExt.openDataRegionExt("PO_标签01"); if (dataRegionExt != null){ //获取文本内容 String text = dataRegionExt.getText(); System.out.println(text); } } ``` ### 设置书签文本内容 ```java public static void setDataRegionText(){ String filePath = "D:\\word\\test.docx"; String resultPath = "D:\\word\\result.docx"; // 加载word文档,可以是文件路径,也可以是文件流 WordDocumentExt wordDocumentExt = new WordDocumentExt(filePath); // 获取单个书签,获取书签对象 DataRegionExt dataRegionExt = wordDocumentExt.openDataRegionExt("PO_标签01"); if (dataRegionExt != null){ //设置文本内容 dataRegionExt.setText("CCCCCCCCC"); } //保存文档,可以是文件路径,也可以是文件流 wordDocumentExt.save(resultPath); } ``` ### 获取文档文本内容 ```java public static void getWordDocumentText(){ String filePath = "D:\\word\\test.docx"; // 加载word文档,可以是文件路径,也可以是文件流 WordDocumentExt wordDocumentExt = new WordDocumentExt(filePath); //获取文档文本内容 String docText = wordDocumentExt.getDocumentText(); System.out.println(docText); } ``` ### 获取书签内的图片 ```java public static void getDataRegionImage() { String filePath = "D:\\word\\test.docx"; WordDocumentExt wordDocumentExt = new WordDocumentExt(filePath); // 获取书签对象 DataRegionExt dataRegionExt = wordDocumentExt.openDataRegionExt("PO_图片环绕"); if (dataRegionExt != null){ // 获取图片 列表,可以获取多个图片,可替换,添加,删除图片 List imageList = dataRegionExt.getImageList(); ImageExt imageExt = imageList.get(0); //获取文档图片字节数组,也可以获取图片base64字符串 byte[] bytes = imageExt.getBytes(); String imageBase64 = imageExt.getImageBase64(); } } ``` ### 设置书签图片,可替换原图片,也可添加新图片 ```java public static void setDataRegionImage() { String filePath = "D:\\word\\test.docx"; String resultPath = "D:\\word\\result.docx"; String imagePath = "D:\\图片\\image.png"; WordDocumentExt wordDocumentExt = new WordDocumentExt(filePath); // 获取书签对象 DataRegionExt dataRegionExt = wordDocumentExt.openDataRegionExt("PO_图片环绕"); if (dataRegionExt != null){ List imageList = dataRegionExt.getImageList(); //替换原图片 ImageExt imageExt = imageList.get(0); //可以是图片路径、文件流、base64字符串、图片字节数组 imageExt.setImage(imagePath); //添加新图片 ImageExt image = dataRegionExt.createImage(); //设置图片,可以是图片路径、文件流、base64字符串、图片字节数组 image.setImage(imagePath); //设置图片高宽,不设置 则使用原图片高宽 image.setWidth(100); image.setHeight(100); //添加图片到书签 imageList.add(image); } //保存文档,可以是文件路径,也可以是文件流 wordDocumentExt.save(resultPath); } ``` ## 注意事项 - 本项目仅支持 docx 格式的 Word 文档,src/test/word 目录下有可测试的文件 - word文档中书签命名必须以PO_开头,例如PO_UserName,代码中可直接使用UserName 不用加PO_,也可使用例如PO_UserName - 报错提示存在书签嵌套时,可能是两个书签相邻无任何分隔符,可在word文件中设置显示书签后检查书签范围,若未显示多个书签嵌套,则可能是存在隐藏书签,目录链接包含隐藏书签,可在赋值的书签范围外添加空行或空格后重试 - 若需要取消打印 docx4j 相关日志,可在 application.yml 配置 logging.level.org.docx4j=OFF