Jelajahi Sumber

build 通过传递raw数据实现poitl1.12数据类型的附件和图片列表正常展示

mamingxu 1 bulan lalu
induk
melakukan
7e25c50d92

+ 119 - 7
easier-report-biz/src/main/java/com/yaoyicloud/service/impl/ReportServiceImpl.java

@@ -3,8 +3,16 @@ package com.yaoyicloud.service.impl;
 import java.io.File;
 import java.io.FileOutputStream;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 
+import cn.hutool.core.util.StrUtil;
+import com.deepoove.poi.data.NumberingFormat;
+import com.deepoove.poi.data.NumberingRenderData;
+import com.deepoove.poi.data.ParagraphRenderData;
+import com.deepoove.poi.data.Pictures;
+import com.deepoove.poi.data.Texts;
 import com.yaoyicloud.constant.enums.ReportType;
 import com.yaoyicloud.service.ReportService;
 import com.yaoyicloud.template.PlatformCompanyReport;
@@ -27,29 +35,133 @@ public class ReportServiceImpl implements ReportService {
     // private final FoundationReport foundationReport;
     private final PlatformCompanyReport platformCompanyReport;
 
-
     @Override
     public String createPlusVersionCheckReport(
-        ReportType reportType, Map<String, Object> data, byte[] templateBytes, String outputBasePath, Long relationId) throws Exception {
+        ReportType reportType, Map<String, Object> data, byte[] templateBytes, String outputBasePath, Long relationId)
+        throws Exception {
 
         // 1. 将字节流模版写入临时文件
         File tempTemplateFile = File.createTempFile("template_", ".docx");
         try (FileOutputStream fos = new FileOutputStream(tempTemplateFile)) {
             fos.write(templateBytes);
         }
+        // 2.数据处理主要附件以及图片列表 针对raw数据封装poi-tl 1.12
+        String docurl1 = (String) data.get("docurl1");
+        data.put("docurl1", Texts.of(docurl1).link(docurl1).create());
+
+        if (data.containsKey("docurl1Text")) {
+            int i = 2;
+            while (data.containsKey("docurl" + i)) {
+                String url = (String) data.get("docurl" + i);
+                if (StrUtil.isNotBlank(url)) {
+                    data.put("docurl" + i, Texts.of(url).link(url).create());
+                }
+                i++;
+            }
+        }
+
+        String socialSecurityDetailsLink = (String) data.get("socialSecurityDetailsLink");
+        data.put("socialSecurityDetailsLink", Texts.of(socialSecurityDetailsLink).link(socialSecurityDetailsLink).create());
+
+        String taxDeclarationImage = (String) data.get("taxDeclarationImage");
+        data.put("taxDeclarationImage", Texts.of(taxDeclarationImage).link(taxDeclarationImage).create());
+
+        String financialInfoLink = (String) data.get("financialInfoLink");
+        data.put("financialInfoLink", Texts.of(financialInfoLink).link(financialInfoLink).create());
+
+
+
+        List<ParagraphRenderData> paragraphImages = new ArrayList<>();
+        List<Map<String, Object>> relatedEntitiesImage = (List<Map<String, Object>>) data.get("relatedEntitiesImage");
+        for (Map<String, Object> relatedEntity : relatedEntitiesImage) {
+            ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
+            paragraphRenderData.addPicture(Pictures.of((String) relatedEntity.get("url"))
+                .size((Integer) relatedEntity.get("width"), (Integer) relatedEntity.get("height")).create());
+            paragraphImages.add(paragraphRenderData);
+        }
+        NumberingFormat numberingFormat = new NumberingFormat(1, "");
+        NumberingRenderData numberedImages = new NumberingRenderData(
+            numberingFormat,
+            paragraphImages);
+        data.put("relatedEntitiesImage", numberedImages);
+
+
+// 处理 businessLicenseImage
+        processImageListToNumberedRenderData("businessLicenseImage", data);
+
+// 处理 bankCertificateImage
+        processImageListToNumberedRenderData("bankCertificateImage", data);
+
+// 处理 isoCertificationImage
+        processImageListToNumberedRenderData("isoCertificationImage", data);
+
+// 处理 securityLevelCertification
+        processImageListToNumberedRenderData("securityLevelCertification", data);
 
+// 处理 otherCertifications
+        processImageListToNumberedRenderData("otherCertifications", data);
+
+// 处理 organizationalStructureImage
+        processImageListToNumberedRenderData("organizationalStructureImage", data);
+
+// 处理 taxPaymentCertificateImage
+        processImageListToNumberedRenderData("taxPaymentCertificateImage", data);
+
+// 处理 nsxydjwj
+        processImageListToNumberedRenderData("nsxydjwj", data);
+
+// 处理 interestConflict
+        processImageListToNumberedRenderData("interestConflict", data);
+
+// 处理 disanfangcangzhao
+        processImageListToNumberedRenderData("disanfangcangzhao", data);
+
+// 处理 overallGuaranteeStatement
+        processImageListToNumberedRenderData("overallGuaranteeStatement", data);
         switch (reportType) {
             case PLATFORM_COMPANY:
                 return platformCompanyReport.exportReport(
-                        data,
-                        tempTemplateFile.getAbsolutePath(),
-                        outputBasePath,
-                        relationId
-                );
+                    data,
+                    tempTemplateFile.getAbsolutePath(),
+                    outputBasePath,
+                    relationId);
             case ACADEMIC_ASSOCIATIONS:
                 // 其他类型处理...
             default:
                 throw new UnsupportedOperationException("Unsupported report type: " + reportType);
         }
     }
