# 生成富文本和PDF **Repository Path**: jpf1987/report-generator-service ## Basic Information - **Project Name**: 生成富文本和PDF - **Description**: 传入数据,根据模板生成html富文本内容和PDF文件 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-12-24 - **Last Updated**: 2026-01-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 评标报告生成微服务 独立的评标报告生成服务,根据模板ID和数据生成HTML富文本和PDF文件。 ## 技术栈 - **Spring Boot 3.2.0** - Web框架 - **Thymeleaf** - 模板引擎 - **OpenHTMLtoPDF** - HTML转PDF - **Lombok** - 简化代码 - **SpringDoc OpenAPI** - API文档 ## 项目结构 ``` report-generator-service/ ├── src/main/java/com/report/ │ ├── ReportGeneratorApplication.java # 主应用类 │ ├── controller/ # REST API控制器 │ │ └── ReportGeneratorController.java │ ├── service/ # 业务服务层 │ │ ├── TemplateService.java # 模板管理服务 │ │ ├── HtmlGenerationService.java # HTML生成服务 │ │ ├── PdfGenerationService.java # PDF生成服务 │ │ └── ReportGeneratorService.java # 报告生成核心服务 │ ├── model/ # 数据模型 │ │ ├── ReportGenerateRequest.java # 请求DTO │ │ ├── ReportGenerateResponse.java # 响应DTO │ │ └── TemplateInfo.java # 模板信息 │ ├── config/ # 配置类 │ │ └── ThymeleafConfig.java │ └── exception/ # 异常处理 │ └── GlobalExceptionHandler.java └── src/main/resources/ ├── application.yml # 应用配置 ├── templates/ # 模板文件目录 │ ├── evaluation_report.html # 评标报告模板 │ └── simple_report.html # 简单报告模板 └── font/ # 字体文件目录(可选) ``` ## 快速开始 ### 前置要求 - JDK 17+ - Maven 3.6+ ### 构建项目 ```bash cd report-generator-service mvn clean package ``` ### 运行服务 ```bash mvn spring-boot:run ``` 或运行JAR包: ```bash java -jar target/report-generator-service-1.0.0.jar ``` 服务启动后访问: - 服务地址: http://localhost:8080/report-service - API文档: http://localhost:8080/report-service/swagger-ui.html ## API接口说明 ### 1. 生成报告 **接口:** `POST /api/report/generate` **请求参数:** ```json { "templateId": "evaluation_report", "data": { "projectName": "某市智能化工程采购项目", "projectNumber": "ZB-2024-001", "biddingType": "公开招标", "openBidTime": "2024-01-15 09:30:00", "openBidLocation": "某市公共资源交易中心", "experts": [ { "name": "张三", "organization": "某科技公司", "major": "计算机", "title": "高级工程师", "type": "技术专家" } ], "bidders": [ { "name": "某建设公司", "price": "1,500,000.00", "duration": "180天", "deposit": "30,000.00", "technicalScore": 45.5, "commercialScore": 30.0, "otherScore": 10.0, "totalScore": 85.5 } ], "candidates": [ { "name": "某建设公司", "score": 85.5, "recommendation": "推荐为第一中标候选人" } ] }, "returnHtml": true, "returnPdfBase64": false } ``` **响应示例:** ```json { "success": true, "message": "报告生成成功", "templateId": "evaluation_report", "html": "...", "pdfUrl": "D:\\ai\\template\\pdf-storage\\evaluation_report_20240123_153045_a1b2c3d4.pdf", "pdfFileName": "evaluation_report_20240123_153045_a1b2c3d4.pdf", "timestamp": 1705987245123 } ``` ### 2. 下载PDF **接口:** `GET /api/report/download?filePath={文件路径}` 返回PDF文件流,可直接下载或在浏览器中预览。 ### 3. 获取模板列表 **接口:** `GET /api/templates` 返回所有可用的报告模板信息。 ### 4. 获取指定模板信息 **接口:** `GET /api/templates/{templateId}` 返回指定模板的详细信息。 ### 5. 健康检查 **接口:** `GET /api/health` 检查服务健康状态。 ## 模板开发指南 ### 模板位置 模板文件放在 `src/main/resources/templates/` 目录下。 ### 模板语法 使用Thymeleaf语法: ```html