# Report Generator 报告生成工具 通用的文档模板处理和报告生成工具,支持Word文档的动态内容生成。 ## 功能特性 ### 1. 基础功能 - ✅ 占位符替换 (`${key}` 格式) - ✅ Word文档处理 (基于Apache POI) - ✅ 模板文件管理 - ✅ 多种输入输出方式 (文件路径、流、字节数组) ### 2. 高级功能 - ✅ 书签定位插入 (基于docx4j) - ✅ 动态表格生成 - ✅ 文档合并 - ✅ 样式管理 (字体、颜色、对齐) - ✅ 自动分页控制 - ✅ 深拷贝支持 ### 3. 扩展功能 - 🔄 自定义处理器插件化 - 🔄 复杂表达式支持 - 🔄 模板验证 - 🔄 缓存优化 ## 架构设计 ``` report-generator/ ├── controller/ # HTTP接口层 ├── service/ # 业务逻辑层 ├── engine/ # 模板引擎核心 │ ├── DocumentProcessor # 文档处理器接口 │ ├── WordEngine # Word处理引擎 │ ├── PlaceholderEngine # 占位符处理引擎 │ └── BookmarkEngine # 书签处理引擎 ├── model/ # 数据模型 │ ├── TemplateRequest # 处理请求模型 │ ├── TemplateSource # 模板源定义 │ └── ProcessResult # 处理结果 ├── util/ # 工具类 └── exception/ # 异常处理 ``` ## 使用示例 ### 1. HTTP接口方式 ```bash # 简单占位符替换 POST /api/report/process Content-Type: multipart/form-data { "templateFile": , "data": { "name": "张三", "date": "2024-01-01", "amount": "1000.00" }, "outputFileName": "report.docx" } ``` ### 2. Java API方式 ```java // 注入服务 @Autowired private ReportGeneratorService reportService; // 创建请求 TemplateRequest request = TemplateRequest.builder() .templatePath("template.docx") .data(Map.of("name", "张三", "date", "2024-01-01")) .outputPath("result.docx") .options(ProcessOptions.builder() .enablePlaceholder(true) .enableBookmark(true) .build()) .build(); // 处理模板 ProcessResult result = reportService.processTemplate(request); ``` ## 配置说明 ### 处理选项 (ProcessOptions) ```java ProcessOptions options = ProcessOptions.builder() .enablePlaceholder(true) // 启用占位符替换 .enableBookmark(true) // 启用书签处理 .enableDynamicTable(true) // 启用动态表格 .enableAutoPage(true) // 启用自动分页 .placeholderPattern("${}") // 占位符格式 .build(); ``` ### 模板源配置 (TemplateSource) ```java // 文件路径方式 TemplateSource.fromFile("path/to/template.docx") // 输入流方式 TemplateSource.fromStream(inputStream) // 字节数组方式 TemplateSource.fromBytes(byteArray) ``` ## 技术栈 - **Apache POI**: Word文档基础操作 - **docx4j**: 高级Word文档处理 - **Spring Boot**: 框架支持 - **Hutool**: 工具库 - **Jackson**: JSON处理 ## 性能优化 1. **模板缓存**: 常用模板缓存减少IO 2. **流式处理**: 大文件流式处理避免内存溢出 3. **异步处理**: 支持异步批量处理 4. **资源管理**: 自动资源清理和释放