From bf90c55358e0bbbbf5091133e45f887fd7f1734c Mon Sep 17 00:00:00 2001
From: wzp <2040239371@qq.com>
Date: 星期四, 01 二月 2024 16:37:12 +0800
Subject: [PATCH] 图文段落居中显示

---
 src/main/java/com/ots/project/tool/report/APIFan/chart/APIFanChart.java |  193 ++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 179 insertions(+), 14 deletions(-)

diff --git a/src/main/java/com/ots/project/tool/report/APIFan/chart/APIFanChart.java b/src/main/java/com/ots/project/tool/report/APIFan/chart/APIFanChart.java
index 46fdc78..c06168a 100644
--- a/src/main/java/com/ots/project/tool/report/APIFan/chart/APIFanChart.java
+++ b/src/main/java/com/ots/project/tool/report/APIFan/chart/APIFanChart.java
@@ -1,21 +1,25 @@
 package com.ots.project.tool.report.APIFan.chart;
 
+import com.ots.framework.config.EssConfig;
 import com.ots.project.tool.report.MAQ.base.RowData;
 import com.ots.project.tool.report.MAQ.base.SeriesData;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.poi.ooxml.POIXMLDocument;
 import org.apache.poi.ooxml.POIXMLDocumentPart;
+import org.apache.poi.util.Units;
 import org.apache.poi.xssf.usermodel.XSSFCell;
 import org.apache.poi.xssf.usermodel.XSSFRow;
 import org.apache.poi.xssf.usermodel.XSSFSheet;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.apache.poi.xwpf.usermodel.XWPFChart;
-import org.apache.poi.xwpf.usermodel.XWPFDocument;
+import org.apache.poi.xwpf.usermodel.*;
 import org.openxmlformats.schemas.drawingml.x2006.chart.*;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
 
+import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
+import java.math.BigInteger;
 import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -40,7 +44,7 @@
 
     //鑷垜璁ょ煡鍑嗙‘搴�
     private static String p_sdecepT1;
-    private static String p_sdecept10;
+    private static String p_sdecep10;
     //鑷垜闃愯堪鐨勭湡瀹炲害
     private static String p_impmgT1;
     private static String p_impmg11;
@@ -66,11 +70,12 @@
             textMap.put("P_Emotct07","60");
             textMap.put("P_Stress08","61");
             textMap.put("P_SdecepT1","62");
-            textMap.put("P_Sdecept10","63");
+            textMap.put("P_Sdecep10","63");
             textMap.put("P_ImpmgT1","64");
             textMap.put("P_Impmg11","65");
             textMap.put("BST1","66");
             textMap.put("BST2","67");
+            textMap.put("box","1");
             changeChart(document,textMap);
             document.write(os);
         }catch (Exception e){
@@ -91,7 +96,161 @@
             return false;
         }
         //鍥捐〃鏁版嵁
