Browse Source

build 新版报告生成处理基金会报告过长标题

mamingxu 1 month ago
parent
commit
299f328bc8

+ 32 - 48
easier-report-biz/src/main/java/com/yaoyicloud/tools/OfficeUtil1.java

@@ -6,7 +6,6 @@ import com.lowagie.text.pdf.PdfContentByte;
 import com.lowagie.text.pdf.PdfReader;
 import com.lowagie.text.pdf.PdfStamper;
 import com.lowagie.text.pdf.parser.PdfTextExtractor;
-import fr.opensagres.poi.xwpf.converter.core.FileImageExtractor;
 import fr.opensagres.poi.xwpf.converter.core.FileURIResolver;
 import fr.opensagres.poi.xwpf.converter.core.ImageManager;
 import fr.opensagres.poi.xwpf.converter.xhtml.XHTMLConverter;
@@ -19,7 +18,6 @@ import org.jsoup.nodes.Entities;
 import org.jsoup.select.Elements;
 import org.xhtmlrenderer.pdf.ITextFontResolver;
 import org.xhtmlrenderer.pdf.ITextRenderer;
-
 import java.awt.Color;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
@@ -30,7 +28,6 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -42,7 +39,6 @@ import java.util.regex.Pattern;
 public class OfficeUtil1 {
     private static final org.slf4j.Logger OFFICE_UTIL_LOGGER  = org.slf4j.LoggerFactory.getLogger(OfficeUtil1.class);
     private static Map<String, Integer> pageNumberMap = new LinkedHashMap<>();
-
     public static String convert(String docxPath, String imageDir) throws IOException {
         File imageDirFile = new File(imageDir);
         if (!imageDirFile.exists() && !imageDirFile.mkdirs()) {
@@ -53,40 +49,32 @@ public class OfficeUtil1 {
              XWPFDocument document = new XWPFDocument(docxIn);
              ByteArrayOutputStream htmlOut = new ByteArrayOutputStream()) {
 
-            // 执行转换
-            XHTMLOptions options = createHtmlOptions(imageDirFile);
-            XHTMLConverter.getInstance().convert(document, htmlOut, options);
-
-            return htmlOut.toString("UTF-8");
-        } catch (Exception e) {
-            OFFICE_UTIL_LOGGER.error("转换失败: {}", e.getMessage(), e);
-            throw new IOException("DOCX转换失败", e);
-        }
-    }
+            // 自定义 ImageManager:禁止生成 word/media 目录,强制使用 imageDir 根目录
+            ImageManager imageManager = new ImageManager(imageDirFile, "") {
+                @Override
+                public String resolve(String uri) {
 
+                    return new File(imageDir, uri).getAbsolutePath().replace("/", "\\").toString();
+                }
 
-    /**
-     * 创建HTML转换选项
-     */
-    private static XHTMLOptions createHtmlOptions(File imageDirFile) {
-        @SuppressWarnings("deprecation")
-        XHTMLOptions options = XHTMLOptions.create()
-                .setImageManager(new ImageManager(imageDirFile, "") {
-                    @Override
-                    public String resolve(String uri) {
-                        return new File(imageDirFile, uri).getAbsolutePath().replace("/", "\\");
-                    }
-                })
-                .URIResolver(new FileURIResolver(imageDirFile) {
-                    @Override
-                    public String resolve(String uri) {
-                        return new File(imageDirFile, uri).getAbsolutePath().replace("/", "\\");
-                    }
-                });
+            };
+
+            XHTMLOptions options = XHTMLOptions.create()
+                    .setImageManager(imageManager)
+                    .URIResolver(new FileURIResolver(imageDirFile) {
+                        @Override
+                        public String resolve(String uri) {
+                            // 去除 word/media/ 前缀
+                            String filename = uri.replace("word/media/", "");
+                            return new File(imageDirFile, filename)
+                                    .getAbsolutePath()
+                                    .replace("/", "\\");
+                        }
+                    });
 
-        options.setIgnoreStylesIfUnused(false);
-        options.setExtractor(new FileImageExtractor(imageDirFile));
-        return options;
+            XHTMLConverter.getInstance().convert(document, htmlOut, options);
+            return htmlOut.toString("UTF-8");
+        }
     }
 
     public static String formatHtml(String html) {
@@ -201,7 +189,7 @@ public class OfficeUtil1 {
         Element firstImg = images.first();
         // 4. 删除第一个img元素
         firstImg.parent().remove();
-        // 方法二:将所有 white-space:pre-wrap 改为 normal去除转换时的奇怪空白
+        // 将所有 white-space:pre-wrap 改为 normal去除转换时的奇怪空白
         Elements allElements = doc.getAllElements();
 
         for (Element element : allElements) {
@@ -392,7 +380,7 @@ public class OfficeUtil1 {
         String newFileName = baseName + "1" + extension;
         // 构建完整新路径
         String newFilePath = path.resolveSibling(newFileName).toString();
-        pdfReader(outputPdfPath, newFilePath, imagePath + "\\image1.jpeg", flag);
+        pdfReader(outputPdfPath, newFilePath, imagePath + File.separator + "image1.jpeg", flag);
 
         return newFilePath;
     }
@@ -429,8 +417,9 @@ public class OfficeUtil1 {
 
             // 收集标题和页码
             Pattern titlePattern = Pattern.compile(
-                    "^((\\d+)\\.\\s+|(\\d+\\.\\d+)\\s+)([\\u4e00-\\u9fa5a-zA-Z].*)$",
-                    Pattern.MULTILINE);
+                    "^((\\d+)\\.\\s+|(\\d+\\.\\d+)\\s+)([\\u4e00-\\u9fa5a-zA-Z0-9].*)$",
+                    Pattern.MULTILINE
+            );
             Pattern specialPattern = Pattern.compile("^重要声明\\s*[::]?\\s*(.*)$");
 
             for (int pageNum = startPage; pageNum <= reader.getNumberOfPages(); pageNum++) {
@@ -445,6 +434,10 @@ public class OfficeUtil1 {
                         String nextLine = (i + 1 < lines.length) ? lines[i + 1].trim() : "";
                         line = line + (nextLine.isEmpty() ? "" : nextLine);
                     }
+                    if (line.startsWith("7.8 机构管理层(法定代表人,理事长,秘书长)")) {
+                        String nextLine = (i + 1 < lines.length) ? lines[i + 1].trim() : "";
+                        line = line + (nextLine.isEmpty() ? "" : nextLine);
+                    }
 
                     Matcher matcher = titlePattern.matcher(line);
                     if (matcher.matches()) {
@@ -513,15 +506,6 @@ public class OfficeUtil1 {
         image.scaleAbsolute(PageSize.A4.getWidth(), PageSize.A4.getHeight());
         image.setAbsolutePosition(0, 0);
         background.addImage(image);
-        int lastPageIndex = reader.getNumberOfPages();
-        //删除最后一页空白页
-        String lastPageText = new PdfTextExtractor(reader).getTextFromPage(lastPageIndex);
-        // 使用 selectPages 方法删除最后一页
-        ArrayList<Integer> pagesToKeep = new ArrayList<>();
-        for (int i = 1; i < lastPageIndex; i++) {
-            pagesToKeep.add(i);
-        }
-        reader.selectPages(pagesToKeep);
 
         stamper.close();
         reader.close();

+ 10 - 55
easier-report-biz/src/main/resources/application.yml

@@ -154,11 +154,11 @@ tencloud:
     template-map: {"MEMBER_LOGIN":"23"}
 
 ## spring security 配置
-security:
-  oauth2:
-    client:
-      ignore-urls:
-        - /druid/**
+#security:
+#  oauth2:
+#    client:
+#      ignore-urls:
+#        - /druid/**
 
 # 文件系统
 file:
@@ -203,55 +203,10 @@ qxb:
   appKey: 9d39bd82-4f50-4932-a931-e76c736e8c2c
   secretKey: ffe8972d-b807-4c07-9b62-77fdc8df76ea
 
-allinpay:
-  orgid:
-  cusid: 5505810078000YD
-  appid: 00002811
-  apiurl: https://syb-test.allinpay.com/apiweb
-  signType: SM2
-  rsa_cus_prikey: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCfw/st1+lYn9k5wDuIIdsKuk2Ju/lijbyL/jJVcQxfaiit5iTSeVrReoaANtl8QqJdnB0KxySCzvONR/J2xHRgh5OsVZxuuV4RHkg8tqCJB5AckeDf97T61wt7byrr/tMutFqe8Jjmvicx7c0KZrCScT7bBfxlKCcpXHkTgbnv5o4o8xiAJV3ei47oEaKcShCjMzGIwNjjBqhK2hBAA7R7z7iuOrLYQD4PATBw1SAnprRYGIecOI2HZBaiMoLvtITCwAAauGnUZ51DaUFZPkeMrMWjoi2vMaS33sFh9h3tDWr2P5XZoW8dmcKRpp92YbQckfUlnHOziyUdxmhpcEeBAgMBAAECggEAAg+ntmwyLPwG8+lIe1Wge09y/6NmsMBOXen+IT8Pn02Bz9iHwhVhuBEiGhZbEPDVImsIruJp1Kwx1TFH7gNT0wj8vTzvgzgt//+JhAsBIDNyRwQUyB7sfU337nQ9NAU6GUCnaKSG/HcYj1rXidpQTdtbKb02h+GQO8bfIwLJ8M/d7Y2EK2/9+jIAvmKSO4ZyGEVrzbgYQC0V8KCKuTx64fErYurQH/aBlhxN0GxTcxeX/y5RkUwfaW55JEhApwm+SpzhjLJJfri14bMcVT8av4yoDGnmLEPBpPnFxR1EQoBJLTtc7TS7u/51I/JJwAe/75OOPSYIQWYVnlOLDng7yQKBgQDTFNNgvwr9zwdInnQfiibUx7TJfKSJqvbEXhsIWXKBCfFyQdu3d9RLd2FgRE3vgsFx3PMaT/ILVs15jPEI/mP4tCwQdCXc+l1NoiuuabUc4UwgY290fa2S5oRrf7ltmuscrC/xCa0Iqaio5dqfZN2XaBdv97ETDvZ3ReUxGsX0HQKBgQDBw5n5Ky2gpbOG0EG79tViF+S5JlTwNzQJjm+YskauZZcFwPAAIzh1z9Kz8lodSoC1wb/rrFmr9PnAbk4Puv9NbNdoIifp9CshonQ3PJyykh/SMTn2wmrQpmIiJIjgOvUjSgyRad6ePzM3hh9bQpD9kkRg73b85eDSqHIhp5g7tQKBgC3e3riti5Pwg6KyXIXmHd4rsAwBPDh2oL23vaQo3AtSv9eWnErYjZgAz3Z+IXmlLqix3VqgePch2/FIQbE0p0EK1nCU7Q2Ckvgl/9wdOLCX/VUkhroH/cposeoyjXdWLTXD7X8yHRo+1Fov6TyuTMF0a3N3nlGH9OOimtX6/X25AoGBAIUv5o6XV22teJGaZRTGvjYHJnj+GDRmPaaz+ZGEOYF24zBZRp9RlmWkzLhURg0MQRyuaTWd6qWAZowXRiEZ8JNP1WEG2Vi/NUaRXED7sNouByF8JNOxH6r8M0g0xMEcxZPUOn9ZvmQYHSR1VOhuASvLdqUK9Ucw3DDxCEKJ6OJhAoGBAKZYojmufECdq4YL5bsHBKo9okdOxzbAguQF4D8R0y7xYOTtQlU5qKQADmfMUxQwD/m+xgGewCoqRk8fDl2CTZDE4pmOrK5LAG2ZMZoTLErX95SmR/9VQgkddfWWKwyBQ1AcxshhTjADT71EYIvq12TJfL8iAcZCqC+4DmFcaYRg
-  rsa_tl_pubkey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYXfu4b7xgDSmEGQpQ8Sn3RzFgl5CE4gL4TbYrND4FtCYOrvbgLijkdFgIrVVWi2hUW4K0PwBsmlYhXcbR+JSmqv9zviVXZiym0lK3glJGVCN86r9EPvNTusZZPm40TOEKMVENSYaUjCxZ7JzeZDfQ4WCeQQr2xirqn6LdJjpZ5wIDAQAB
-  sm2p_privatekey: MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgKq+zfelNxrtYkJh3zX4b3miICXYN3ki3ZTREqUXSBfSgCgYIKoEcz1UBgi2hRANCAATSXuGjTUMlEvvUwl+BEXfzzNZ8CXMKjUza8taH1mCxUPc91TFzqK1FGcQflWTWn68b+H0RLQnv/TySkL5GfDJi
-  sm2_tl_pubkey: MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE/BnA8BawehBtH0ksPyayo4pmzL/u1FQ2sZcqwOp6bjVqQX4tjo930QAvHZPJ2eez8sCz/RYghcqv4LvMq+kloQ==
-  version: 11
-  validtime: 2
-  notify_url: https://pre.yaoeasier.com/cms/pay/callback
+
 # 租户表维护
-easier:
-  common:
-    ip2RegionPath: C:/Users/yyy/Desktop/新建文件夹 (2)/easier-be/easier-common/easier-common-core/src/main/resources/xdb/ip2region.xdb
-  office:
-    pdf:
-      rootPath: C:/Users/yyy/dev/yyc3/easier-be
+#easier:
+#  office:
+#    pdf:
+#      rootPath: C:/Users/yyy/dev/yyc3/easier-be
 
-  seq:
-    snowflake:
-      datacenter-id: 0
-      worker-id: 0
-      step: 1000
-      step-start: 0
-      biz-name: cms
-  tenant:
-    column: tenant_id
-    tables:
-      - cms_file
-      - cms_file_group
-      - cms_log
-      - cms_message
-      - cms_message_relation
-      - cms_audit_log
-      - cms_ent_risk_info_rel
-      - cms_ent_risk_invoice
-      - cms_ent_risk_info_decl
-      - cms_ent_risk_info_ckt
-      - cms_ent_risk_info_ckt_rule
-      - cms_course
-      - cms_lesson
-      - cms_ent_risk_financial_tax_auth
-      - cms_ent_risk_financial_tax
-      - cms_recharge
-      - cms_recharge_usage_record
-      - cms_ent_risk_qxb_info_rel
-      - cms_ent_risk_info_indicator_standard
-      - cms_ent_risk_info_review_item_config
-      - cms_ent_risk_inv_recog_his