[测评系统]--测评系统核心代码库
wzp
2024-01-31 ad58ba3d20b080ef113cbd196000028f83308bb3
src/main/java/com/ots/common/utils/poi/WordUtil.java
@@ -17,11 +17,16 @@
import com.ots.project.tool.exam.ExamUtil;
import com.ots.project.tool.exam.ImageUtil;
import com.ots.project.tool.exam.ZipUtil;
import com.ots.project.tool.libreoffice.LibreOfficeUtil;
import com.ots.project.tool.report.APIFan.chart.APIFanChart;
import com.ots.project.tool.report.CIAQ.chart.CIAQChart;
import com.ots.project.tool.report.LAQ.chart.LAQChart;
import com.ots.project.tool.report.MAQTR.chart.MAQTRChart;
import com.ots.project.tool.report.PAQ.chart.PAQChart;
import org.apache.commons.collections.map.HashedMap;
import org.apache.poi.ooxml.POIXMLDocument;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.util.ZipSecureFile;
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.*;
import org.apache.xmlbeans.XmlCursor;
@@ -407,6 +412,9 @@
            if(tableEnum == TableEnum.table4){
                if(tableNum != null && tableNum != 8){
                    for (int i = tableNum; i <= tableNum + 4; i++) {
                        if(i+2 > table.getRows().size()){
                            continue;
                        }
                        XWPFTableRow row = table.getRows().get(i+2);
                        List<XWPFTableCell> cells = row.getTableCells();
                        changeText(cells.get(0).getParagraphs().get(0),"#"+(i+1)+".");
@@ -899,9 +907,8 @@
        if (checkText(runValue)) {
            runValue = runValue.replaceAll("%.*%", "");
            runValue = runValue.replaceAll("N/A NONE", "");
        }
        runValue = runValue.replaceAll("N/A NONE", "");
        return runValue;
    }
@@ -1119,7 +1126,7 @@
            if(StringUtils.contains(keyValue, "%table-line-feed%")){
                String[] keyValues = keyValue.split("%table-line-feed%");
                runValue = delDynList(keyTemp, Arrays.asList(keyValues), paragraph, document,1);
            }else{
            }else if(StringUtils.contains(keyValue, "%line-feed%")){
                String[] keyValues = keyValue.split("%line-feed%");
                runValue = delDynList(keyTemp, Arrays.asList(keyValues), paragraph, document,0);
            }
@@ -1164,21 +1171,30 @@
            reportType = getTypeIfIsSAQ(tReportTemplate, reportType);
            reportType = getPositionIfJAQ(textMap, reportType);
            reportName = textMap.get("sendEmailFileName") + "_" + reportType + "_" + ReportTypeNameEnum.valueOf(tReportTemplate.getTemplateType()).getCode() + "_" + ReportTypeNameEnum.valueOf(tReportTemplate.getLangType()).getCode() + ".docx";
            reportName = reportName.replaceAll(" ", "_");
            out = getDownLoadFileOutputStream(reportName);
            log.info("reportTemplate:" + fileName);
            //String templateType = tReportTemplate.getTemplateType();
            setChageWord(fileName, out, textMap, tReportTemplate.getReportType(),tReportTemplate.getDataPath(), autoTableMap);
            out.flush();
            changColorIfJAQ(textMap, out, reportName, tReportTemplate.getReportType());
            //PAQ、MAQTR采用新的doc转pdf
            if(ReportTypeEnum.PAQ.getCode().equals(reportType) || ReportTypeEnum.MAQTR.getCode().equals(reportType)){
            //模板文件需要加锁
            out = getDownLoadFileOutputStream(reportName);
            //synchronized (fileName.intern()){
                //String templateType = tReportTemplate.getTemplateType();
                setChageWord(fileName, out, textMap, tReportTemplate.getReportType(),tReportTemplate.getDataPath(), autoTableMap);
                out.flush();
                changColorIfJAQ(textMap, out, reportName, tReportTemplate.getReportType());
            //}
            //PAQ、MAQTR采用、CIAQ、APIFan新的doc转pdf
            if(ReportTypeEnum.PAQ.getCode().equals(reportType) || ReportTypeEnum.MAQTR.getCode().equals(reportType)
                    || ReportTypeEnum.CIAQ.getCode().equals(reportType) ||ReportTypeEnum.APIFan.getCode().equals(reportType)){
                PdfUtil.convertPDF(EssConfig.getProfile() + "/" + reportName);
            }else if(ReportTypeEnum.LAQ.getCode().equals(reportType)){
                PdfUtil.dockerConvertPDF(EssConfig.getProfile(),EssConfig.getDocx2pdfPath(),reportName);
            }else{
                ShellTool.execLibreofficeCommand("pdf", EssConfig.getProfile() + "/" + reportName, EssConfig.getProfile() + "/");
                // ShellTool shellTool = ShellTool.builder();
                // shellTool.execNewLibreofficeCommand("pdf", EssConfig.getProfile() + "/" + reportName, EssConfig.getProfile() + "/" + reportName.replace("docx","pdf"));
                //新方法测试
                //LibreOfficeUtil.convertOffice2PDFSyncIsSuccess(new File(EssConfig.getProfile() + "/" + reportName),new File(EssConfig.getProfile() + "/" + reportName.replace("docx","pdf")));
            }
            zipFilePath = getPdfPath(reportName);
@@ -1271,14 +1287,31 @@
     */
    private static void setChageWord(String fileName, OutputStream out, Map<String, Object> textMap, String reportType,String dataPath, Map<Integer, Map<Integer, List<String[]>>> autoTableMap) throws IOException, InvalidFormatException, DocumentException {
        //String filePath = getTemplateDownLoadPathByUpLoad(fileName);
        ZipSecureFile.setMinInflateRatio(0.001);
        XWPFDocument document = new XWPFDocument(POIXMLDocument.openPackage(getTemplateDownLoadPathByUpLoad(fileName)));
        //设置文本
        changeText(document, textMap);
        if (StringUtils.equals(reportType, ReportTypeEnum.JAQ.getCode())) {
            //设置文本框
            changeTextBox(document, textMap);
        //设置文本框
        changeTextBox(document, textMap);
            //设置文本
            changeText(document, textMap);
        }else {
            //设置文本
            changeText(document, textMap);
            //设置文本框
            changeTextBox(document, textMap);
        }
//        //设置文本框
//        changeTextBox(document, textMap);
//
//        //设置文本
//        changeText(document, textMap);
        //插入表格
        addTableValue(document, autoTableMap);
@@ -1325,7 +1358,7 @@
            String key = "%" + textSet.getKey() + "%";
            if (text.indexOf(key) != -1) {
                text = text.replaceAll(key, (String) textMap.get(textSet.getKey()));
                text = text.replaceAll(key, String.valueOf(textMap.get(textSet.getKey())));
                repText = text;
                if (checkText(text)) {
                    continue;
@@ -1338,9 +1371,9 @@
            repText = repText.replaceAll("<BoldText>", "");
            repText = repText.replaceAll("</BoldText>", "");
        }
        if (repText.indexOf("N/A NONE") != -1) {
/*        if (repText.indexOf("N/A NONE") != -1) {
            repText = repText.replaceAll("N/A NONE", "");
        }
        }*/
        return repText;
    }
    public static void changTableColor(String fileName, OutputStream out, List<JAQTableStyle> jaqTableStyleList) throws IOException {
@@ -1387,19 +1420,32 @@
        if (ExamUtil.isListEmpty(charts)) {
            return;
        }
        if (StringUtils.equals(reportType, ReportTypeEnum.MAQ.getCode())) {
            setMAQCompleteChars(textMap, charts);
        } else if (StringUtils.equals(reportType, ReportTypeEnum.MAQV2.getCode()) || StringUtils.equals(reportType, ReportTypeEnum.MAQIAR.getCode())) {
            setMAQ_V2CompleteChars(textMap, charts);
        } else if (StringUtils.equals(reportType, ReportTypeEnum.RuiLin.getCode())) {
            setRuiLinChar(textMap, charts);
        } else if (StringUtils.equals(reportType, ReportTypeEnum.PAQ.getCode())) {
            PAQChart.changeChart(document, textMap);
        } else if (StringUtils.equals(reportType, ReportTypeEnum.MAQTR.getCode())) {
            MAQTRChart.changeMAQTRChart(document, dataPath);
        } else {
            return;
        try{
            if (StringUtils.equals(reportType, ReportTypeEnum.MAQ.getCode())) {
                setMAQCompleteChars(textMap, charts);
            } else if (StringUtils.equals(reportType, ReportTypeEnum.MAQV2.getCode()) || StringUtils.equals(reportType, ReportTypeEnum.MAQIAR.getCode())) {
                setMAQ_V2CompleteChars(textMap, charts);
            } else if (StringUtils.equals(reportType, ReportTypeEnum.RuiLin.getCode())) {
                setRuiLinChar(textMap, charts);
            } else if (StringUtils.equals(reportType, ReportTypeEnum.PAQ.getCode())) {
                PAQChart.changeChart(document, textMap);
            } else if (StringUtils.equals(reportType, ReportTypeEnum.MAQTR.getCode())) {
                MAQTRChart.changeMAQTRChart(document, dataPath);
            } else if (StringUtils.equals(reportType, ReportTypeEnum.CIAQ.getCode())) {
                CIAQChart.changeChart(document, textMap);
            } else if (StringUtils.equals(reportType, ReportTypeEnum.LAQ.getCode())) {
                LAQChart.changeChart(document, textMap);
            } else if(StringUtils.equals(reportType, ReportTypeEnum.APIFan.getCode()))
            {
                APIFanChart.changeChart(document,textMap);
            }
            else {
                return;
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    private static void setMAQ_V2CompleteChars(Map<String, Object> textMap, List<XWPFChart> charts) {
        String p_Task31 = textMap.get("P_Task31").toString();
@@ -1773,7 +1819,15 @@
            //更改表格的值
            textMap.put("sendEmailFileName", "JAQ");
            textMap.put("SelectUsers",8);
            //changeTable(document, textMap);
            changeText(document, textMap);
            changeTextBox(document, textMap);
            addTableValue(document, null);
            changeTable(document, textMap);
            //changChart(textMap, document, reportType, dataPath);
            //建立文件对象
            File file = new File("C:\\Users\\Administrator\\Desktop\\JAQ中文版1.docx");