-        changePAQChart(document,seriesDatas);
+        changeAPIFanChart(document,seriesDatas);
+
+
+        //鏇挎崲鍥剧墖
+        try{
+            // 鑾峰彇鎵�鏈夋钀�
+            List<XWPFParagraph> paragraphs = document.getParagraphs();
+
+            //鑾峰彇鍥剧墖璺緞
+            String selectedPic = EssConfig.getReportTemplates()+"apifanSelected.png";
+            String defaultPic =EssConfig.getReportTemplates()+"apifanDefalut.png";
+
+            //娴嬭瘯鐢ㄧ殑
+//            String selectedPic = "C:\\娴嬭瘎绯荤粺\\home\\reportTemplates\\apifanSelected.png";
+//            String defaultPic ="C:\\娴嬭瘎绯荤粺\\home\\reportTemplates\\apifanDefalut.png";
+
+
+            // 閬嶅巻娈佃惤杩涜鏇挎崲鎿嶄綔
+            synchronized (paragraphs) {
+                for (XWPFParagraph paragraph : paragraphs) {
+                    String text = paragraph.getText();
+
+                    //鐢�%%鍙峰湪鍓嶉潰琚浛鎹簡
+                    if (text.contains("{{box0}}")) {  // 妫�鏌ユ槸鍚﹀寘鍚鏇挎崲鐨勬枃瀛楀彉閲�
+                        String picturePath = ""; // 鍥剧墖璺緞
+
+                        String Box = (String) textMap.get("box");
+                        int box = Integer.parseInt(Box);
+                        if(box== 0)
+                        {
+                            picturePath =selectedPic;
+                        }
+                        else
+                        {
+                            picturePath = defaultPic;
+                        }
+
+                        // 鍒涘缓鏂扮殑鍥剧墖娈佃惤
+//                        XWPFParagraph paragraph = document.createParagraph();
+                        // 鑾峰彇鎵�鏈夎繍琛岀殑鍒楄〃
+                        List<XWPFRun> runs = paragraph.getRuns();
+                        // 绉婚櫎鎵�鏈夎繍琛�
+                        for (int i = runs.size() - 1; i >= 0 ; i--) {
+                            paragraph.removeRun(i);
+                        }
+                        // 鍒涘缓鍥剧墖瀵硅薄
+                        XWPFRun run = paragraph.createRun();
+                        int pictureType = Document.PICTURE_TYPE_PNG; // 鍥剧墖绫诲瀷
+
+                        // 灏嗗浘鐗囨彃鍏ュ埌娈佃惤涓�
+                        int width = Units.toEMU(20); // 鍥剧墖瀹藉害
+                        int height = Units.toEMU(20); // 鍥剧墖楂樺害
+                        run.addPicture(new FileInputStream(picturePath), pictureType, "image.png", width, height);
+
+                        // 娣诲姞绌烘牸鎴栧埗琛ㄧ锛屼娇鏂囨湰灞呬腑瀵归綈
+                        int numberOfSpaces = 3;
+                        for (int i = 0; i < numberOfSpaces; i++) {
+                            run.setText(" ");
+                        }
+                        // 璁剧疆瀛楃闂磋窛涓哄眳涓榻�
+                        paragraph.setVerticalAlignment(TextAlignment.CENTER);
+                        run.setText("缁撴灉鍙俊锛屽彲浠ョ洿鎺ヨВ璇伙紙娴嬭瘯涓湭鍙戠幇鏄庢樉鐨勨�滀吉瑁呭ソ鈥濆�惧悜锛�");
+
+                    }
+                    if (text.contains("{{box1}}")) {  // 妫�鏌ユ槸鍚﹀寘鍚鏇挎崲鐨勬枃瀛楀彉閲�
+                        String picturePath = ""; // 鍥剧墖璺緞
+
+                        String Box = (String) textMap.get("box");
+                        int box = Integer.parseInt(Box);
+                        if(box== 1)
+                        {
+                            picturePath =selectedPic;
+                        }
+                        else
+                        {
+                            picturePath = defaultPic;
+                        }
+
+                        // 鍒涘缓鏂扮殑鍥剧墖娈佃惤
+//                        XWPFParagraph paragraph = document.createParagraph();
+                        // 鑾峰彇鎵�鏈夎繍琛岀殑鍒楄〃
+                        List<XWPFRun> runs = paragraph.getRuns();
+                        // 绉婚櫎鎵�鏈夎繍琛�
+                        for (int i = runs.size() - 1; i >= 0 ; i--) {
+                            paragraph.removeRun(i);
+                        }
+                        // 鍒涘缓鍥剧墖瀵硅薄
+                        XWPFRun run = paragraph.createRun();
+                        int pictureType = Document.PICTURE_TYPE_PNG; // 鍥剧墖绫诲瀷
+
+                        // 灏嗗浘鐗囨彃鍏ュ埌娈佃惤涓�
+                        int width = Units.toEMU(20); // 鍥剧墖瀹藉害
+                        int height = Units.toEMU(20); // 鍥剧墖楂樺害
+                        run.addPicture(new FileInputStream(picturePath), pictureType, "image.png", width, height);
+                        // 娣诲姞绌烘牸鎴栧埗琛ㄧ锛屼娇鏂囨湰灞呬腑瀵归綈
+                        int numberOfSpaces = 3;
+                        for (int i = 0; i < numberOfSpaces; i++) {
+                            run.setText(" ");
+                        }
+                        // 璁剧疆瀛楃闂磋窛涓哄眳涓榻�
+                        paragraph.setVerticalAlignment(TextAlignment.CENTER);
+                        run.setText("缁撴灉涓嶅彲淇★紙娴嬭瘯涓湁鏄庢樉鐨勨�滀吉瑁呭ソ鈥濆�惧悜锛�");
+
+                    }
+                    if (text.contains("{{box2}}")) {  // 妫�鏌ユ槸鍚﹀寘鍚鏇挎崲鐨勬枃瀛楀彉閲�
+                        String picturePath = ""; // 鍥剧墖璺緞
+
+                        String Box = (String) textMap.get("box");
+                        int box = Integer.parseInt(Box);
+                        if(box== 2)
+                        {
+                            picturePath =selectedPic;
+                        }
+                        else
+                        {
+                            picturePath = defaultPic;
+                        }
+
+                        // 鍒涘缓鏂扮殑鍥剧墖娈佃惤
+//                        XWPFParagraph paragraph = document.createParagraph();
+                        // 鑾峰彇鎵�鏈夎繍琛岀殑鍒楄〃
+                        List<XWPFRun> runs = paragraph.getRuns();
+                        // 绉婚櫎鎵�鏈夎繍琛�
+                        for (int i = runs.size() - 1; i >= 0 ; i--) {
+                            paragraph.removeRun(i);
+                        }
+                        // 鍒涘缓鍥剧墖瀵硅薄
+                        XWPFRun run = paragraph.createRun();
+                        int pictureType = Document.PICTURE_TYPE_PNG; // 鍥剧墖绫诲瀷
+
+                        // 灏嗗浘鐗囨彃鍏ュ埌娈佃惤涓�
+                        int width = Units.toEMU(20); // 鍥剧墖瀹藉害
+                        int height = Units.toEMU(20); // 鍥剧墖楂樺害
+                        run.addPicture(new FileInputStream(picturePath), pictureType, "image.png", width, height);
+                        // 娣诲姞绌烘牸鎴栧埗琛ㄧ锛屼娇鏂囨湰灞呬腑瀵归綈
+                        int numberOfSpaces = 3;
+                        for (int i = 0; i < numberOfSpaces; i++) {
+                            run.setText(" ");
+                        }
+                        // 璁剧疆瀛楃闂磋窛涓哄眳涓榻�
+                        paragraph.setVerticalAlignment(TextAlignment.CENTER);
+                        run.setText("缁撴灉鍙兘鍙俊锛岃В璇绘椂瑕佽皑鎱庯紙娴嬭瘯涓湁涓�瀹氱殑鈥滀吉瑁呭ソ鍊惧悜鈥濓級");
+
+                    }
+                }
+            }
+
+
+
+        }
+        catch (Exception ex)
+        {
+            System.out.println(ex.getMessage());
+        }
+
         return true;
     }
 
