From a2cfd417f673603633c6d46713d320bb1501f88c Mon Sep 17 00:00:00 2001 From: 许鹏程 <1821349743@qq.com> Date: 星期二, 08 八月 2023 16:03:30 +0800 Subject: [PATCH] xn commit --- src/main/java/com/product/print/util/DynamicTableRenderPolicy.java | 204 +++++++++++++++++++-------------------------------- 1 files changed, 76 insertions(+), 128 deletions(-) diff --git a/src/main/java/com/product/print/util/DynamicTableRenderPolicy.java b/src/main/java/com/product/print/util/DynamicTableRenderPolicy.java index 731c237..daa0044 100644 --- a/src/main/java/com/product/print/util/DynamicTableRenderPolicy.java +++ b/src/main/java/com/product/print/util/DynamicTableRenderPolicy.java @@ -1,8 +1,10 @@ package com.product.print.util; -import cn.hutool.core.io.IoUtil; +import cn.hutool.core.collection.CollectionUtil; import com.deepoove.poi.exception.RenderException; import com.deepoove.poi.render.RenderContext; +import com.deepoove.poi.template.ElementTemplate; +import com.deepoove.poi.template.MetaTemplate; import com.deepoove.poi.template.run.RunTemplate; import com.deepoove.poi.util.TableTools; import com.product.common.lang.StringUtils; @@ -11,18 +13,11 @@ import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.util.Units; import org.apache.poi.xwpf.usermodel.*; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalAlignRun; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.Base64; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -37,12 +32,14 @@ private final String indexKey = "~index~"; - public DynamicTableRenderPolicy(String replaceKey) { + public DynamicTableRenderPolicy(String replaceKey) { this.replaceKey = replaceKey; } - private XWPFRun run; + private List<MetaTemplate> metaTemplateList; + + @Override public void doRender(RenderContext<Object> context) throws Exception { @@ -55,8 +52,13 @@ } XWPFTableCell cell = (XWPFTableCell) ((XWPFParagraph) run.getParent()).getBody(); XWPFTable table = cell.getTableRow().getTable(); + this.metaTemplateList = context.getTemplate().getElementTemplates(); + ElementTemplate eleTemplate = context.getEleTemplate(); + int index = metaTemplateList.indexOf(eleTemplate); + this.metaTemplateList = metaTemplateList.subList(index + 1, metaTemplateList.size()); render(table, context.getData()); } catch (Exception e) { + e.printStackTrace(); throw new RenderException("Dynamic render table error:" + e.getMessage(), e); } } @@ -124,133 +126,79 @@ } fieldNames[i] = replaceKey; } - //鑾峰彇fieldRow鎵�鍦ㄧ殑涓嬫爣 - int fieldRowIndex = xwpfTable.getRows().indexOf(fieldRow); - for (int i = 0; i < subTableData.size(); i++) { - Map<String, Object> map = subTableData.get(i); - //鍒涘缓涓�琛屽湪fieldRowIndex涓嬮潰 - XWPFTableRow row = xwpfTable.insertNewTableRow(fieldRowIndex + 1 + i); - copyTableRow(row, fieldRow); - //璁剧疆row鐨勫睘鎬т笌fieldRow涓�鑷� - row.setHeight(fieldRow.getHeight()); - //閬嶅巻瀛楁姣忎釜瀛楁鍒涘缓涓�涓崟鍏冩牸 - for (int j = 0; j < fieldNames.length; j++) { - //褰撳墠鍗曞厓鏍� - XWPFTableCell cell; - //鍒ゆ柇row涓j涓崟鍏冩牸鏄惁瀛樺湪 - if (row.getTableCells().size() > j) { - cell = row.getCell(j); + if (subTableData != null && subTableData.size() > 0) { + for (int i = 0; i < subTableData.size(); i++) { + Map<String, Object> map = subTableData.get(i); + XWPFTableRow row; + if (i == 0) { + row = fieldRow; } else { - cell = row.createCell(); + //鍒涘缓涓�琛屽湪fieldRowIndex涓嬮潰 + row = xwpfTable.insertNewTableRow(xwpfTable.getRows().size()); + PrintPoiUtil.copyTableRow(row, fieldRow); } - //璁剧疆鍗曞厓鏍肩殑鍊间粠map涓彇鍑� - //鍒ゆ柇鏄惁鏄簭鍙峰垪 - if (indexKey.equals(fieldNames[j])) { - cell.setText(String.valueOf(i + 1)); - continue; - } - Object value = map.get(fieldNames[j]); - if (value == null) { - value = ""; - } - String text = cell.getText(); - //鍒犻櫎鍗曞厓鏍间腑鐨勬棫鍐呭 - if (!StringUtils.isEmpty(text)) { - List<XWPFParagraph> paragraphs = cell.getParagraphs(); - if (paragraphs.size() > 1) { - cell.removeParagraph(1); - } - List<XWPFRun> runs = paragraphs.get(0).getRuns(); - //娓呯┖鏂囧瓧 - for (int k = 0; k < runs.size(); k++) { - runs.get(k).setText("", 0); - } - } - cell.setText(value.toString()); - if ("lx_flow_opinion".equals(this.replaceKey) && "opinion".equals(fieldNames[j]) && !StringUtils.isEmpty(map.get("sign_attachment_uuid"))) { - //鎰忚妗� 鎻掑叆绛惧悕鍥剧墖鍒板崟鍏冩牸鍙充笅瑙掍綅缃� + //閬嶅巻瀛楁姣忎釜瀛楁鍒涘缓涓�涓崟鍏冩牸 + for (int j = 0; j < fieldNames.length; j++) { + //褰撳墠鍗曞厓鏍� + XWPFTableCell cell = row.getCell(j); + //娓呯┖鍗曞厓鏍煎唴瀹� XWPFParagraph xwpfParagraph = cell.addParagraph(); - xwpfParagraph.setAlignment(ParagraphAlignment.RIGHT); - XWPFRun run = xwpfParagraph.createRun(); - String signAttachmentBase64 = map.get("sign_attachment_uuid").toString(); - //灏哹ase64杞崲瀛楄妭娴� - byte[] bytes = Base64.getDecoder().decode(signAttachmentBase64.split(",")[1]); - //灏嗗瓧鑺傛祦杞崲涓鸿緭鍏ユ祦 - InputStream inputStream = new ByteArrayInputStream(bytes); - try { - //鎹㈣鎻掑叆鍥剧墖 - run.addPicture(inputStream, XWPFDocument.PICTURE_TYPE_PNG, "sign.png", Units.toEMU(50), Units.toEMU(20)); - inputStream.close(); - } catch (InvalidFormatException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); + int index = cell.getParagraphs().indexOf(xwpfParagraph); + PrintPoiUtil.copyParagraph(xwpfParagraph, cell.getParagraphs().get(0)); + //鍒犻櫎鎵�鏈夌殑run + for (int k = xwpfParagraph.getRuns().size() - 1; k >= 0; k--) { + xwpfParagraph.removeRun(k); } - } + XWPFRun xwpfRun = xwpfParagraph.createRun(); + PrintPoiUtil.copyRun(xwpfRun, cell.getParagraphs().get(0).getRuns().get(0)); + //鍒犻櫎cell涓殑娈佃惤浣嗘帓闄ゆ柊澧炵殑娈佃惤 + for (int k = cell.getParagraphs().size() - 1; k >= 0; k--) { + if (k < index) { + cell.removeParagraph(k); + } + } + //鍒ゆ柇鏄惁鏄簭鍙峰垪 + if (indexKey.equals(fieldNames[j])) { + cell.setText(String.valueOf(i + 1)); + continue; + } + Object value = map.get(fieldNames[j]); + if (value == null) { + value = ""; + } + xwpfRun.setText(value.toString(), 0); + if ("lx_flow_opinion".equals(this.replaceKey) && "opinion".equals(fieldNames[j]) && !StringUtils.isEmpty(map.get("sign_attachment_uuid"))) { + //鎰忚妗� 鎻掑叆绛惧悕鍥剧墖鍒板崟鍏冩牸鍙充笅瑙掍綅缃� + xwpfParagraph = cell.addParagraph(); + xwpfParagraph.setAlignment(ParagraphAlignment.RIGHT); + XWPFRun run = xwpfParagraph.createRun(); + String signAttachmentBase64 = map.get("sign_attachment_uuid").toString(); + //灏哹ase64杞崲瀛楄妭娴� + byte[] bytes = Base64.getDecoder().decode(signAttachmentBase64.split(",")[1]); + //灏嗗瓧鑺傛祦杞崲涓鸿緭鍏ユ祦 + InputStream inputStream = new ByteArrayInputStream(bytes); + try { + //鎹㈣鎻掑叆鍥剧墖 + run.addPicture(inputStream, XWPFDocument.PICTURE_TYPE_PNG, "sign.png", Units.toEMU(50), Units.toEMU(20)); + inputStream.close(); + } catch (InvalidFormatException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } } + } else { + +// 鍒犻櫎fieldRow + int index = xwpfTable.getRows().indexOf(fieldRow); + xwpfTable.removeRow(index); } //鍒犻櫎璧峰琛� xwpfTable.removeRow(startRowIndex); - //鍒犻櫎fieldRow - xwpfTable.removeRow(fieldRowIndex - 1); - -// //璇诲彇瀹屾瘯鍚庡垹闄ゆ渶鍚庝竴琛� -// xwpfTable.removeRow(rows.size() - 1); - //鑾峰彇鎵�鏈夌殑琛屽垽鏂崟鍏冩牸鏄惁鏈夊�兼病鏈夊氨鍒犻櫎璇ヨ -// List<XWPFTableRow> tableRows = xwpfTable.getRows(); -// List<XWPFTableRow> deleteRows = new ArrayList<>(); -// for (int i = 0; i < tableRows.size(); i++) { -// XWPFTableRow row = tableRows.get(i); -// boolean flag = false; -// for (int j = 0; j < row.getTableCells().size(); j++) { -// XWPFTableCell cell = row.getTableCells().get(j); -// if (StringUtils.isNotEmpty(cell.getText())) { -// flag = true; -// break; -// } -// } -// if (!flag) { -// deleteRows.add(row); -// } -// } -// //閬嶅巻瑕佸垹闄ょ殑琛岃幏鍙栨墍鍦ㄧ殑涓嬫爣杩涜鍒犻櫎 -// for (int i = 0; i < deleteRows.size(); i++) { -// XWPFTableRow row = deleteRows.get(i); -// int index = xwpfTable.getRows().indexOf(row); -// xwpfTable.removeRow(index); -// } -// //閬嶅巻鏁版嵁闆嗗悎锛屾瘡涓猰ap瀵瑰簲涓�琛屾暟鎹� -// for (int i = 0; i < subTableData.size(); i++) { -// Map<String, Object> map = subTableData.get(i); -// //鍒涘缓涓�琛� -// XWPFTableRow row = xwpfTable.createRow(); -// //閬嶅巻瀛楁姣忎釜瀛楁鍒涘缓涓�涓崟鍏冩牸 -// for (int j = 0; j < fieldNames.length; j++) { -// //褰撳墠鍗曞厓鏍� -// XWPFTableCell cell; -// //鍒ゆ柇row涓j涓崟鍏冩牸鏄惁瀛樺湪 -// if (row.getTableCells().size() > j) { -// cell = row.getTableCells().get(j); -// } else { -// cell = row.createCell(); -// } -// //璁剧疆鍗曞厓鏍肩殑鍊间粠map涓彇鍑� -// //鍒ゆ柇鏄惁鏄簭鍙峰垪 -// if (indexKey.equals(fieldNames[j])) { -// cell.setText(String.valueOf(i + 1)); -// continue; -// } -// Object value = map.get(fieldNames[j]); -// if (value == null) { -// value = ""; -// } -// //璁剧疆鍗曞厓鏍肩殑鍊� -// cell.setText(value.toString()); -// } -// } - } /** -- Gitblit v1.9.2