root 2 yıl önce
ebeveyn
işleme
4a7967af58

+ 13 - 11
simulation-resource-server/src/main/java/com/css/simulation/resource/project/ctrl/SimulationProjectCtrl.java

@@ -27,7 +27,7 @@ public class SimulationProjectCtrl {
     @Resource
     private ClusterService clusterService;
 
-    //* -------------------------------- Comment --------------------------------
+    //* -------------------------------- 项目运行 --------------------------------
 
     /**
      * 1. 手动项目:第一次运行项目
@@ -37,6 +37,7 @@ public class SimulationProjectCtrl {
     public ResponseBodyVO<String> updateProjectNowRunState(@RequestBody SimulationManualProjectParam param) {
         return service.updateProjectNowRunState(param);
     }
+
     /**
      * 修改自动运行状态
      */
@@ -44,6 +45,7 @@ public class SimulationProjectCtrl {
     public ResponseBodyVO<String> updateAutomaticRunState(@RequestBody SimulationManualProjectParam param) {
         return service.updateAutomaticRunState(param);
     }
+
     /**
      * 手动运行自动项目
      */
@@ -55,6 +57,16 @@ public class SimulationProjectCtrl {
     //* -------------------------------- Comment --------------------------------
 
 
+    /**
+     * 导出测试报告
+     */
+    @RequestMapping("exportProjectReportById")
+    public void exportProjectReportById(@RequestBody SimulationManualProjectParam param) {
+        service.exportProjectReport(param);
+    }
+
+    //* -------------------------------- Comment --------------------------------
+
     /**
      * 创建/修改工作
      */
@@ -88,7 +100,6 @@ public class SimulationProjectCtrl {
     }
 
 
-
     /**
      * 获取工作详情
      */
@@ -177,14 +188,6 @@ public class SimulationProjectCtrl {
     }
 
 
-    /**
-     * 导出测试报告
-     */
-    @RequestMapping("exportProjectReportById")
-    public void exportProjectReportById(@RequestBody SimulationManualProjectParam param) {
-        service.exportProjectReport(param);
-    }
-
     /**
      * 生成保存评测等级(任务结果返回时调用)
      *
@@ -255,7 +258,6 @@ public class SimulationProjectCtrl {
     }
 
 
-
     /**
      * 删除自动运行子项目(支持批量删除)
      */

+ 230 - 266
simulation-resource-server/src/main/java/com/css/simulation/resource/project/impl/SimulationProjectServiceImpl.java

@@ -2592,7 +2592,7 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
                 map.put("nowRunState", getDictName(DictConstants.PROJECT_RUN_STATE, nowRunState));
             }
         }
-        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS, list);
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, list);
     }
 
     //评测等级分布-饼图
@@ -2604,99 +2604,84 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
     }
 
     @Override
