# 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