@@ -129,14 +288,14 @@
         p_stress08 = (String) textMap.get("P_Stress08");
 
         p_sdecepT1 = (String) textMap.get("P_SdecepT1");
-        p_sdecept10 = (String) textMap.get("P_Sdecept10");
+        p_sdecep10 = (String) textMap.get("P_Sdecep10");
         p_impmgT1 = (String) textMap.get("P_ImpmgT1");
         p_impmg11 = (String) textMap.get("P_Impmg11");
         bst1 = (String) textMap.get("BST1");
         bst2 = (String) textMap.get("BST2");
 
         String[]  paramValue = new String[]{p_total, p_retent09, p_social01,p_cooper02,p_analth03,p_initia04,
-                p_persis05,p_depend06,p_emotct07,p_stress08,p_sdecepT1, p_sdecept10,p_impmgT1,p_impmg11,bst1,bst2};
+                p_persis05,p_depend06,p_emotct07,p_stress08,p_sdecepT1, p_sdecep10,p_impmgT1,p_impmg11,bst1,bst2};
 
         //鍒ゆ柇鏄惁涓虹┖
         if (checkParamsIsNull(paramValue))
@@ -157,7 +316,7 @@
         Double P_Emotct07 = Double.valueOf(p_emotct07);
         Double P_Stress08 = Double.valueOf(p_stress08);
         Double P_SdecepT1 = Double.valueOf(p_sdecepT1);