+    @SneakyThrows
     public void exportProjectReport(SimulationManualProjectParam param) {
-        Document document = new Document(PageSize.A4);
-        OutputStream os = null;
-        try {
-            HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
-
-            //获取要生成的数据
-            ResponseBodyVO bodyVO = selectProjectReportById(param);
-            ProjectReportVo vo = (ProjectReportVo) bodyVO.getInfo();
-
-            //下载 or 保存本地
-            if (param.getIsCreateLocalPdfFile() != null && param.getIsCreateLocalPdfFile()) {
-                File file = new File(param.getLocalPdfFilePath());
-                os = new BufferedOutputStream(Files.newOutputStream(file.toPath()));
-            } else {
-                String fileName = vo.getProjectId() + "_" + vo.getProjectName();
-                response.setContentType("application/x-download");
-                response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") + ".pdf");
-                os = new BufferedOutputStream(response.getOutputStream());
-            }
-
-
-            // 监听生成pdf数据
-            PdfWriter.getInstance(document, os);
-
-            // 以下生成PDF
-            BaseFont font = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
-
-            //标题
-            document.open();
-            Font titleFont = new Font(font, 20); //字体
-            Paragraph titleElements = new Paragraph("评价报告", titleFont);
-            titleElements.setAlignment(Element.ALIGN_CENTER); //居中
-            document.add(titleElements);
-
-
-            //算法名称、算法得分、测试等级
-            Paragraph algorithmNanmeElements = new Paragraph(
-                    50,
-                    "          算法名称:" + vo.getAlgorithmName()
-                            + "         算法得分:" + vo.getAlgorithmScore()
-                            + "         测试等级:" + vo.getEvaluationLevel(),
-                    defaultFont(font));
-            algorithmNanmeElements.setAlignment(Element.ALIGN_LEFT); //靠左
-            document.add(algorithmNanmeElements);
-
-
-            //算法描述
-            Paragraph algorithmDescribeFontElements = new Paragraph(
-                    30,
-                    "          算法描述:" + vo.getAlgorithmDescribe(),
-                    defaultFont(font));
-            algorithmDescribeFontElements.setAlignment(Element.ALIGN_LEFT); //居中
-            document.add(algorithmDescribeFontElements);
-
-            //算法简评
-            Font algorithmEvaluateFont = new Font(font, 14); //字体
-            Paragraph algorithmEvaluateElements = new Paragraph(
-                    30,
-                    "          算法简评:" + vo.getAlgorithmEvaluation(),
-                    algorithmEvaluateFont);
-            algorithmEvaluateElements.setAlignment(Element.ALIGN_LEFT); //居中
-            document.add(algorithmEvaluateElements);
 
+        OutputStream os;
+        HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
+        //获取要生成的数据
+        ResponseBodyVO bodyVO = selectProjectReportById(param);
+        ProjectReportVo vo = (ProjectReportVo) bodyVO.getInfo();
+        //下载 or 保存本地
+        if (param.getIsCreateLocalPdfFile() != null && param.getIsCreateLocalPdfFile()) {
+            File file = new File(param.getLocalPdfFilePath());
+            os = new BufferedOutputStream(Files.newOutputStream(file.toPath()));
+        } else {
+            String fileName = vo.getProjectId() + "_" + vo.getProjectName();
+            response.setContentType("application/x-download");
+            response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") + ".pdf");
+            os = new BufferedOutputStream(response.getOutputStream());
+        }
+        // 监听生成pdf数据
+        Document document = new Document(PageSize.A4);
+        PdfWriter.getInstance(document, os);
+        // 以下生成PDF
+        BaseFont font = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
+        //标题
+        document.open();
+        Font titleFont = new Font(font, 20); //字体
+        Paragraph titleElements = new Paragraph("评价报告", titleFont);
+        titleElements.setAlignment(Element.ALIGN_CENTER); //居中
+        document.add(titleElements);
+        //算法名称、算法得分、测试等级
+        Paragraph algorithmNanmeElements = new Paragraph(
+                50,
+                "          算法名称:" + vo.getAlgorithmName()
+                        + "         算法得分:" + vo.getAlgorithmScore()
+                        + "         测试等级:" + vo.getEvaluationLevel(),
+                defaultFont(font));
+        algorithmNanmeElements.setAlignment(Element.ALIGN_LEFT); //靠左
+        document.add(algorithmNanmeElements);
+        //算法描述
+        Paragraph algorithmDescribeFontElements = new Paragraph(
+                30,
+                "          算法描述:" + vo.getAlgorithmDescribe(),
+                defaultFont(font));
+        algorithmDescribeFontElements.setAlignment(Element.ALIGN_LEFT); //居中
+        document.add(algorithmDescribeFontElements);
+        //算法简评
+        Font algorithmEvaluateFont = new Font(font, 14); //字体
+        Paragraph algorithmEvaluateElements = new Paragraph(
+                30,
+                "          算法简评:" + vo.getAlgorithmEvaluation(),
+                algorithmEvaluateFont);
+        algorithmEvaluateElements.setAlignment(Element.ALIGN_LEFT); //居中
+        document.add(algorithmEvaluateElements);
             /*
             测试得分表
              */
-            Paragraph scoreTableElements = new Paragraph(
-                    50,
-                    "测试得分表",
-                    defaultFont(font));
-            scoreTableElements.setAlignment(Element.ALIGN_CENTER); //居中
-            document.add(scoreTableElements);
-
-            setBlankLineSpacing(20, font, document);
-
-            // 表头
-            PdfPTable pdfPTable = new PdfPTable(5);
-            pdfPTable.setHeaderRows(1);//换页每页显示表头
-            addTitleList(pdfPTable, font, new String[]{"测试项目", "场景数量", "测试权重(%)", "测试得分", "得分率(%)"});
-
-            // 数据
-            List<AlgorithmScoreVo> algorithmScoreList = vo.getAlgorithmScoreList();
-            for (AlgorithmScoreVo asv : algorithmScoreList) {
-                String[] data = new String[]{
-                        asv.getProjectName(), String.valueOf(asv.getSceneNum()), asv.getWeight(), String.valueOf(asv.getScore()), String.valueOf(asv.getScoreRatio())
-                };
-
-                addDataList(pdfPTable, font, data);
-            }
-            document.add(pdfPTable);
-
-            // 评价等级(已去掉)
+        Paragraph scoreTableElements = new Paragraph(
+                50,
+                "测试得分表",
+                defaultFont(font));
+        scoreTableElements.setAlignment(Element.ALIGN_CENTER); //居中
+        document.add(scoreTableElements);
+        setBlankLineSpacing(20, font, document);
+        // 表头
+        PdfPTable pdfPTable = new PdfPTable(5);
+        pdfPTable.setHeaderRows(1);//换页每页显示表头
+        addTitleList(pdfPTable, font, new String[]{"测试项目", "场景数量", "测试权重(%)", "测试得分", "得分率(%)"});
+
+        // 数据
+        List<AlgorithmScoreVo> algorithmScoreList = vo.getAlgorithmScoreList();
+        for (AlgorithmScoreVo asv : algorithmScoreList) {
+            String[] data = new String[]{
+                    asv.getProjectName(), String.valueOf(asv.getSceneNum()), asv.getWeight(), String.valueOf(asv.getScore()), String.valueOf(asv.getScoreRatio())
+            };
+            addDataList(pdfPTable, font, data);
+        }
+        document.add(pdfPTable);
+        // 评价等级(已去掉)
 //            Paragraph levelTableElements = new Paragraph(
 //                    50,
 //                    "评价等级",
@@ -2713,225 +2698,204 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
 //            document.add(pdfPTable1);
 
 
-            // 新的一页,横向显示
-            document.setPageSize(PageSize.A4.rotate());
-            document.newPage();
-
-            // 算法测试评分细则(指标得分列表)
-            Paragraph subListScoreElements = new Paragraph(
-                    50,
-                    "算法测试评分细则",
-                    defaultFont(font));
-            subListScoreElements.setAlignment(Element.ALIGN_CENTER); //居中
-            document.add(subListScoreElements);
-            setBlankLineSpacing(20, font, document);
-            List<Map> subListScoreLiTitle = vo.getSubListScoreLiTitle();
-            int size = subListScoreLiTitle.size();
-            PdfPTable pdfPTable2 = new PdfPTable(size);
-            pdfPTable2.setHeaderRows(1);
-            String[] slt = new String[size];
+        // 新的一页,横向显示
+        document.setPageSize(PageSize.A4.rotate());
+        document.newPage();
+
+        // 算法测试评分细则(指标得分列表)
+        Paragraph subListScoreElements = new Paragraph(
+                50,
+                "算法测试评分细则",
+                defaultFont(font));
+        subListScoreElements.setAlignment(Element.ALIGN_CENTER); //居中
+        document.add(subListScoreElements);
+        setBlankLineSpacing(20, font, document);
+        List<Map> subListScoreLiTitle = vo.getSubListScoreLiTitle();
+        int size = subListScoreLiTitle.size();
+        PdfPTable pdfPTable2 = new PdfPTable(size);
+        pdfPTable2.setHeaderRows(1);
+        String[] slt = new String[size];
+        for (int i = 0; i < size; i++) {
+            slt[i] = subListScoreLiTitle.get(i).get("label").toString();
+        }
+        addTitleList(pdfPTable2, font, slt);
+        List<SubScListVo> subListScoreLi = vo.getSubListScoreLi();
+        List<String[]> list = new ArrayList<>();
+        int fieldNumber = 7;
+        for (SubScListVo slv : subListScoreLi) {
+            String[] slsi = new String[size];
             for (int i = 0; i < size; i++) {
-                slt[i] = subListScoreLiTitle.get(i).get("label").toString();
+                slsi[i] = "";
             }
-            addTitleList(pdfPTable2, font, slt);
-            List<SubScListVo> subListScoreLi = vo.getSubListScoreLi();
-            List<String[]> list = new ArrayList<>();
-            int fieldNumber = 7;
-            for (SubScListVo slv : subListScoreLi) {
-                String[] slsi = new String[size];
-                for (int i = 0; i < size; i++) {
-                    slsi[i] = "";
-                }
-                //目前最多支持到6级指标
-                for (int i = 0; i < size - fieldNumber; i++) {
-                    if (i == 0) {
-                        if (slv.getSublistName1() != null) {
-                            slsi[i] = slv.getSublistName1();
-                        }
-                    } else if (i == 1) {
-                        if (slv.getSublistName2() != null) {
-                            slsi[i] = slv.getSublistName2();
-                        }
-                    } else if (i == 2) {
-                        if (slv.getSublistName3() != null) {
-                            slsi[i] = slv.getSublistName3();
-                        }
-                    } else if (i == 3) {
-                        if (slv.getSublistName4() != null) {
-                            slsi[i] = slv.getSublistName4();
-                        }
-                    } else if (i == 4) {
-                        if (slv.getSublistName5() != null) {
-                            slsi[i] = slv.getSublistName5();
-                        }
-                    } else if (i == 5) {
-                        if (slv.getSublistName6() != null) {
-                            slsi[i] = slv.getSublistName6();
-                        }
+            //目前最多支持到6级指标
+            for (int i = 0; i < size - fieldNumber; i++) {
+                if (i == 0) {
+                    if (slv.getSublistName1() != null) {
+                        slsi[i] = slv.getSublistName1();
+                    }
+                } else if (i == 1) {
+                    if (slv.getSublistName2() != null) {
+                        slsi[i] = slv.getSublistName2();
+                    }
+                } else if (i == 2) {
+                    if (slv.getSublistName3() != null) {
+                        slsi[i] = slv.getSublistName3();
+                    }
+                } else if (i == 3) {
+                    if (slv.getSublistName4() != null) {
+                        slsi[i] = slv.getSublistName4();
+                    }
+                } else if (i == 4) {
+                    if (slv.getSublistName5() != null) {
+                        slsi[i] = slv.getSublistName5();
+                    }
+                } else if (i == 5) {
+                    if (slv.getSublistName6() != null) {
+                        slsi[i] = slv.getSublistName6();
                     }
                 }
-                slsi[size - 7] = slv.getSceneNum();
-                slsi[size - 6] = slv.getErrorSceneNum();
-                slsi[size - 5] = slv.getNotScoredSceneNum();
-                slsi[size - 4] = slv.getNotStandardSceneNum();
-                slsi[size - 3] = slv.getStandardSceneNum();
-                slsi[size - 2] = slv.getLastScore();
-                slsi[size - 1] = slv.getFirstScore();
-
-                list.add(slsi);
-
-//                addDataList(pdfPTable2, font, slsi);
             }
+            slsi[size - 7] = slv.getSceneNum();
+            slsi[size - 6] = slv.getErrorSceneNum();
+            slsi[size - 5] = slv.getNotScoredSceneNum();
+            slsi[size - 4] = slv.getNotStandardSceneNum();
+            slsi[size - 3] = slv.getStandardSceneNum();
+            slsi[size - 2] = slv.getLastScore();
+            slsi[size - 1] = slv.getFirstScore();
 
+            list.add(slsi);
+        }
 
-            Map map = getSubScListCombineCoord(subListScoreLi, size);
-
-            Map<String, Integer> combineCoordList = (Map<String, Integer>) map.get("combineCoordList");
-            List<String> skipCoordList = (List<String>) map.get("skipCoordList");
-
-            for (int i = 0; i < list.size(); i++) {
-                String[] strings = list.get(i);
-                for (int j = 0; j < strings.length; j++) {
-                    String coord = i + "," + j;
 
-                    //是否要跳过
-                    boolean contains = skipCoordList.contains(coord);
-                    if (contains) {
-                        continue;
-                    }
-                    PdfPCell pdfPCell = new PdfPCell(new Paragraph(strings[j], defaultFont(font)));
-
-                    //是否要合并
-                    Integer n = combineCoordList.get(coord);
-                    if (n != null) {
-                        pdfPCell.setRowspan(n);
-                    }
+        Map map = getSubScListCombineCoord(subListScoreLi, size);
 
-                    pdfPTable2.addCell(pdfPCell);
+        Map<String, Integer> combineCoordList = (Map<String, Integer>) map.get("combineCoordList");
+        List<String> skipCoordList = (List<String>) map.get("skipCoordList");
 
+        for (int i = 0; i < list.size(); i++) {
+            String[] strings = list.get(i);
+            for (int j = 0; j < strings.length; j++) {
+                String coord = i + "," + j;
 
+                //是否要跳过
+                boolean contains = skipCoordList.contains(coord);
+                if (contains) {
+                    continue;
+                }
+                PdfPCell pdfPCell = new PdfPCell(new Paragraph(strings[j], defaultFont(font)));
+                //是否要合并
+                Integer n = combineCoordList.get(coord);
+                if (n != null) {
+                    pdfPCell.setRowspan(n);
                 }
+                pdfPTable2.addCell(pdfPCell);
             }
+        }
 
-            document.add(pdfPTable2);
+        document.add(pdfPTable2);
 
             /*
             场景得分列表
              */
-            Paragraph sceneScoreElements = new Paragraph(50, "详细得分情况", defaultFont(font));
-            sceneScoreElements.setAlignment(Element.ALIGN_CENTER); //居中
-            document.add(sceneScoreElements);
+        Paragraph sceneScoreElements = new Paragraph(50, "详细得分情况", defaultFont(font));
+        sceneScoreElements.setAlignment(Element.ALIGN_CENTER); //居中
+        document.add(sceneScoreElements);
 
-            setBlankLineSpacing(20, font, document);
-
-            List<Map> scoreLiTitle = vo.getSceneScoreLiTitle();
-            int size2 = scoreLiTitle.size();
-            PdfPTable pdfPTable3 = new PdfPTable(size2);
-            pdfPTable3.setHeaderRows(1);
-            String[] slt2 = new String[size2];
-            for (int i = 0; i < size2; i++) {
-                slt2[i] = scoreLiTitle.get(i).get("label").toString();
-            }
-            addTitleList(pdfPTable3, font, slt2);
-            List<SceneScListVo> sceneScoreLi = vo.getSceneScoreLi();
+        setBlankLineSpacing(20, font, document);
 
-            List<String[]> list2 = new ArrayList<>();
-
-            for (SceneScListVo sslv : sceneScoreLi) {
-                String[] ssli = new String[size2];
-                for (int i = 0; i < size2; i++) {
-                    ssli[i] = "";
-                }
-                //目前最多支持到6级指标
-                for (int i = 0; i < size2 - 5; i++) {
-                    if (i == 0) {
-                        if (sslv.getSublistName1() != null) {
-                            ssli[i] = sslv.getSublistName1();
-                        }
+        List<Map> scoreLiTitle = vo.getSceneScoreLiTitle();
+        int size2 = scoreLiTitle.size();
+        PdfPTable pdfPTable3 = new PdfPTable(size2);
+        pdfPTable3.setHeaderRows(1);
+        String[] slt2 = new String[size2];
+        for (int i = 0; i < size2; i++) {
+            slt2[i] = scoreLiTitle.get(i).get("label").toString();
+        }
+        addTitleList(pdfPTable3, font, slt2);
+        List<SceneScListVo> sceneScoreLi = vo.getSceneScoreLi();
 
-                    } else if (i == 1) {
-                        if (sslv.getSublistName2() != null) {
-                            ssli[i] = sslv.getSublistName2();
-                        }
+        List<String[]> list2 = new ArrayList<>();
 
-                    } else if (i == 2) {
-                        if (sslv.getSublistName3() != null) {
-                            ssli[i] = sslv.getSublistName3();
-                        }
+        for (SceneScListVo sslv : sceneScoreLi) {
+            String[] ssli = new String[size2];
+            for (int i = 0; i < size2; i++) {
+                ssli[i] = "";
+            }
+            //目前最多支持到6级指标
+            for (int i = 0; i < size2 - 5; i++) {
+                if (i == 0) {
+                    if (sslv.getSublistName1() != null) {
+                        ssli[i] = sslv.getSublistName1();
+                    }
 
-                    } else if (i == 3) {
-                        if (sslv.getSublistName4() != null) {
-                            ssli[i] = sslv.getSublistName4();
-                        }
+                } else if (i == 1) {
+                    if (sslv.getSublistName2() != null) {
+                        ssli[i] = sslv.getSublistName2();
+                    }
 
-                    } else if (i == 4) {
-                        if (sslv.getSublistName5() != null) {
-                            ssli[i] = sslv.getSublistName5();
-                        }
+                } else if (i == 2) {
+                    if (sslv.getSublistName3() != null) {
+                        ssli[i] = sslv.getSublistName3();
+                    }
 
-                    } else if (i == 5) {
-                        if (sslv.getSublistName6() != null) {
-                            ssli[i] = sslv.getSublistName6();
-                        }
+                } else if (i == 3) {
+                    if (sslv.getSublistName4() != null) {
+                        ssli[i] = sslv.getSublistName4();
+                    }
 
+                } else if (i == 4) {
+                    if (sslv.getSublistName5() != null) {
+                        ssli[i] = sslv.getSublistName5();
                     }
-                }
-                ssli[size2 - 5] = sslv.getSceneId();
-                ssli[size2 - 4] = sslv.getSceneIdType();
-                ssli[size2 - 3] = sslv.getSceneScore();
-                ssli[size2 - 2] = sslv.getTargetEvaluate();
-                ssli[size2 - 1] = sslv.getScoreExplain();
 
-                list2.add(ssli);
+                } else if (i == 5) {
+                    if (sslv.getSublistName6() != null) {
+                        ssli[i] = sslv.getSublistName6();
+                    }
 
-//                addDataList(pdfPTable3, font, ssli);
+                }
             }
+            ssli[size2 - 5] = sslv.getSceneId();
+            ssli[size2 - 4] = sslv.getSceneIdType();
+            ssli[size2 - 3] = sslv.getSceneScore();
+            ssli[size2 - 2] = sslv.getTargetEvaluate();
+            ssli[size2 - 1] = sslv.getScoreExplain();
 
-            Map map2 = getSceneScListCombineCoord(sceneScoreLi, size2);
-
-            Map<String, Integer> combineCoordList2 = (Map<String, Integer>) map2.get("combineCoordList");
-            List<String> skipCoordList2 = (List<String>) map2.get("skipCoordList");
+            list2.add(ssli);
 
-            boolean b2 = false;
-            int num2 = 0;
-            for (int i = 0; i < list2.size(); i++) {
-                String[] strings = list2.get(i);
-                for (int j = 0; j < strings.length; j++) {
-                    String coord = i + "," + j;
+//                addDataList(pdfPTable3, font, ssli);
+        }
 
-                    //是否要跳过
-                    boolean contains = skipCoordList2.contains(coord);
-                    if (contains) {
-                        continue;
-                    }
-                    PdfPCell pdfPCell = new PdfPCell(new Paragraph(strings[j], defaultFont(font)));
-                    //是否要合并
-                    Integer n = combineCoordList2.get(coord);
-                    if (n != null) {
-                        pdfPCell.setRowspan(n);
-                    }
+        Map map2 = getSceneScListCombineCoord(sceneScoreLi, size2);
 
-                    pdfPTable3.addCell(pdfPCell);
+        Map<String, Integer> combineCoordList2 = (Map<String, Integer>) map2.get("combineCoordList");
+        List<String> skipCoordList2 = (List<String>) map2.get("skipCoordList");
 
+        boolean b2 = false;
+        int num2 = 0;
+        for (int i = 0; i < list2.size(); i++) {
+            String[] strings = list2.get(i);
+            for (int j = 0; j < strings.length; j++) {
+                String coord = i + "," + j;
 
+                //是否要跳过
+                boolean contains = skipCoordList2.contains(coord);
+                if (contains) {
+                    continue;
+                }
+                PdfPCell pdfPCell = new PdfPCell(new Paragraph(strings[j], defaultFont(font)));
+                //是否要合并
+                Integer n = combineCoordList2.get(coord);
+                if (n != null) {
+                    pdfPCell.setRowspan(n);
                 }
-            }
-
-            document.add(pdfPTable3);
 
+                pdfPTable3.addCell(pdfPCell);
 
-        } catch (Exception e) {
-            e.printStackTrace();
 
-        } finally {
-            document.close();
-            try {
-                os.close();
-            } catch (IOException e) {
-                e.printStackTrace();
             }
         }
-
+        document.add(pdfPTable3);
     }