# 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": <template.docx>,
    "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. **资源管理**: 自动资源清理和释放