-        Double P_Sdecept10 = Double.valueOf(p_sdecept10);
+        Double P_Sdecep10 = Double.valueOf(p_sdecep10);
         Double P_ImpmgT1 = Double.valueOf(p_impmgT1);
         Double P_Impmg11 = Double.valueOf(p_impmg11);
         Double BST1 = Double.valueOf(bst1);
@@ -179,7 +338,7 @@
 
                 )),
                 new SeriesData("鑷垜璁ょ煡鐨勫噯纭害", Arrays.asList(
-                        new RowData("鑷垜璁ょ煡鐨勫噯纭害", P_Sdecept10),//椤哄簭瑕佸�掔疆
+                        new RowData("鑷垜璁ょ煡鐨勫噯纭害", P_Sdecep10),//椤哄簭瑕佸�掔疆
                         new RowData("鑷垜璁ょ煡鐨勫噯纭害", P_SdecepT1)//椤哄簭瑕佸�掔疆
 
                 )),
@@ -204,7 +363,7 @@
      * @param doc
      * @param seriesDatas
      */
-    public static void changePAQChart(XWPFDocument doc,List<SeriesData> seriesDatas) {
+    public static void changeAPIFanChart(XWPFDocument doc,List<SeriesData> seriesDatas) {
         try {
             //鍔ㄦ�佸埛鏂板浘琛�
             List<POIXMLDocumentPart> relations = doc.getRelations();
@@ -219,24 +378,30 @@
                     // excel鍐呯疆琛ㄦ牸
                     XSSFWorkbook workbook = chart.getWorkbook();
                     XSSFSheet sheet = workbook.getSheetAt(0);
-
+                    String sheetName =  sheet.getSheetName();
 
                     //鏌卞舰鍥�
                     if (!plot.getBarChartList().isEmpty()) {
                         CTBarChart barChart = plot.getBarChartArray(0);
                         //鍒锋柊鍐呯疆excel鏁版嵁
                         List<SeriesData> excelData = new ArrayList<>();
-                        excelData.add(seriesDatas.get(k));
+                        //excelData.add(seriesDatas.get(k));
 
+                        //閫氳繃sheetName鏉ヨВ鍐冲尮閰嶅琛ㄧ殑闂
+                        SeriesData seriesData = seriesDatas.stream()
+                                .filter(item -> item.getName().equals(sheetName))
+                                .findFirst()
+                                .orElse(null);
+                        excelData.add(seriesData);
                         refreshExcel(excelData, workbook, sheet);
                         workbook.write(chart.getPackagePart().getOutputStream());
 
                         //鏌卞舰鍥炬暟鎹簮
-                        List<SeriesData> barDatas = seriesDatas;
+//                        List<SeriesData> barDatas = seriesDatas;
                         int i = 0;
                         for (CTBarSer ser : barChart.getSerList()) {
                             //鏇存柊鏌卞舰鍥炬暟鎹紦瀛�
-                            updateBarChart(barDatas.get(k), ser.getVal());
+                            updateBarChart(seriesData, ser.getVal());
                             ++i;
                         }
 

--
Gitblit v1.9.1