From 2d368b1f587edfe4e1c87e9dc1d5345cd43b8841 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期三, 21 一月 2026 17:20:37 +0800
Subject: [PATCH] update

---
 admin-server/src/main/java/com/estate/expert/admin/service/impl/ReportServiceImpl.java |   49 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 49 insertions(+), 0 deletions(-)

diff --git a/admin-server/src/main/java/com/estate/expert/admin/service/impl/ReportServiceImpl.java b/admin-server/src/main/java/com/estate/expert/admin/service/impl/ReportServiceImpl.java
index 2f20254..0ca1df7 100644
--- a/admin-server/src/main/java/com/estate/expert/admin/service/impl/ReportServiceImpl.java
+++ b/admin-server/src/main/java/com/estate/expert/admin/service/impl/ReportServiceImpl.java
@@ -18,10 +18,15 @@
 import com.estate.expert.admin.stat.report.data.impl.SystemFuzzyReportData;
 import com.estate.expert.admin.stat.report.data.impl.SystemScoreReportData;
 import com.estate.expert.common.exception.BizException;
+import fr.opensagres.poi.xwpf.converter.pdf.PdfConverter;
+import fr.opensagres.poi.xwpf.converter.pdf.PdfOptions;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.OutputStream;
 
 /**
  * 报告数据服务实现类
@@ -116,6 +121,50 @@
         return builder.buildReport(reportData, template.getConfig());
     }
 
+    @Override
+    public void fuzzyReportPdf(Integer checkTaskId, Integer templateId, OutputStream outputStream) {
+        try (var doc = fuzzyReport(checkTaskId, templateId)) {
+            convertToPdf(doc, outputStream);
+        } catch (Exception e) {
+            log.error("生成模糊评价PDF报告失败", e);
+            throw new BizException("生成模糊评价PDF报告失败");
+        }
+    }
+
+    @Override
+    public void scoreReportPdf(Integer checkTaskId, Integer templateId, OutputStream outputStream) {
+        try (var doc = scoreReport(checkTaskId, templateId)) {
+            convertToPdf(doc, outputStream);
+        } catch (Exception e) {
+            log.error("生成打分评价PDF报告失败", e);
+            throw new BizException("生成打分评价PDF报告失败");
+        }
+    }
+
+    /**
+     * 将Word文档转换为PDF
+     * @param template Word模板
+     * @param outputStream 输出流
+     */
+    private void convertToPdf(XWPFTemplate template, OutputStream outputStream) throws Exception {
+        // 先将Word模板写入字节数组
+        ByteArrayOutputStream docOutputStream = new ByteArrayOutputStream();
+        template.write(docOutputStream);
+
+        // 从字节数组读取Word文档
+        ByteArrayInputStream docInputStream = new ByteArrayInputStream(docOutputStream.toByteArray());
+        org.apache.poi.xwpf.usermodel.XWPFDocument document = new org.apache.poi.xwpf.usermodel.XWPFDocument(docInputStream);
+
+        // 转换为PDF
+        PdfOptions options = PdfOptions.create();
+        PdfConverter.getInstance().convert(document, outputStream, options);
+
+        // 关闭资源
+        document.close();
+        docInputStream.close();
+        docOutputStream.close();
+    }
+
     private ReportBuilderBase getReportBuilder(Integer templateId) {
         var reportTemplate = reportTemplateService.get(templateId);
         BizResultCode.BIZ_REPORT_TEMPLATE_NOT_EXIST.check(reportTemplate == null);

--
Gitblit v1.7.1