From 1f35c75edfde8d204e788f304929b1fb01ddb765 Mon Sep 17 00:00:00 2001 From: zhijie <1003392067@qq.com> Date: 星期日, 08 八月 2021 21:13:35 +0800 Subject: [PATCH] 1.PAQ简易版(中英泰)支持 2.支持完美水滴生成 --- src/main/java/com/ots/common/utils/poi/WordUtil.java | 148 +++++++++++++++++++++++++++++++------------------ 1 files changed, 93 insertions(+), 55 deletions(-) diff --git a/src/main/java/com/ots/common/utils/poi/WordUtil.java b/src/main/java/com/ots/common/utils/poi/WordUtil.java index 368610e..2f7182f 100644 --- a/src/main/java/com/ots/common/utils/poi/WordUtil.java +++ b/src/main/java/com/ots/common/utils/poi/WordUtil.java @@ -9,6 +9,7 @@ import com.ots.project.exam.domain.TReportTemplate; import com.ots.project.exam.dto.JAQTableStyle; import com.ots.project.exam.dto.WordParam; +import com.ots.project.tool.PdfUtil; import com.ots.project.tool.ShellTool; import com.ots.project.tool.exam.ExamUtil; import com.ots.project.tool.exam.ImageUtil; @@ -17,6 +18,8 @@ import com.ots.project.tool.report.JAQ.condition.Table2; import com.ots.project.tool.report.JAQ.condition.Table3; import com.ots.project.tool.report.JAQ.condition.Table4; +import com.ots.project.tool.report.PAQ.chart.PAQChart; +import com.ots.project.tool.report.SAQ.chart.SAQChart; import org.apache.commons.collections.map.HashedMap; import org.apache.poi.ooxml.POIXMLDocument; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; @@ -40,6 +43,8 @@ import java.awt.image.BufferedImage; import java.io.*; import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class WordUtil { private static final Logger log = LoggerFactory.getLogger(WordUtil.class); @@ -177,6 +182,9 @@ if (run.toString().indexOf("%TTime%") != -1) { run.setText(textMap.get("reportGenerationDate").toString(), 0); } + if (run.toString().indexOf("%LIBSAQGS0018%") != -1) { + run.setText(textMap.get("LIBSAQGS0018").toString(), 0); + } } } } @@ -254,7 +262,7 @@ public static CTAnchor getAnchorWithGraphic(CTGraphicalObject ctGraphicalObject, String deskFileName, int width, int height, int leftOffset, int topOffset, boolean behind, int topPosition) { - long relativeHeight = 251649024l + topPosition; + long relativeHeight = 251649024L + topPosition; String anchorXML = "<wp:anchor xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\" " + "simplePos=\"0\" relativeHeight=\"" + relativeHeight + "\" behindDoc=\"" + ((behind) ? 1 : 0) + "\" locked=\"0\" layoutInCell=\"1\" allowOverlap=\"1\">" @@ -369,17 +377,19 @@ List<XWPFTableCell> cells = row.getTableCells(); for (XWPFTableCell cell : cells) { - + //濡傛灉褰撳墠琛ㄦ牸鍖呭惈%灏变唬琛ㄩ渶瑕佹浛鎹� if (checkText(cell.getText())) { List<XWPFParagraph> paragraphs = cell.getParagraphs(); for (XWPFParagraph paragraph : paragraphs) { - + //鑾峰彇鎵�鏈夎 List<IRunElement> iRunElements = paragraph.getIRuns(); List<XWPFRun> runs = new ArrayList<>(); + //閬嶅巻鎵�鏈夎 for (IRunElement iRunElement : iRunElements) { runs.add((XWPFRun) iRunElement); } int runPosition = 0; + //鏇挎崲鎵�鏈夎〃鏍肩殑鏂囧瓧 for (XWPFRun run : runs) { setTextValue(textMap, document, paragraph, runPosition, run); } @@ -389,7 +399,7 @@ } } private static void setTextValue(Map<String, Object> textMap, XWPFDocument document, XWPFParagraph paragraph, int runPosition, XWPFRun run) { - System.out.println("琛ㄦ牸鐨勶細" + run.toString()); + log.info("琛ㄦ牸鐨勶細{}", run.toString()); try { run.setText(changeValue(run.toString(), textMap, run, paragraph, document, runPosition), 0); } catch (Exception e) { @@ -419,16 +429,34 @@ } } } - + + //鏍¢獙鏂囨湰鏄惁闇�瑕佹浛鎹� public static boolean checkText(String text) { + //鏇挎崲鏂囨湰鍖呭惈% if (text.indexOf("%") != -1 || StringUtils.equals(text, "N/A NONE")) { - return true; + //鍙湁%澶т簬1 鎵嶉�氳繃 + if(getCount(text) > 1){ + return true; + } + return false; } return false; } + + //鍒ゆ柇%鍑虹幇鐨勬鏁� + public static int getCount(String text){ + //鏃ч暱搴� + int oldLength = text.length(); + text = text.replace("%", ""); + //鏂伴暱搴� + int newLength = text.length(); + //鍑虹幇娆℃暟 = 鏃ч暱搴� - 鏂伴暱搴� + int count = oldLength - newLength; + return count; + } public static String changeValue(String runValue, Map<String, Object> textMap, XWPFRun run, XWPFParagraph paragraph, XWPFDocument document, int runPosition) throws IOException, org.apache.poi.openxml4j.exceptions.InvalidFormatException { - + log.debug("changeText:{}",runValue); Set<Map.Entry<String, Object>> textSets = textMap.entrySet(); for (Map.Entry<String, Object> textSet : textSets) { @@ -446,7 +474,11 @@ if (runValue.indexOf("<BoldText>") != -1) { return setOtherStyle(runValue, paragraph, runPosition, run); } - break; + //鏈変簺琛ㄦ牸鍙兘瀛樺湪澶氫釜瀛楀吀 闇�鏇挎崲澶氭涓嶈兘杞绘槗break + //娌℃湁鍙浛鎹㈠唴瀹圭洿鎺reak + if(getTextSize(runValue) == 0){ + break; + } } } @@ -592,38 +624,6 @@ } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - private static void changOtherPicture(XWPFParagraph paragraph) { String paragraphText = paragraph.getText(); @@ -753,7 +753,12 @@ setChageWord(fileName, out, textMap, tReportTemplate.getReportType(), templateType, autoTableMap); out.flush(); changColorIfJAQ(textMap, out, reportName, tReportTemplate.getReportType()); - ShellTool.execLibreofficeCommand("pdf", EssConfig.getProfile() + "/" + reportName, EssConfig.getProfile() + "/"); + //PAQ閲囩敤鏂扮殑doc杞琾df + if(!ReportTypeEnum.PAQ.getCode().equals(reportType)){ + ShellTool.execLibreofficeCommand("pdf", EssConfig.getProfile() + "/" + reportName, EssConfig.getProfile() + "/"); + }else{ + PdfUtil.convertPDF(EssConfig.getProfile() + "/" + reportName); + } zipFilePath = getPdfPath(reportName); deleteFileStrList.add(EssConfig.getProfile() + "/" + reportName); @@ -835,18 +840,26 @@ String filePath = getTemplateDownLoadPathByUpLoad(fileName); XWPFDocument document = new XWPFDocument(POIXMLDocument.openPackage(getTemplateDownLoadPathByUpLoad(fileName))); - + + //璁剧疆鏂囨湰 changeText(document, textMap); - if (Objects.equals(reportType, ReportTypeEnum.MAQV2.getCode())) { - changeTextBox(document, textMap); + //璁剧疆鏂囨湰妗� + changeTextBox(document, textMap); + + //璁剧疆鍥捐〃 + if (Objects.equals(reportType, ReportTypeEnum.PAQ.getCode())) { + PAQChart.changeChart(document, textMap); } - + + //鎻掑叆琛ㄦ牸 addTableValue(document, autoTableMap); - + + //鏇存敼琛ㄦ牸鐨勫�� changeTable(document, textMap); - - changChar(textMap, document, reportType, templateType); + + //璁剧疆鍥捐〃鎺т欢 + //changChar(textMap, document, reportType, templateType); document.write(out); } private static void changeTextBox(XWPFDocument document, Map<String, Object> textMap) throws DocumentException { @@ -874,6 +887,7 @@ } } private static String getValByKey(String text, Map<String, Object> textMap) { + log.debug("changeTextBox:{}",text); if (!checkText(text)) { return text; } @@ -929,6 +943,14 @@ document.write(out); out.flush(); } + + /** + * 璁剧疆鍥炬爣鎺т欢 + * @param textMap + * @param document + * @param reportType + * @param templateType + */ private static void changChar(Map<String, Object> textMap, XWPFDocument document, String reportType, String templateType) { if (StringUtils.isEmpty(reportType) || StringUtils.isEmpty(templateType)) { return; @@ -937,20 +959,19 @@ if (ExamUtil.isListEmpty(charts)) { return; } - if (StringUtils.equals(reportType, "MAQ")) { - + if (StringUtils.equals(reportType, ReportTypeEnum.MAQ.getCode())) { setMAQCompleteChars(textMap, charts); } else if (StringUtils.equals(reportType, ReportTypeEnum.MAQV2.getCode())) { setMAQ_V2CompleteChars(textMap, charts); - } else if (StringUtils.equals(reportType, "RuiLin")) { + } else if (StringUtils.equals(reportType, ReportTypeEnum.RuiLin.getCode())) { setRuiLinChar(textMap, charts); } else { return; } } private static void setMAQ_V2CompleteChars(Map<String, Object> textMap, List<XWPFChart> charts) { - String p_People32 = textMap.get("P_Task31").toString(); - String p_Task31 = textMap.get("P_People32").toString(); + String p_Task31 = textMap.get("P_Task31").toString(); + String p_People32 = textMap.get("P_People32").toString(); String P_INCON25 = textMap.get("P_INCON25").toString(); String P_IM24 = textMap.get("P_IM24").toString(); String P_SDE23 = textMap.get("P_SDE23").toString(); @@ -981,8 +1002,8 @@ List<CTBarSer> serList = ctBarChart.getSerList(); CTBarSer ctBarSer = serList.get(0); CTNumDataSource val = ctBarSer.getVal(); - val.getNumRef().getNumCache().getPtList().get(0).setV(p_Task31); - val.getNumRef().getNumCache().getPtList().get(1).setV(p_People32); + val.getNumRef().getNumCache().getPtList().get(0).setV(p_People32); + val.getNumRef().getNumCache().getPtList().get(1).setV(p_Task31); } } catch (Exception e) { e.printStackTrace(); @@ -1259,4 +1280,21 @@ textMap.put("JAQTableStyle", jaqTableStyleList); } } + + public static int getTextSize(String runValue){ + Pattern pattern = Pattern.compile("%\\w+%"); + Matcher matcher = pattern.matcher(runValue); + List<String> result = new ArrayList<>(); + while(matcher.find()){ + result.add(matcher.group()); + } + return result.size(); + } + + + public static void main(String[] args) { + if (!checkText("浜烘墠閫夋嫈鐨勭洰鐨勫氨鏄壘鍒拌兘澶熻儨浠诲伐浣溿�佹効鎰忔壙鎷呭伐浣滐紝涓斾笌缁勭粐鐨勯渶姹傘�佹枃鍖栥�佷环鍊艰鐩稿尮閰嶇殑浜恒�侾AQ鎶ュ憡鏄牴鎹�欓�変汉瀵筆AQ闂嵎涓鐩殑浣滅瓟淇℃伅鑰岀敓鎴愮殑锛屾祴閲忕殑鏄�欓�変汉鍦ㄥ伐浣滀腑鍋忓ソ鐨勮涓洪鏍笺�侾AQ涔熷寘鎷簡瀵逛綔绛旂湡瀹炴�х殑娴嬮噺锛屽悓鏃朵篃瑁呭叆浜員AI涓撴湁鐨勪綔鍋囬槻鑼冪▼搴忥紝鍙互鏈夋晥闄嶄綆鍊欓�変汉鐨勪吉瑁呭ソ鍊惧悜锛堝叏鐞�30%鐨勮嚜璇勯棶鍗蜂腑閮藉嚭鐜颁簡浼濂界幇璞★級銆�")) { + System.out.println("11"); + } + } } -- Gitblit v1.9.1