diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java index 4078c88..85df50d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java @@ -8,6 +8,7 @@ import com.casic.missiles.dto.business.certificate.ElectronicImage; import com.casic.missiles.dto.business.file.CropPicture; import com.casic.missiles.dto.business.file.FilePrintRegister; +import com.casic.missiles.service.listeners.util.ParseWord07; import com.spire.doc.*; import com.spire.doc.documents.*; import com.spire.doc.fields.DocPicture; @@ -86,48 +87,12 @@ addAbsolutePathStamp(wordOldUrl, wordNewUrl, absolutePathImage); } //由于合成word总页数存在不准确,先转换为pdf进行获取合成证书总页数, 处理齐缝章 - } // 4、将新word转化为pdf文件 wordToPdf(wordNewUrl, pdfNewUrl); return pdfNewUrl; } - /** - * 按照模板 填充数据生成word 只支持docx - * - * @param templatePath 模板文件路径 - * @param temDir 生成文件的目录 - * @param fileName 生成文件名 - * @param params 参数 - */ - public static String exportWord(String templatePath, String temDir, String fileName, Map params) { - Assert.notNull(templatePath, "模板路径不能为空"); - Assert.notNull(temDir, "临时文件路径不能为空"); - Assert.notNull(fileName, "导出文件名不能为空"); - if (fileName.endsWith(".doc")) { - docToDocx(templatePath, templatePath + "x"); - templatePath += "x"; - } - Assert.isTrue(fileName.endsWith(".docx"), "word导出请使用docx格式"); - File dir = new File(temDir); - if (!dir.getParentFile().exists()) { - // 新建文件夹 - dir.getParentFile().mkdirs(); - } - String tmpPath = ""; - try { - XWPFDocument doc = WordExportUtil.exportWord07(templatePath, params); - tmpPath = temDir + fileName; - FileOutputStream fos = new FileOutputStream(tmpPath); - doc.write(fos); - fos.flush(); - fos.close(); - } catch (Exception e) { - e.printStackTrace(); - } - return tmpPath; - } /** * 将相同关键字的印章添加到同一个位置进行打印 @@ -140,6 +105,9 @@ */ private static void addSameKeyWordStamp(String wordOldUrl, String wordNewUrl, List electronicSealList) throws RuntimeException { + if (CollectionUtils.isEmpty(electronicSealList)) { + return; + } // 加载文档 Document document = new Document(); document.loadFromFile(wordOldUrl); @@ -151,7 +119,7 @@ throw new RuntimeException("image url is empty or key word not exist in the word template ..."); } //多处关键字添加同一个签章 - for(int keyWordIndex=0;keyWordIndex params) { + Assert.notNull(templatePath, "模板路径不能为空"); + Assert.notNull(temDir, "临时文件路径不能为空"); + Assert.notNull(fileName, "导出文件名不能为空"); + if (fileName.endsWith(".doc")) { + docToDocx(templatePath, templatePath + "x"); + templatePath += "x"; + } + Assert.isTrue(fileName.endsWith(".docx"), "word导出请使用docx格式"); + File dir = new File(temDir); + if (!dir.getParentFile().exists()) { + // 新建文件夹 + dir.getParentFile().mkdirs(); + } + String tmpPath = ""; + try { + ParseWord07 parseWord07=new ParseWord07(); + XWPFDocument doc = parseWord07.parseWord(templatePath, params); + tmpPath = temDir + fileName; + FileOutputStream fos = new FileOutputStream(tmpPath); + doc.write(fos); + fos.flush(); + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + return tmpPath; + } + + public static void main(String[] args) throws RuntimeException { - String pathUrl = "D:\\casic\\tmp\\1645701777117741057"; - String localPathUrl = "D:\\casic\\tmp\\1645701777117741057"; -// //文件与BufferedImage间的转换 -// //读取图片 -// BufferedImage bi = readImage(pathUrl + "/sign1_1678844113422.png"); -// BufferedImage bii = convertLayout(bi, alpha); -// //生成透明背景图片 -// saveFile(bii, "PNG", localPathUrl + "\\sign3.png"); -// -// //文件与BufferedImage间的转换 -// //读取图片 -// BufferedImage b = readImage(pathUrl + "/name1_1678844060471.png"); -// BufferedImage b0 = convertLayout(b, alpha); -// //生成透明背景图片 -// saveFile(b0, "PNG", localPathUrl + "\\name3.png"); + String pathUrl = "D:\\casic"; + String localPathUrl = "D:\\casic\\"; // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; + String wordOldUrl = pathUrl + "\\工作记录单.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; - //WORD转PDF存放位置 - String pdfNewUrl = localPathUrl + "\\tem.pdf"; - //电子印章图片地址 - String stampNameImgUr = localPathUrl + "\\name1_1678844060471.png"; - //电子签名图片地址 - String stampSealImgUrl = localPathUrl + "\\ceshi.jpg"; - // word文档内容关键字 - FilePrintRegisterUtils addStampUtils = new FilePrintRegisterUtils(); - List electronicSealList = new ArrayList(11); - - ElectronicImage electronicImage = defaultElectronicSignName("批准人"); - electronicImage.setElectronicSealImageUrl(stampNameImgUr); - electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); - //加载文档 - Document document = new Document(); - document.loadFromFile(wordOldUrl); - //获取段落总数 - int count = document.getPageCount(); - System.out.println(count); - String[] imageCutOffContents = stampSealImgUrl.split("\\."); - CropPicture cropPicture=CropPicture.builder() - .targetImgUrl(stampSealImgUrl) - .cutCols(count) - .cutRows(1) - .subfileUrl(imageCutOffContents[imageCutOffContents.length - 2]) - .subfileType("."+imageCutOffContents[imageCutOffContents.length - 1]) - .build(); - try{ - ImageTool.crosswiseCutting(cropPicture); - }catch (IOException ex){ - + String wordNewUrl = localPathUrl + "\\tem1.docx"; + Map params = new HashMap<>(); + List> assetList = new ArrayList<>(); + for (int i = 0; i < 3; i++) { + Map assetMap = new HashMap<>(); + assetMap.put("assetName", "我不是设备名称"); + assetMap.put("model", "我不是型号"); + assetMap.put("assetNo", "我是设备编号"); + assetList.add(assetMap); } -// // 将新word转化为pdf文件 -// addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); + params.put("assetList", assetList); + params.put("logNo", "本编号"); + params.put("laboratoryName", "此去半生"); + params.put("executiveAddress", "猜猜我在哪里"); + exportWord(wordOldUrl, localPathUrl, "temp.docx", params); + + +// //WORD转PDF存放位置 +// String pdfNewUrl = localPathUrl + "\\tem.pdf"; +// //电子印章图片地址 +// String stampNameImgUr = localPathUrl + "\\name1_1678844060471.png"; +// //电子签名图片地址 +// String stampSealImgUrl = localPathUrl + "\\ceshi.jpg"; +// // word文档内容关键字 +// FilePrintRegisterUtils addStampUtils = new FilePrintRegisterUtils(); +// List electronicSealList = new ArrayList(11); +// +// ElectronicImage electronicImage = defaultElectronicSignName("批准人"); +// electronicImage.setElectronicSealImageUrl(stampNameImgUr); +// electronicSealList.add(electronicImage); +// addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); +// //加载文档 +// Document document = new Document(); +// document.loadFromFile(wordOldUrl); +// //获取段落总数 +// int count = document.getPageCount(); +// System.out.println(count); +// String[] imageCutOffContents = stampSealImgUrl.split("\\."); +// CropPicture cropPicture = CropPicture.builder() +// .targetImgUrl(stampSealImgUrl) +// .cutCols(count) +// .cutRows(1) +// .subfileUrl(imageCutOffContents[imageCutOffContents.length - 2]) +// .subfileType("." + imageCutOffContents[imageCutOffContents.length - 1]) +// .build(); +// try { +// ImageTool.crosswiseCutting(cropPicture); +// } catch (IOException ex) { +// +// } +//// 将新word转化为pdf文件 +//// addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } protected static ElectronicImage defaultElectronicSignSeal(String keyWord, float horizontal) { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java index 4078c88..85df50d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java @@ -8,6 +8,7 @@ import com.casic.missiles.dto.business.certificate.ElectronicImage; import com.casic.missiles.dto.business.file.CropPicture; import com.casic.missiles.dto.business.file.FilePrintRegister; +import com.casic.missiles.service.listeners.util.ParseWord07; import com.spire.doc.*; import com.spire.doc.documents.*; import com.spire.doc.fields.DocPicture; @@ -86,48 +87,12 @@ addAbsolutePathStamp(wordOldUrl, wordNewUrl, absolutePathImage); } //由于合成word总页数存在不准确,先转换为pdf进行获取合成证书总页数, 处理齐缝章 - } // 4、将新word转化为pdf文件 wordToPdf(wordNewUrl, pdfNewUrl); return pdfNewUrl; } - /** - * 按照模板 填充数据生成word 只支持docx - * - * @param templatePath 模板文件路径 - * @param temDir 生成文件的目录 - * @param fileName 生成文件名 - * @param params 参数 - */ - public static String exportWord(String templatePath, String temDir, String fileName, Map params) { - Assert.notNull(templatePath, "模板路径不能为空"); - Assert.notNull(temDir, "临时文件路径不能为空"); - Assert.notNull(fileName, "导出文件名不能为空"); - if (fileName.endsWith(".doc")) { - docToDocx(templatePath, templatePath + "x"); - templatePath += "x"; - } - Assert.isTrue(fileName.endsWith(".docx"), "word导出请使用docx格式"); - File dir = new File(temDir); - if (!dir.getParentFile().exists()) { - // 新建文件夹 - dir.getParentFile().mkdirs(); - } - String tmpPath = ""; - try { - XWPFDocument doc = WordExportUtil.exportWord07(templatePath, params); - tmpPath = temDir + fileName; - FileOutputStream fos = new FileOutputStream(tmpPath); - doc.write(fos); - fos.flush(); - fos.close(); - } catch (Exception e) { - e.printStackTrace(); - } - return tmpPath; - } /** * 将相同关键字的印章添加到同一个位置进行打印 @@ -140,6 +105,9 @@ */ private static void addSameKeyWordStamp(String wordOldUrl, String wordNewUrl, List electronicSealList) throws RuntimeException { + if (CollectionUtils.isEmpty(electronicSealList)) { + return; + } // 加载文档 Document document = new Document(); document.loadFromFile(wordOldUrl); @@ -151,7 +119,7 @@ throw new RuntimeException("image url is empty or key word not exist in the word template ..."); } //多处关键字添加同一个签章 - for(int keyWordIndex=0;keyWordIndex params) { + Assert.notNull(templatePath, "模板路径不能为空"); + Assert.notNull(temDir, "临时文件路径不能为空"); + Assert.notNull(fileName, "导出文件名不能为空"); + if (fileName.endsWith(".doc")) { + docToDocx(templatePath, templatePath + "x"); + templatePath += "x"; + } + Assert.isTrue(fileName.endsWith(".docx"), "word导出请使用docx格式"); + File dir = new File(temDir); + if (!dir.getParentFile().exists()) { + // 新建文件夹 + dir.getParentFile().mkdirs(); + } + String tmpPath = ""; + try { + ParseWord07 parseWord07=new ParseWord07(); + XWPFDocument doc = parseWord07.parseWord(templatePath, params); + tmpPath = temDir + fileName; + FileOutputStream fos = new FileOutputStream(tmpPath); + doc.write(fos); + fos.flush(); + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + return tmpPath; + } + + public static void main(String[] args) throws RuntimeException { - String pathUrl = "D:\\casic\\tmp\\1645701777117741057"; - String localPathUrl = "D:\\casic\\tmp\\1645701777117741057"; -// //文件与BufferedImage间的转换 -// //读取图片 -// BufferedImage bi = readImage(pathUrl + "/sign1_1678844113422.png"); -// BufferedImage bii = convertLayout(bi, alpha); -// //生成透明背景图片 -// saveFile(bii, "PNG", localPathUrl + "\\sign3.png"); -// -// //文件与BufferedImage间的转换 -// //读取图片 -// BufferedImage b = readImage(pathUrl + "/name1_1678844060471.png"); -// BufferedImage b0 = convertLayout(b, alpha); -// //生成透明背景图片 -// saveFile(b0, "PNG", localPathUrl + "\\name3.png"); + String pathUrl = "D:\\casic"; + String localPathUrl = "D:\\casic\\"; // 目标文件地址 - String wordOldUrl = pathUrl + "\\测试_1680242558223.docx"; + String wordOldUrl = pathUrl + "\\工作记录单.docx"; // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\测试_1680242558223.docx"; - //WORD转PDF存放位置 - String pdfNewUrl = localPathUrl + "\\tem.pdf"; - //电子印章图片地址 - String stampNameImgUr = localPathUrl + "\\name1_1678844060471.png"; - //电子签名图片地址 - String stampSealImgUrl = localPathUrl + "\\ceshi.jpg"; - // word文档内容关键字 - FilePrintRegisterUtils addStampUtils = new FilePrintRegisterUtils(); - List electronicSealList = new ArrayList(11); - - ElectronicImage electronicImage = defaultElectronicSignName("批准人"); - electronicImage.setElectronicSealImageUrl(stampNameImgUr); - electronicSealList.add(electronicImage); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); - //加载文档 - Document document = new Document(); - document.loadFromFile(wordOldUrl); - //获取段落总数 - int count = document.getPageCount(); - System.out.println(count); - String[] imageCutOffContents = stampSealImgUrl.split("\\."); - CropPicture cropPicture=CropPicture.builder() - .targetImgUrl(stampSealImgUrl) - .cutCols(count) - .cutRows(1) - .subfileUrl(imageCutOffContents[imageCutOffContents.length - 2]) - .subfileType("."+imageCutOffContents[imageCutOffContents.length - 1]) - .build(); - try{ - ImageTool.crosswiseCutting(cropPicture); - }catch (IOException ex){ - + String wordNewUrl = localPathUrl + "\\tem1.docx"; + Map params = new HashMap<>(); + List> assetList = new ArrayList<>(); + for (int i = 0; i < 3; i++) { + Map assetMap = new HashMap<>(); + assetMap.put("assetName", "我不是设备名称"); + assetMap.put("model", "我不是型号"); + assetMap.put("assetNo", "我是设备编号"); + assetList.add(assetMap); } -// // 将新word转化为pdf文件 -// addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); + params.put("assetList", assetList); + params.put("logNo", "本编号"); + params.put("laboratoryName", "此去半生"); + params.put("executiveAddress", "猜猜我在哪里"); + exportWord(wordOldUrl, localPathUrl, "temp.docx", params); + + +// //WORD转PDF存放位置 +// String pdfNewUrl = localPathUrl + "\\tem.pdf"; +// //电子印章图片地址 +// String stampNameImgUr = localPathUrl + "\\name1_1678844060471.png"; +// //电子签名图片地址 +// String stampSealImgUrl = localPathUrl + "\\ceshi.jpg"; +// // word文档内容关键字 +// FilePrintRegisterUtils addStampUtils = new FilePrintRegisterUtils(); +// List electronicSealList = new ArrayList(11); +// +// ElectronicImage electronicImage = defaultElectronicSignName("批准人"); +// electronicImage.setElectronicSealImageUrl(stampNameImgUr); +// electronicSealList.add(electronicImage); +// addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); +// //加载文档 +// Document document = new Document(); +// document.loadFromFile(wordOldUrl); +// //获取段落总数 +// int count = document.getPageCount(); +// System.out.println(count); +// String[] imageCutOffContents = stampSealImgUrl.split("\\."); +// CropPicture cropPicture = CropPicture.builder() +// .targetImgUrl(stampSealImgUrl) +// .cutCols(count) +// .cutRows(1) +// .subfileUrl(imageCutOffContents[imageCutOffContents.length - 2]) +// .subfileType("." + imageCutOffContents[imageCutOffContents.length - 1]) +// .build(); +// try { +// ImageTool.crosswiseCutting(cropPicture); +// } catch (IOException ex) { +// +// } +//// 将新word转化为pdf文件 +//// addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); } protected static ElectronicImage defaultElectronicSignSeal(String keyWord, float horizontal) { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/util/ParseWord07.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/util/ParseWord07.java new file mode 100644 index 0000000..2547722 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/util/ParseWord07.java @@ -0,0 +1,265 @@ +package com.casic.missiles.service.listeners.util; + +import cn.afterturn.easypoi.cache.WordCache; +import cn.afterturn.easypoi.entity.ImageEntity; +import cn.afterturn.easypoi.util.PoiPublicUtil; +import cn.afterturn.easypoi.word.entity.MyXWPFDocument; +import cn.afterturn.easypoi.word.entity.params.ExcelListEntity; +import cn.afterturn.easypoi.word.parse.excel.ExcelEntityParse; +import cn.afterturn.easypoi.word.parse.excel.ExcelMapParse; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.xwpf.usermodel.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * poi 类不满足列循环格式插入,修改源码后满足 + * + */ +public class ParseWord07 { + private static final Logger LOGGER = LoggerFactory.getLogger(cn.afterturn.easypoi.word.parse.ParseWord07.class); + + public ParseWord07() { + } + + private void changeValues(XWPFParagraph paragraph, XWPFRun currentRun, String currentText, List runIndex, Map map) throws Exception { + if (currentText.contains("fe:") && currentText.startsWith("{{")) { + currentText = currentText.replace("fe:", "").replace("{{", "").replace("}}", ""); + String[] keys = currentText.replaceAll("\\s{1,}", " ").trim().split(" "); + List list = (List) PoiPublicUtil.getParamsValue(keys[0], map); + list.forEach((objx) -> { + if (objx instanceof ImageEntity) { + currentRun.setText("", 0); + ExcelMapParse.addAnImage((ImageEntity) objx, currentRun); + } else { + PoiPublicUtil.setWordText(currentRun, objx.toString()); + } + + }); + } else { + Object obj = PoiPublicUtil.getRealValue(currentText, map); + if (obj instanceof ImageEntity) { + currentRun.setText("", 0); + ExcelMapParse.addAnImage((ImageEntity) obj, currentRun); + } else { + currentText = obj.toString(); + PoiPublicUtil.setWordText(currentRun, currentText); + } + } + + for (int k = 0; k < runIndex.size(); ++k) { + ((XWPFRun) paragraph.getRuns().get((Integer) runIndex.get(k))).setText("", 0); + } + + runIndex.clear(); + } + + private void checkThisTableCellIterator(List cells, Map map) throws Exception { + int cellIndex = 0; + while (cellIndex < cells.size()) { + String text = cells.get(cellIndex).getText().trim(); + if (text != null && text.contains("#fe:") && text.startsWith("{{")) { + break; + } + cellIndex++; + } + if (cellIndex >= cells.size()) { + return; + } + String text = cells.get(cellIndex).getText().trim(); + if (text != null && text.contains("fe:") && text.startsWith("{{")) { + text = text.replace("#fe:", "").replace("{{", "").replace("}}", ""); + String[] keys = text.replaceAll("\\s{1,}", " ").trim().split(" "); + String[] parmkeys = keys[0].split("\\."); + Object result = PoiPublicUtil.getParamsValue(keys[0], map); + if (result instanceof List) { + List> resultMap = (List>) result; + List resultList = resultMap.stream().map(m -> m.get(parmkeys[parmkeys.length - 1])).collect(Collectors.toList()); + int resultIndex = 0; + clearParagraphText((cells.get(cellIndex)).getParagraphs()); + while (resultIndex < resultList.size() && cellIndex < cells.size()) { + cells.get(cellIndex++).setText(String.valueOf(resultList.get(resultIndex))); + resultIndex++; + } + } + } + } + + private static void clearParagraphText(List paragraphs) { + paragraphs.forEach((pp) -> { + if (pp.getRuns() != null) { + for (int i = pp.getRuns().size() - 1; i >= 0; --i) { + pp.removeRun(i); + } + } + }); + } + + private Object checkThisTableIsNeedIterator(XWPFTableCell cell, Map map) throws Exception { + String text = cell.getText().trim(); + if (text != null && text.contains("fe:") && text.startsWith("{{")) { + text = text.replace("!fe:", "").replace("$fe:", "").replace("fe:", "").replace("{{", ""); + String[] keys = text.replaceAll("\\s{1,}", " ").trim().split(" "); + Object result = PoiPublicUtil.getParamsValue(keys[0], map); + return Objects.nonNull(result) ? result : new ArrayList(0); + } else { + return null; + } + } + + private void parseAllParagraph(List paragraphs, Map map) throws Exception { + for (int i = 0; i < paragraphs.size(); ++i) { + XWPFParagraph paragraph = (XWPFParagraph) paragraphs.get(i); + if (paragraph.getText().indexOf("{{") != -1) { + this.parseThisParagraph(paragraph, map); + } + } + + } + + private void parseThisParagraph(XWPFParagraph paragraph, Map map) throws Exception { + XWPFRun currentRun = null; + String currentText = ""; + Boolean isfinde = false; + List runIndex = new ArrayList(); + for (int i = 0; i < paragraph.getRuns().size(); ++i) { + XWPFRun run = (XWPFRun) paragraph.getRuns().get(i); + String text = run.getText(0); + if (!StringUtils.isEmpty(text)) { + if (isfinde) { + currentText = currentText + text; + if (currentText.indexOf("{{") == -1) { + isfinde = false; + runIndex.clear(); + } else { + runIndex.add(i); + } + + if (currentText.indexOf("}}") != -1) { + this.changeValues(paragraph, currentRun, currentText, runIndex, map); + currentText = ""; + isfinde = false; + } + } else if (text.indexOf("{{") >= 0) { + currentText = text; + isfinde = true; + currentRun = run; + } else { + currentText = ""; + } + + if (currentText.indexOf("}}") != -1) { + this.changeValues(paragraph, currentRun, currentText, runIndex, map); + isfinde = false; + } + } + } + + } + + private void parseThisRow(List cells, Map map) throws Exception { + Iterator var3 = cells.iterator(); + + while (var3.hasNext()) { + XWPFTableCell cell = (XWPFTableCell) var3.next(); + this.parseAllParagraph(cell.getParagraphs(), map); + } + + } + + private void parseThisTable(XWPFTable table, Map map) throws Exception { + + for (int i = 0; i < table.getNumberOfRows(); ++i) { + XWPFTableRow row = table.getRow(i); + List cells = row.getTableCells(); + //增加对该行列的检测 + checkThisTableCellIterator(cells, map); + //检测该行的首个字母是否是 + Object listobj = this.checkThisTableIsNeedIterator((XWPFTableCell) cells.get(0), map); + if (listobj == null) { + this.parseThisRow(cells, map); + } else if (listobj instanceof ExcelListEntity) { + (new ExcelEntityParse()).parseNextRowAndAddRow(table, i, (ExcelListEntity) listobj); + i = i + ((ExcelListEntity) listobj).getList().size() - 1; + } else { + ExcelMapParse.parseNextRowAndAddRow(table, i, (List) listobj); + i = i + ((List) listobj).size() - 1; + } + } + + } + + public XWPFDocument parseWord(String url, Map map) throws Exception { + MyXWPFDocument doc = WordCache.getXWPFDocument(url); + this.parseWordSetValue(doc, map); + return doc; + } + + public XWPFDocument parseWord(String url, List> list) throws Exception { + if (list != null && list.size() != 0) { + if (list.size() == 1) { + return this.parseWord(url, (Map) list.get(0)); + } else { + MyXWPFDocument doc = WordCache.getXWPFDocument(url); + this.parseWordSetValue(doc, (Map) list.get(0)); + doc.createParagraph().setPageBreak(true); + + for (int i = 1; i < list.size(); ++i) { + MyXWPFDocument tempDoc = WordCache.getXWPFDocument(url); + this.parseWordSetValue(tempDoc, (Map) list.get(i)); + tempDoc.createParagraph().setPageBreak(true); + doc.getDocument().addNewBody().set(tempDoc.getDocument().getBody()); + } + + return doc; + } + } else { + return null; + } + } + + public void parseWord(XWPFDocument document, Map map) throws Exception { + this.parseWordSetValue((MyXWPFDocument) document, map); + } + + private void parseWordSetValue(MyXWPFDocument doc, Map map) throws Exception { + this.parseAllParagraph(doc.getParagraphs(), map); + this.parseHeaderAndFoot(doc, map); + Iterator itTable = doc.getTablesIterator(); + while (itTable.hasNext()) { + XWPFTable table = (XWPFTable) itTable.next(); + if (table.getText().indexOf("{{") != -1) { + this.parseThisTable(table, map); + } + } + + } + + private void parseHeaderAndFoot(MyXWPFDocument doc, Map map) throws Exception { + List headerList = doc.getHeaderList(); + Iterator var4 = headerList.iterator(); + + while (var4.hasNext()) { + XWPFHeader xwpfHeader = (XWPFHeader) var4.next(); + + for (int i = 0; i < xwpfHeader.getListParagraph().size(); ++i) { + this.parseThisParagraph((XWPFParagraph) xwpfHeader.getListParagraph().get(i), map); + } + } + + List footerList = doc.getFooterList(); + Iterator var9 = footerList.iterator(); + + while (var9.hasNext()) { + XWPFFooter xwpfFooter = (XWPFFooter) var9.next(); + + for (int i = 0; i < xwpfFooter.getListParagraph().size(); ++i) { + this.parseThisParagraph((XWPFParagraph) xwpfFooter.getListParagraph().get(i), map); + } + } + + } +}