+
+    private void processImageListToNumberedRenderData(String key, Map<String, Object> data) {
+        // 从 data 中获取原始图片数据列表
+        List<Map<String, Object>> rawImageDataList = (List<Map<String, Object>>) data.get(key);
+
+        if (rawImageDataList == null || rawImageDataList.isEmpty()) {
+            String textKey = key + "Text";
+            if (data.containsKey(textKey)) {
+                return;
+            }
+
+        }
+
+        // 处理非空图片数据
+        List<ParagraphRenderData> paragraphImages = new ArrayList<>();
+        for (Map<String, Object> imageInfo : rawImageDataList) {
+            ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
+            // 从原始数据中获取图片属性
+            String url = (String) imageInfo.get("url");
+            Integer width = (Integer) imageInfo.get("width");
+            Integer height = (Integer) imageInfo.get("height");
+
+            // 添加图片到段落渲染数据
+            paragraphRenderData.addPicture(Pictures.of(url)
+                    .size(width, height)
+                    .create());
+            paragraphImages.add(paragraphRenderData);
+        }
+
+        NumberingFormat numberingFormat = new NumberingFormat(1, "");
+        NumberingRenderData numberedImages = new NumberingRenderData(numberingFormat, paragraphImages);
+        data.put(key, numberedImages);
+    }
 }

+ 2 - 2
easier-report-biz/src/main/java/com/yaoyicloud/template/AbstractReportExporter.java

@@ -72,8 +72,8 @@ public abstract class AbstractReportExporter {
         String imagePath = this.imagePath();
         // word转pdf
         String html = OfficeUtil1.convert(reportTempWordFile, reportImagePath);
-        OfficeUtil1.convertHtmlToPdf(html, reportBastPath, getFontPaths(), true);
-        return OfficeUtil1.convertHtmlToPdf(html, reportBastPath, getFontPaths(), false);
+        OfficeUtil1.convertHtmlToPdf(html, reportBastPath, getFontPaths(), imagePath, true);
+        return OfficeUtil1.convertHtmlToPdf(html, reportBastPath, getFontPaths(), imagePath,  false);
     }
 
     protected abstract String getReportImagePath();