package com.hyzs.szcg.doc.utils; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.hyzs.gz.common.core.exception.CommonException; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.util.Units; import org.apache.poi.xwpf.usermodel.*; import sun.misc.BASE64Decoder; import javax.imageio.ImageIO; /** * * @Title: WordExport.java * @Description: 导出word文档 * @author zzh * @version 1.0 */ @Slf4j public class PoiExportWord { private String templatePath; private XWPFDocument doc = null; private FileInputStream is = null; private OutputStream os = null; public PoiExportWord(String templatePath) { this.templatePath = templatePath; } public void init() throws IOException { File file=new File(this.templatePath); if(file.exists()){ is = new FileInputStream(file); doc = new XWPFDocument(is); }else{ log.error("io error -> 文件模板不存在》"+this.templatePath); throw CommonException.exception("io error 模板文件不存在"); } } /** * 替换掉占位符 * @param params * @return * @throws Exception */ public boolean export(Mapparams) throws Exception{ this.replaceInPara(doc, params); return true; } /** * 替换掉表格中的占位符 * @param params * @param tableIndex * @return * @throws Exception */ public boolean export(Map params,int tableIndex) throws Exception{ this.replaceInTable(doc, params,tableIndex); return true; } /** * 生成word文档 * @param outDocPath * @return * @throws IOException */ public boolean generate(String outDocPath) throws IOException{ os = new FileOutputStream(outDocPath); doc.write(os); this.close(os); this.close(is); return true; } /** * 替换表格里面的变量 * * @param doc * 要替换的文档 * @param params * 参数 * @throws Exception */ private void replaceInTable(XWPFDocument doc, Map params,int tableIndex) throws Exception { List tableList = doc.getTables(); if(tableList.size()>tableIndex){ for (int i=0;i rows; List cells; List paras; rows = table.getRows(); for (XWPFTableRow row : rows) { cells = row.getTableCells(); for (XWPFTableCell cell : cells) { paras = cell.getParagraphs(); for (XWPFParagraph para : paras) { this.replaceInPara(para, params); } } } } } } /** * 替换段落里面的变量 * * @param doc * 要替换的文档 * @param params * 参数 * @throws Exception */ private void replaceInPara(XWPFDocument doc, Map params) throws Exception { Iterator iterator = doc.getParagraphsIterator(); XWPFParagraph para; while (iterator.hasNext()) { para = iterator.next(); this.replaceInPara(para, params); } } /** * 替换段落里面的变量 * * @param para * 要替换的段落 * @param params * 参数 * @throws Exception * @throws IOException * @throws */ private boolean replaceInPara(XWPFParagraph para, Map params) throws Exception { boolean data = false; List runs; //有符合条件的占位符 if (this.matcher(para.getParagraphText()).find()) { runs = para.getRuns(); data = true; Map tempMap = new TreeMap<>(); for (int i = 0; i < runs.size(); i++) { XWPFRun run = runs.get(i); String runText = run.toString(); //以"$"开头 boolean begin = runText.indexOf("$")>-1; boolean end = runText.indexOf("}")>-1; if(begin && end){ tempMap.put(i, runText); fillBlock(para, params, tempMap, i); continue; }else if(begin && !end){ tempMap.put(i, runText); continue; }else if(!begin && end){ tempMap.put(i, runText); fillBlock(para, params, tempMap, i); continue; }else{ if(tempMap.size()>0){ tempMap.put(i, runText); continue; } continue; } } } else if (this.matcherRow(para.getParagraphText())) { runs = para.getRuns(); data = true; } return data; } /** * 填充run内容 * @param para * @param params * @param tempMap * @param * @param * @throws * @throws IOException * @throws Exception */ @SuppressWarnings("rawtypes") private void fillBlock(XWPFParagraph para, Map params, Map tempMap, int index) throws InvalidFormatException, IOException, Exception { Matcher matcher; if(tempMap!=null&&tempMap.size()>0){ String wholeText = ""; List tempIndexList = new ArrayList (); for(Map.Entry entry :tempMap.entrySet()){ tempIndexList.add(entry.getKey()); wholeText+=entry.getValue(); } if(wholeText.equals("")){ return; } matcher = this.matcher(wholeText); if (matcher.find()) { boolean isPic = false;//图片标识 boolean isBasePic = false;//base64图片标识 boolean isUnderLine=false;//下划线标识 boolean checkbox=false;//复选框标识 ByteArrayInputStream inputStream=null; int width = 0; int height = 0; int picType = 0; String path = null; String keyText = matcher.group().substring(2,matcher.group().length()-1); String newRunText = ""; Object value = params.get(keyText); if(value instanceof String){ newRunText = matcher.replaceFirst(String.valueOf(value)); }else if(value instanceof Map){ Map pic = (Map)value; if(pic.containsKey("fileSuffix")&&pic.containsKey("filePath")){ //插入图片 isPic = true; path = pic.get("filePath").toString(); //获取图片大小 BufferedImage sourceImg = ImageIO.read(getPicStream(path)); width=sourceImg.getWidth(); height=sourceImg.getHeight(); if(width>200){ width=200; } if(height>200){ height=200; } if(keyText.endsWith("Sign")||keyText.endsWith("_sign")){//签名限制大小 width=50; height=30; } picType=sourceImg.getType(); }else if(pic.containsKey("personalSignature")){ // base64字符串的 图片形式 isBasePic=true; //将字符串转换为byte数组 String file= (String) pic.get("personalSignature"); file=file.replaceFirst("data:image/png;base64,",""); byte[] bytes = new BASE64Decoder().decodeBuffer(file.trim()); //转化为输入流 inputStream = new ByteArrayInputStream(bytes); //获取图片大小 BufferedImage sourceImg = ImageIO.read(new ByteArrayInputStream(bytes)); width = sourceImg.getWidth(); height = sourceImg.getHeight(); if(width>200){ width=200; } if(height>200){ height=200; } if(keyText.endsWith("Sign")||keyText.endsWith("_sign")){//签名限制大小 width=50; height=30; } picType=sourceImg.getType(); }else if(pic.containsKey("name")&&pic.containsKey("address")&&pic.containsKey("latitude")){ //是一个 地址 newRunText = matcher.replaceFirst(String.valueOf(pic.get("name"))); } }else if(value instanceof List){ //在表单中为下拉选择 在模板中为文本框 List list=(List)value; if(list.size()>0){ if(list.get(0) instanceof String){ String listStr=String.join(",",list); newRunText = matcher.replaceFirst(String.valueOf(listStr)); }else if(list.get(0) instanceof Map){ Map m=(Map) list.get(0); if(m.containsKey("filePath")&&m.containsKey("fileSuffix")&&m.containsKey("fileName")) { //是图片 //插入图片 isPic = true; path = m.get("filePath").toString(); //获取图片大小 BufferedImage sourceImg = ImageIO.read(getPicStream(path)); width = sourceImg.getWidth(); height = sourceImg.getHeight(); if(width>200){ width=200; } if(height>200){ height=200; } if(keyText.endsWith("Sign")||keyText.endsWith("_sign")){//签名限制大小 width=50; height=30; } picType=sourceImg.getType(); }else if(m.containsKey("personalSignature")){ // base64字符串的 图片形式 isBasePic=true; //将字符串转换为byte数组 String file= (String) m.get("personalSignature"); byte[] bytes = new BASE64Decoder().decodeBuffer(file.trim()); //转化为输入流 inputStream = new ByteArrayInputStream(bytes); //获取图片大小 BufferedImage sourceImg = ImageIO.read(new ByteArrayInputStream(bytes)); width = sourceImg.getWidth(); height = sourceImg.getHeight(); if(width>200){ width=200; } if(height>200){ height=200; } if(keyText.endsWith("Sign")||keyText.endsWith("_sign")){//签名限制大小 width=50; height=30; } picType=sourceImg.getType(); }else if(m.containsKey("q")&&m.containsKey("a")){ //问答形式 StringBuffer str=new StringBuffer(); for (int i=0;i 0){ isUnderLine=true; newRunText = matcher.replaceFirst(str.toString()); } }else{ StringBuffer listStr=new StringBuffer(); for (int i = 0; i 0){ newRunText = matcher.replaceFirst(listStr.toString().substring(0,listStr.length()-1)); } } } } }else if(value == null){ //如果value为null 则说明在from表单中没有传该值 //判断 keyText 是否是复选框 key 以 flag 作为前缀 if(keyText!=null&&!"".equals(keyText)&&keyText.startsWith("flag_")){ //判断 params 是否包含 keyText这个Key 若 包含 //截取字符串 列如 flag_sourceType_1 ---> sourceType //在表单中为下拉选择 在模板中为复选框 String str[]=keyText.split("_"); boolean flag=false; checkbox=true; if(str.length>2){ String key=str[1];//StringUtils.substringBetween(keyText,"_","_"); Object v=params.get(key); if(v instanceof List){ List list=(List)v; for (int i = 0; i -1){ String[] textArr = newRunText.split("\n"); if(textArr.length>0){ //设置字体信息 String fontFamily = tempRun.getFontFamily(); int fontSize = tempRun.getFontSize(); //logger.info("------------------"+fontSize); for(int i=0;i
//测试
/** * 立案审批 * */ public void test2(){ String str="{\"istName\":\"粤海街道组长3-一般程序-2019-11-14\",\"caseTypeLabel\":[\"环境卫生管理\"],\"punishmentBasis\":\"《广东省城乡生活垃圾处理条例》第五十二条违反本条例第十条规定,生活垃圾分类管理责任人未履行工作责任的,由市、县(区)人民政府环境卫生主管部门责令限期改正;逾期不改正的,处一千元以上一万元以下的罚款。\",\"caseAddress\":{\"name\":\"南头中共深圳市南山区委员会(桃园路北)(广东省深圳市南山区桃园路2号)\",\"address\":\"广东省深圳市南山区桃园路2号\",\"latitude\":22.53332,\"longitude\":113.93041,\"pointWkt\":\"POINT(113.93041 22.53332)\",\"pointWkt2000\":\"\",\"adcode\":\"\",\"city\":\"\",\"citycode\":\"\",\"country\":\"\",\"district\":\"\",\"province\":\"\"},\"qrCode\":\"https://cgzf-1259237188.cos.ap-guangzhou.myqcloud.com/2019/10/29/10/802ee3cac0a8437eb64fac588f6c28f0.png?q-sign-algorithm=sha1&q-ak=AKIDicJm23hNfhdOxHrCpFUcXGiwuf9PZdRz&q-sign-time=1572316614;1572323814&q-key-time=1572316614;1572323814&q-header-list=&q-url-param-list=&q-signature=e9a08d199916e53eb69d8f1adbf4d686df22b8eb\",\"areaName\":\"南山区\",\"caseNumber\":\"[2019]深南城综粤海简罚决字第741号\",\"assistantPerson\":\"117\",\"certificateAddress\":\"13\",\"mainEnforcement\":\"1001\",\"mainEnforcementLabel\":[\"张三\"],\"busId\":\"51dd1aef2c77433883c29ee0315527c3\",\"certificatePicture\":[{\"id\":557,\"originalFileName\":\"wxba6bffebe25e971d.o6zAJsy_fHtwKYhcuMDnWuettYwc.Juwhm2AEhjyN32eabfa5571cd6e21fbd0a9eba7176cc.jpg\",\"fileName\":\"e886a753a95c4eb4a2e5f152b1d19a60.jpg\",\"fileSuffix\":\"jpg\",\"filePath\":\"https://cgzf-1257892252.cos.ap-chengdu.myqcloud.com/2019/11/14/09/e886a753a95c4eb4a2e5f152b1d19a60.jpg\",\"fileSize\":37545}],\"deptId\":44,\"personTypeLabel\":[\"公民\"],\"initiatorId\":\"ZZ003\",\"assistantPersonLabel\":[\"粤海街道片长1\"],\"areaCode\":440305007,\"phone\":\"123\",\"name\":\"123\",\"crimeTime\":\"2019-11-14 09:36:43\",\"deptCode\":\"SZCG_ZFD_440305007\",\"certificateType\":\"0\",\"clientName\":\"粤海街道组长3\",\"caseReasonLabel\":[\"生活垃圾分类管理责任人未履行工作责任的\"],\"isForceLabel\":\"否\",\"caseType\":\"A0101\",\"applicableBasis\":\"【适用】《广东省城乡生活垃圾处理条例》第十条生活垃圾分类管理责任人的工作责任:(一)建立生活垃圾日常分类管理制度,记录产生的生活垃圾种类和去向,并接受环境卫生主管部门的监督检查;(二)开展生活垃圾分类知识宣传,指导、监督单位和个人开展生活垃圾分类;(三)根据生活垃圾产生量和分类方法,按照标准和分类标志设置生活垃圾分类收集点和收集容器,并保持生活垃圾分类收集容器正常使用;(四)明确生活垃圾的投放时间、地点;(五)制止混合已分类的生活垃圾;(六)督促检查垃圾分类,把垃圾交由相关单位处理。【竞合】《深圳市生活垃圾分类和减量管理办法》第四十条生活垃圾分类投放管理责任人违反本办法第十二条规定,有下列行为之一的,由主管部门责令限期改正,逾期不改正的,处以罚款:(一)未按规定对生活垃圾分类投放工作进行指导的,处3000元罚款;(二)未公示生活垃圾分类投放时间或者地点的,处2000元罚款;(三)未记录或者未如实记录责任范围内生活垃圾排放情况的,处2000元罚款;(四)未按规定设置生活垃圾分类收集容器的,处3000元罚款;(五)未将分类投放的生活垃圾交由符合规定的单位分类收集、运输的,处5000元罚款。\",\"isAuth\":\"1\",\"isForce\":\"0\",\"personType\":\"1\",\"certificateTypeLabel\":[\"身份证证件\"],\"caseOrigin\":\"213\",\"surveyInfo\":\"123\",\"initiatorName\":\"粤海街道组长3\",\"sponsorLawEnforcer\":\"\",\"scenePicture\":[{\"id\":556,\"originalFileName\":\"wxba6bffebe25e971d.o6zAJsy_fHtwKYhcuMDnWuettYwc.F5bXFN3MwU2Q32eabfa5571cd6e21fbd0a9eba7176cc.jpg\",\"fileName\":\"c3e49fd3ba344af29ce08d92b76c7313.jpg\",\"fileSuffix\":\"jpg\",\"filePath\":\"https://cgzf-1257892252.cos.ap-chengdu.myqcloud.com/2019/11/14/09/c3e49fd3ba344af29ce08d92b76c7313.jpg\",\"fileSize\":37545}],\"caseReason\":\"A0101038\",\"areaId\":3277,\"certificateNumber\":\"440101199901010000\",\"age\":\"123\",\"busStatusName\":\"待立案\",\"busStatus\":\"201\",\"mainEnforcementSign\":{\"userId\":1001,\"personalSignature\":\"data:image/png;base64,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\"},\"assistantPersonSign\":{\"userId\":117,\"personalSignature\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARIAAACICAYAAAArvWSyAAAgAElEQVR4Xu1dCZhdRZU+p+57ne4sHYiEJQQMmEkybfL6LmHCJoKIbKKDA7IoKKIOKoKAyCIqCIo4A7LPCG6IC64gICCLRFwgmHvv605sFqNmICKEpEk3JL28d+vM9zfVMyFkefvSXfV9+fJB7q3lr3r/rTp1zn+YbLEIWAQsAmUiwGW+b1+3CFgELAJkicQuAouARaBsBCyRlA2hrcAiYBGwRGLXgEXAIlA2ApZIyobQVmARsAhYIrFrwCJgESgbAUskZUNoK7AIWAQskdg1YBGwCJSNgCWSsiG0FVgELAKWSOwasAhYBMpGwBJJ2RDaCiwCFgFLJHYNWAQsAv+HgOd5ByulLjL/Y0kYhucXAo8lkkJQss9YBMYJAkEQnEhE38dwReTeKIqOKGTolkgKQck+YxEYJwhYIhknE22HaRGoJgKWSKqJrq3bIjBOELBEMk4m2g7TIlBNBCyRVBNdW7dFYJwgYIlknEy0HaZFoJoIWCKpJrq2bovAOEHAEsk4mWg7TItANRGwRFJNdG3dFoFxgoAlknEy0XaYFoFqIrBw4cITROQHpo17wjA8spD2rGdrISjZZywC4wSBqhPJokWL2gcHB+cBT6XUK3Ec94wTbO0wLQLjBoGqE0kmk9k7lUp9HYiKyPI4jt83btC1A7UIjBMEOjs7z0qlUldV7Wjjuu4hjuPcb4jkj1EU/cs4wXZcDTOTycxNpVJ7MPM2oz6Z+dF8Pr9hzZo1969atWpgXAE1Rgfr+/43mflDIrKemS8Lw/ArhQy1YBvJJkQSRlG0sJAG7DPNgYDneTOI6AQieotSamciGjnGbqP8DxG1Dg8PH54kyQYieqWnp+eVbb1k/71hEVBBEHxGRM5m5u211ifFcXxbIb0tmEgymcweqVTq+8y8l4g8F0XRGwtpwD7T2Ah0dHS0tLa2HsrMJ4nITCL6Z2YeEpGdmLe5PPIiMsTM92utt2fmP4vI1UNDQ8/39PT0NvbIbe82RWDWrFmt06ZNu5uI9mfmCUmSHJTNZhcXgtQ2V8poJXPnzp0yadKkZUS0GxHliWivKIq6C2nEPtOYCMycObNt+vTpZyilTiGiNiKaKiLEzL8XkZXM/OxWej6diPYUkflE9A8i2peI1hLR74goyefzn+vu7n6qMUdue7U5BIIgmEhEMRHNMf++dxiGSwpBq2AiwWWNOT990FT8gzAMrcG1EJQb9JnOzs79U6kUtq4zRGRYRPqwrVVKRfl8/uXh4eEt2j3a2tomiMgkItpOKYVdSUREw0TULyLtRNSjtf6w4zi9YRg+06AQ2G5thMDs2bPbp06d+jQR7YjNgtZ63ziOlxYCUjFEQkbP8V58cUTk7wMDA2954okn8DWypckQCIJggYjczMy7EtEuIvJ4kiQXp1Kp34VhCHtHUcXzvA8xc8DMIKMLcCwSkV8z86pcLvfx7u7u9UVVaB+uOQJBEGBHeh8z+1rrUESOyGaz6wrpSFFEMmfOnB0mT578TbONnSIiH4nj+NZCGrLPNAYCs2fPnjB16lTYua4hogXMjC/PX4kIc/lHc2wturMdHR2TlVLbT5gwAcfe80XkY9idENFDuVzugmXLlqENWxoYAd/3P0FEl5oj7i/jOH43vD0K6XJRREJEThAE54rIJczcIiJxf3//PitWrBgqpDH7TN0RYN/3YVg9W0TeTkSPEdFsIjo5iqIHSyWRTUeVyWRmKqW+7jjOIUS0Rmt9TRzHV9R99LYDW0XA9/2vMjN+33jumiiKPlUoZMUSCbmuO8txnF8T0R5ElNNanxnH8X8V2qB9rn4IZDKZt6VSqa8S0WQi2p2IHsVH4aWXXnp85cqVg5Xsmed5lyulRlIZaK2vjeP4zErWb+uqPAKjRGLm7PI4ji8stJWiiYSI8FX7PBFdAOMcM6/QWh9Z6Fmq0I7Z5yqLgOd5b2Tme5h5Dq5sReSpfD5/1rJly3DLoivbGpHv+19g5ostkVQa2erVV2sioQULFuyZTqexLZ7IzKy1viqO489Vb4i25nIQ6OzsPEgpNU8pdaOpZ1WSJMdls9nHK3Wc2bR/lkjKmbH6vOt53k+VUv9Wqx0J2nE8zztXKQXDTEpEVmutD81ms9n6QGBb3RICxlfkG7DEE9EsEXlMKXV7GIY34PatWshZIqkWstWpd/bs2dPb29u7mRlezbHW+v3FBOaWcrQZGcn8+fN3amlp+RUzd+K/ReRbURSdWp1h2lpLRaCzs/PNqVTqYRGZKCKvJEnyvnw+H1fb89QSSakzVp/3giD4ABHhRtYBkfT19RV1iVIykWC4vu+fwszfMluhlUqp08Mw/GV9oLCtbg4BGD2Z+TRmxnV9lpkPKMVPpFh0LZEUi1h9nw+C4HYiehtsoFrrm+I4PrfQq1/0vCwicV0XXo3fJiKXiODY1JXP54/u7u5eVV9YbOuG6Pdm5juIaJrW+nE4oGWz2VtqgY4lklqgXJk2FixYsH06nX6cmd8ID2cT/vJEMbWXRSRoyHXdfZVSdzAzYi9wHfzDOI6xTbKlzgh0dHTMbm1tvYuZ54nI7cx8ShiGfbXoliWSWqBcmTZ83z+KmW8VEXi2/imOY2wM4FhYcCmbSOAp2d7eDi/GK+CkRkQva60/YT1eC56Dqj3oed4tSql/JaJ2EflkFEXXV62xTSq2RFIrpMtvx/O8i5RSF4sI7CO3R1H0nmJrLZtI0CC2Ri0tLTcR0TGmA9gWHRyGoY3DKXZGKvi87/uwiYwYw5MkeUc2m32ggtVvtSpLJLVCuux20r7v38vMB4tIl4icEcfxI8XWWhEiQaOe53UyMwJ+cH2Ea0XoGnygVlvpYgc+Hp7fhEgK1paoBDaWSCqBYvXr8DyvQyn1W9jR4MaRJMnburq6/lRsyxUjElwbua57PGIsmBnh5S+IyGW13E4XO/ix/rwlkrE+w+WPz/O8S5RSHyKiHRA7l06nD1uyZAmCLYsqlSQSymQyk9Lp9I0icjAzQ9PgH0mSnJHNZn9RVK/swxVBIAgCiNTAcIZ4lwPjOP5NRSouoBLf92HchX1GI9I4iqKzC3jNPlJDBCBWNnnyZGSDeAMRpXO53GHd3d0PldKFihIJOuD7/mwRuUopdRT+W0SW5vP593Z3d/+tlA7ad0pHwPd9qJyNSGLWmEjY87z/ZOaPElFfkiTHd3V1IabHlgZCwBxrYILYXURe7O/vn1VqJH/FiQS+KUEQHEhEPzFMl4NYSn9//6krVqx4sYFwHNNdQepFeBvjGk9ErlRKXVUre9X8+fPfNGHCBGQcwAJdA/d8a3hvvOXmed7bjZ8RJBYh6L5Xqb2sBpEQRGS32267o+CsZuwlg9ilRFH02VI7at8rDgHP8/ZRSt0JKUQR+VQURYitqUnxPO8ApRREg7G+nh0YGHCr7ZJfk4GNsUYWLlx4hIiMeKKLyB+iKNqv1CFWhUjQmRkzZkzceeedv8TMI+IosAiLyMfjOP55Ma63pQ5sPL8HR7S2trbviYjLzAO5XO4t3d3dy2uFie/7ZzEzPhoprfV34zg+B86KtWrftlMYAlBEY2b4FkEe89tRFJ1V2Juvf6pqRIKmOjs7d3UcB7qg7xCR50XkL1DjiuMY+VBsqRICruu6juPA0AoCfyaXy7nLli17qUrNvaZaI+X4iIjAf+UZEbnUOifWAvni2wiC4MdEdKwh+WvDMPx08bW8+kZViQQN+L4fYPuEIw4zOyLy9XKYr9SBjqf3NiGSlVprr1bCUzhSMTOy2UOyYEVLS8v+S5YseWE84d8MY+3o6JjW1taGG5udzAfnXVEU3VVq36tOJNjeep73MaXUfxIRXOjXJEkCdWoIDdtSBQTqTCQnKKW+KSLIk/NQFEXQhrWlsRBg13UvU0r9O9LMENFf169ff9BTTz31cqndrAWRjLrQg+1GjTnfDcPQBvaVOmvbeK/ORHKpUuqiV09VckcpcRtVgsVWaxCA7rJS6g+4VWVmJDP7YFdXF445JZeaEAl653kevF5/aHoKZfFjaukgVTJCTfhiHYkEynk3QK4PAWAi8uk4jkf0amxpHAR834fWyFeYGbsRJMTaLwzDNeX0sGZEYrJ44ex8pJEb+KNS6oha+TaUA1KzvVsvIkFum7a2th8hd6yILNdan5vNZvHls6VBEDC5qe5nZng8a631WXEcwzWgLAHwmhEJcESKSMdxvkFEU4yz2mlRFH2nQTAeM92oF5F4nncqM0MEfBet9YMDAwPHl3PuHjMT0kADcV33TMdxLhURZMt8Yv369e96+umny9qNYHg1JRKjXQLdErhOt4rIk8Z9vmY+Dg00p1XrSh2J5DoY8EQE/iP/nc1mP161QdqKS0EAkgHw4zoIFx8i8sU4ji8rpaJN36kpkRhbCfKrQDR6LuQGtNY/ieP4ZOuwVInpfLWOehBJR0dHS0tLy22O4yDG6mURuTyKov+o3KhsTeUikMlk5qbT6d8bR0GkIrmw0CTh22q75kRiFvpHHMeBEBJM++u01h/NZrOIzbGlAgjUg0hc1z1SKXU1XPKZ+S+5XO4Yq91bgcmsXBVww/gpM78LNzUicuvzzz9/+nPPPVd0wvjNdaleRALR6G8x89G4I2Tmnlwud5SNEK7MqjFfHsS6QGNi9YYNGzJPPvnk2srUvvlafN9HMvn3mo/Dz+I4PrGa7dm6i0PA87y3KqXuQVI7uMRrrd9eqd0IelIXIkHDQRDMI6JfmRy0OOJcHcdxyS66xcE6tp+eM2fOrlOmTFkhInAA3CAic+M4fq5ao0ZypalTp0JeE7oWlM/nj+rq6kJ4ui0NgoDruu9j5s8rpeZore+J4xhaMRWLf6obkYDEPM8723i84h4KZzaIRi9tEOybthuwV7S1tf3ZhPHjWu+IKIpA2tUoLb7vX8jMZ4rIdkS0cnBwcEFPT88r1WjM1lkaAr7vP8jM/0JEbVprxLuN+nSVVuEmb9WTSLAr2UFr/QOl1AIRmcLMD/b19R1XqrhKRRAZI5X4vn8DM4/cmojI9VEUfbIaQzP+QT8lorcSEcSLvhCGoRUxqgbYJdYZBAGOM7jiRdjCcC6X2627u3t1idVt9rW6Egl65Pv+YcwMdsTXrD9JkrfaHMLlTzF8dlKpFER9QSR/j6JoZvm1vr4Gz/POUErhSLobnNDWr1+/r/UdqQbSpdfp+/77ieh6Zkbemp4oihaU64C2aW/qTiTGG/JnRASpARhefxiGIa6Dq5bguvQpaZ43oQezyy67/B3Of8ieNjw8HCxfvryo7GmFjNb3/cdMgvK0iNwQRdGZdu4KQa42z0BHOZVK3UtEexPRWlzLx3F8baVbrzuRYECZTMZPpVK/YebJ2JUQ0b+GYfhwpQc73uqDbioRIcZpZ631eXEcX1lJDEwi+S/CwTBJklMcx/l1GIbPVLINW1d5CARBsD8R3UdEyOywNpfLHVgNkauGIBKksgiC4LbRBFsi8v0oirAds6UMBFzX/bDjOPj6tIlId29v76KVK1cOllHla16FUjziMYkIAtPHRVFUVgRppfpl6/k/BODJejczH2JuaH/4wgsvnLpq1aqBSmPUKEQCW8mhzIwrwxQMQ/l8/sBSEvVUGqBmrm/+/Pm7TZgwASko9sDxhpkvDMPwqkpIXbqu+09KqfNBICLy30qpK63Ac2OtFviOEBGM7ntgp480MXEcQ8yo4qVhiMSc5W5hZoSgCxE9HEXRocUmM644Qs1dIRT9kZf5OiNg89SGDRsOeuKJJ8pOpep5HnwSToU8r4jcFEXRJ5obqrHXe8/zrmPmDzIz4tp+HkXRCZU2so6i1jBEgg65rruf4zhQtYZ1eUhEDorj+NGxN8W1G1Emk5mZSqWWMPMMIoJuLq6Cv1RuD1zXPdZxHNhg/pIkybXZbPaOcuu071cOAfyWlFI/MDc1y0D21dTObSgimTlzZtuOO+6IDG3YiWBj8r0oij5YLRat3LQ1dE2O7/vIcoeI691gcNNaH1uOTojJW4PYqLki8g+zZbaC3g2yDDo6OnZua2uDO3zGZDq8e3Bw8MPVTAnSUERidiX7KqUeZmaEOb8kIkdbJbXyVigc/xCkxcyHoSYRuTeKoiNKrRUJ45VSUKln+Khs2LChs9qxPKX2dTy+57ruifA0VkrBk7UXlxjVvgVtOCIJggD+CFj0MOIhMvHh1atXH1sNS/N4WmSu677bcRzcqozE3yRJcnE2m8V1cNHKWBsTCRH9z/DwsFerdBfjac5KGSt29TvttBNU6ZDlEAJiX+7v77+82t7iDUckZldyiOM4XzXekjAUXRnH8aXW8FrK0nr1HZPg/TxoUIgIfHVwDXxKKTE4RqYgMleKlkhKn5aKv+m6Ln47ONbg9vPZoaGhvZYvX171dCANSSTmBuejzPwVo+SELH1nxnEMXxNbSkTAGF6/Y4K34PEaEtFJURQV5fHq+z4iSSEbgPVjiaTE+ajCa+z7/jeY+UOm7m+GYfjhKrTzuiobkkjQS+M1+X1mPtj0+k/5fP6krq6ukQxytpSEAPKZICcwcJ1ldni/TKVSJy9ZsgS7lILKaKpH2EeI6JwoihDikC/oZftQ1RBwXXc7x3EeFhHMbR8znxuGYU0EwxqWSIB2Z2en5zjOXcy8K+I3ROT3+Xz+2EpHLlZtZhuwYtigtNYnKaUgws1a68eI6IE4jj9fSHfhOGj8Uv4JTk5a64XZbBaSBbbUGQETQHk5NHNxUZEkSaZWv5WGJhI4Ubmue7xRnkcIdA5JqV988cVPWuNr6at20aJF7blcDgmjYTMZQmi5iBxZiBZMEARIbPadV30G6dHVq1cfbOei9Lmo1JtBEOxORFDFgxdrkiTJmdls9sZKeDEX0sdGJ5JRIyEWPbLbt5rM6V+ywsKFTO+Wn/E8bzoz38PMC/GUiHwriiJ4qm6tQIzqIqXUF807d0ZR9O7yemLfrgQCnuedzMw3Isc2pAI2bNhwQC2v5BueSACyWfRXMfNoIN+zIvLRKIoQ1WhLiQhAp8IYTVHD2iRJPpDNZuFZvNkya9as1mnTpiEDwAEi8hut9Wez2SxUyW2pMwK+7/+CiBCch93ldeaoOrJtrEVpCiIBEJ2dnW92HOdmZt7HxOI8ISLHVisIqRbg17uNIAgQivBdKIvjOlhElhHRB7Z0i+N53j7MfD6eF5Hntdb7ZLPZlfUex3hv38zj3xBawsyDuVzO7+7ufqqWuDQNkUBqYOHChXtrrX/MzDuJyApz9XhyLe7JazkptWzLdd0DHce5Drl6mXm21vqPQ0NDH+jp6QG+rymu617hOA5sJMD/9tWrV7/P2kdqOVubb8tkOLycmaEyGIdhuF+tb9GaiUjowAMPTK1bt+44pdTFhkxamPnn1dJYqP8SqX4P4Ak5ffr0dyulkP91mrkdezBJklO7urpwvTtSOjo6prW2toa4NhaR+5MkubSrq8tqs1Z/irbawj777NM2NDQEYW+4w+NmE9nzrqh1t5qKSMyCRqLqfyciRJ7CSLieiBDliDvzvloDOBbamzt37pSJEydeaLRXcXWIm5wlSZKcOEomQRBASBoiSQ6Meb29vUElRZLGAo71GIPneQuZ+QHsRvBbSJLkbV1dXcjIUNPSdEQCdIzx9VxmhugwxgB/hhviOL6wpuiNocZMxOj7iAhfM5DFUhF5LI7jEfX5IAiQn/nNZsg3h2GIaGJb6ogA8gm1t7ffycyYl8lICs7Me4VhWJHsecUMrSmJxCzsXUQENznHm53JiyJyhRG2rVjin2LAbPZn582b94aJEyeeJSIg6fXMLFrr05VSHSJymhHnXpckydFWva7+s53JZHZMpVKwGcImskxrfXEcx3fWo2dNSyQAa+HChXsS0dUi8k4T0v5XIrpqcHDwFpugqbTlZEITrkH0tSHo5SKSh4A0EcEr9qI4jm+2SvGl4VvJt3zfx43b4SY1642rV6/+dL2M301NJJgU3/czzPw9EUESoN2Y+QURQVax0+uxxavkQqlXXa7r7us4zoh/iIi8giwhSimltV6Vy+XeYm/J6jUzr203CAKkl4A6PHYlXw7D8Ml69azpiQRu9J2dnQsdxzmDiCDogjG9TEQPaa2/FsfxI/UCt1nbnT179oT29vYLmPk9uLAREWW0YS6I4/j6WrldNyt+teg34mqY+Ws4fiIGrb29/dDFixdXLENAsWMYC0SCMSOqdbZS6jJmRnJkqKsNMTMSaX8liiJk8rMJt4pYHTBoK6W+TURHmtfyIgJyPj6bza4roir7aIURgC1r0qRJfzRxNSCS86Mowi1m0SJVleraWCGSETyQIgFfUeN9CecclKdzudzV+Xz+Vms3KXjZOJ7nQX0cMTUzXt3kjRxzoFvyWC6XO8cqohWMZcUf9H3/KGZGTiHcriGH735RFL3OgbDiDW+lwjFFJBinuXmAAeqzzDzPAL1BRO7K5XJfsuf7bS8vSCky82VEdAQzY/fRLSLzkP6TGcoD+kctLS3nFKNhsu1W7RMFIoBkcrdCcJuZU1rrxUqp48MwrOtN5ZgjEkyGUVjDwr+EiN5udErxg3g8n8+fXCuNhgIXRkM9ZpT8Ib4NEoZ0wzqt9fuVUicx80mms0i29O10Ov15Sya1nb7Ozs53OI7zI+SqQYBekiRvzWaz2dr24vWtjUkiGR2m53kdRHSWUuoUbAOhZ8LM9yVJgkTKNl/O69cDjjTwcP2C2TbjFuAzq1evfnD69Ol7IFMfM5+AXZ5R+f9ZLpc7zx5zavMzdl13llIKwuiQfoCW8a1RFGFt193+N6aJBEbYIAh2ExHomXwYScqN+3c2SZIzjGxjXbeEtVmChbWCFI/MjHAD4ITr3kuGh4ev7enpGcbtmO/78Nv5DDPDAxbX7fAovmNoaOisauZMKaz3Y/sps8s+Bde8IgLieBJG1kZJ1TLWiWRkdXmehyxzxyilrjFGw5eYGQmdHuzr67uo2lL9zbDEPc9DIvCTlVKfEBHEbSAP8xlxHD+3Uf85k8nMSqVSXxzVhjF+JjdB7MjGOlVvpj3PgzzmRSLSjux5WuvTWltbf/Loo49WPCF4KaMYF0QCYCCMi7zCzPxxaMCKyI7MjARcDxPRN6IoeqARtoilTGIl3vE873NKqY8QEUhkHTMfG4Yhgr82FcfBLg8Z9kAm79FarzG+O3cw82csmVRiNl5bx5w5c3aYPHnynSIyFzmJmPnhXC53ZiMdKccNkWBqOjo6JqdSqTen02ncue9rEmvDiWeliNzGzFePtx/CggULtnccBzJ9uO7FQoXA0a1DQ0PnmiPN5n4ZKgiCPZIk+YzjOCeJyKgEJvKpnLvJLqbyv6zxVSOOlFcyM2KdFDLn5fP5fbu7uyFk1DBlXBGJQV15nuc7jvM2EbkAX2Bz3MF9/AO5XO6KZcuWQSlszBeQSDqdBgYnmputNhGBDWRxIbluTA5gqM+DTNYYuwk8ia+1MpiVWT7GwPoHZt4FO2bIW9ZDb2RboxmPRAJMVEdHx3atra0HMvOnzO4kJyLPgvGZ+cpa5QPZ1gRV69+hQTJp0iQkIHs3M4NAELOxmJk/GoYhBI0KuQngzs5OOAGe6jgOkjIhxzA0Q+9USt1uMLTG7BInccaMGRN33nlnZJw8iojegMx5+Xz+kO7u7lUlVlm118YrkYwACjHjqVOnvimVSh0uIl9gZngKTmDmvzLzzUuXLr2q1pJ1VZvpjSoGibS1tV3qOA6Sj/0zbgFE5JvMfB3CCop0buKOjo6d2traEJdzvdZ6JTNPY+a1JqwdGflsKQEBKPYT0SeZGTdkKkmS93R1dcGWVzdX+C0NY1wTySgoxk6AJNvnExHsBCj/EJGfKaVuW7p0KZIy10yRu4Q1V9QrruvCHnKsUgokgqvee5n50nLcrCFArLWGJyx8Teab4+KftdY3QbR7vNmeipqQzTyMCGxmBom8F97FEOnu7+8/v1FvGC2RmEmEIba1tdUjIkRU4m9EEMMQC8Gkh3K53K0tLS1PNLM0ARz0mPlIqO8rpfaEY5nWOlRKXRJFEbRcyvrSYYe3/fbbH6SUQmImaLtC+hJqXT2Qxuzt7V1s5Rm3TTHGZ+R+IpoNN3iTGvW4QuxW2669Ok9YInktro7rujDEniIiexlCwXEH7vX4of1FRK5vRmkC+Ikw84+MQXQmM28vIqcnSfJAV1cXUm5WZMfV0dHR0tbWhvwq0Hj1iQiCSLC3/NqksDjDRg9v/cfsuu6JjuMg8rqFiJ4XkVPa29sfXLx4ccPmV7ZE8vo5VfPnz9+1paUF9gPEl7wFymBGZhCiyH8holBrfdfQ0NB9jRxR7Pv+YcZIN5pY7B0IExCRR+Dhq5Q6K4oijKciJDIKJfRMJk6cOAupK5RS/2bIJGXauUdr/dVC0oNW59vZ0LWy7/tHw3uViHY3/jyL165d+6FG38lZItnCujIObPCInY1IYqXUAiJCEBsKoonh8fmMiNwsIvdls9n+co8GFVriasGCBfA+/bxSapGIvMjM+xq3alzR/hnpOZE8PJfLrdyKr0jZ3QmCALq68Ji9iJlBYmkiGhCRLhG5/OWXX/5Vo575yx58CRVkMpk9UqkU0oIcCsEiIvqtiHykHNtVCd0o6RVLJNuALQgCLH5EEi/QWh+slDphlFBERDPz30QEIjOQeIyGhob+sLnkUiXNTpEvwWicSqVON2LA+yMPrLH1IB8sjMdfU0rdPzw8vKqGXpEjnrBE9F4Tjb1KRN7AzM9qrR/J5/OXL1u2DMfGcV1MZgQIcM0z1/FtWusTstksUnE2fLFEUuAUBUEwUWs9nYhgOzmGiPBD3dUcFWBDSRuX+7XIACgiWaUUrkDh6Nante53HKcXzQ0OVk4Rr7W1FVeD8N+Agfid5iYmb/qGOIzfaa1v01ovHxgY+OvTTz+NXUnNC34oRHQ4M38MyZyYGV6aL4tIjKPO8PDwA9XcHdV8wHBfYVIAAAYTSURBVEU0GAQBjjHnIdaJmScYDZ1z8vn83d3d3cjb1PDFEkmRU4Tz/3bbbYdYHfwwThYRSDtOZub20aqMzCPIBc5ZsKvAKQt/EEVb6QJ5hAnmD0L9EbX7gtkanwt7Tj6ff6YRFiTIOEmSOUqp80bTiEDvRERwRLwnjmN42Y6rEgQBdF9uIqL5IBEiWi0id/T29l7Q6HaRjSfKEkkZyzaTycxUSs12HAcCyXMQG8jMrrmlQPrLWhRoqSqTg+a3SikE3f2QmX+DXCeNeF3t+z7sTkghchoz41ZnMhEhgPLOwcHBy+t1NKzFZG3chud5xzAzdiG45YK+CD48SPL20ziOEZ3eNMUSSflThQC2Kfl8frJSaqqIbE9Eb3QcBzYV+AEgRQZ+KFgoONrsVn6T/18DPEiRd4aZVyVJcqPjOM/DCByGYV2OMIWODcZsrfW8VCr1ZWY+wAgpIfUFDLHfYOb74zjGWMrybSm0PzV+zuns7DwYBnFzRQ5fG1wM3sDM14dhiONxRW/Sqj0+SyRVQBhb+IGBgfbW1lYceWA0m+A4zoTh4eG84zgglYoVx3EG8/k8vmR9qVRqVSPuQLYyWPY8D3mJ3o/0q1rrPymlYJh9NkmS3yul/sHM36pnvpaKTdRGFRnx5stFZBYzrzH6L6chhUocxy9Wo81q12mJpNoIv1o/cN74TyVbxZcLX+2m+oJtBABudXYWEfibHMLM7xQR2JPWGl3SFVrr25k5G0XRQ8bWVEn8alnXiJ8IBKOICP5JkHL5c5IklziOc0eTfQReg5slklouI9vWFhFYtGhR+8DAwO6pVAqEAgEq2FEQlQySDJl5itb6Ka31d1Op1NIkSfqz2ewrTRRUCfmK/ZVSX8fRF7suHIO11h9Zs2bN/fVKtVmpJWmJpFJI2noqggCuiWG4Vkoh8A++J/sxM26+2s0NGHxO+pi5N0mSWCn1TH9//y2N7tjm+z7yLZ2Na3pE85or3jN6e3t/0Uy3M1uaZEskFVn+tpIKI+DMnTt34sSJE2GohkfxsUQEgywSdO1vjgRwxoFREtfHTxERpB7vasAo47TneYcrpaD9gl1Wr4ggIBR5l+5u5uPMxnNuiaTCvwBbXWURQETxtGnTZooInP+QlvVM42W8SikF1bA+iDIx83Mi8rckST5tsgNUtiMl1Aafo6lTp/4HXN5hUGXmHWEUT5Lk/X19fQ+OhZ3IKCyWSEpYIPaVuiAwomrX0tKyu+M4OyZJsgO8jJVShyGZF3oEPwwiWioijymlYFfZqi/Ghg0buqoRdGkc7451HAfOithRvQkhCkSU1Vr/eN26dbeNJRIZvU2oy6qwjVoEykBAZTKZNsdxIKa0p+M4n8SND+KdYKTF0QHhCkYLZYvNaK2XKKVW5/P5n7S0tKxZv379qCzkKz09PQgvKERu8jX1w0kxnU5/QUSQ4XEXZoaYNiKfHxORc5IkWdEIXsZlYL/ZV+2OpNKI2vpqjcCoov1cZj5OKYXkXbjNQcjCFte3yMhtOYy28AzGzgV2i1EiWc7MM5A03ej4Itxhm0VEdsIuBH8zc8bskpBD6SKt9e/jOIao+Fh0sNsy0NtEzT5gEWggBBClnSQJ5BMOEBEEwR0JDd4tdVFrvYNSaiejNYM8PlM28sWBUxiEn0Au8DotVMAaer9w+YfMRBsz/9SkOXkkDEPITDSrr882Z9ruSLYJkX2gmRCAZKZSalI6ncYPemvHmgnwooUCPpLLExGiklEQt4S/cUWLZFSIri6omF0OxK4hKHVeLpf7TZIkq8ZDVLMlkoKWiH1oLCIAo2gul9sznU4jh/FeZowtSilIHCLfEeQZkLC7mIJbmpZ8Pv/bsWgL2RIQlkiKWSL22bGKAM+aNQsh/JTP53natGlKKZXO5/MTWltbRxKoFVogGpVOp4eLTOlRaPUN+5wlkoadGtsxi0DzIGCJpHnmyvbUItCwCFgiadipsR2zCDQPApZImmeubE8tAg2LgCWShp0a2zGLQPMgYImkeebK9tQi0LAIWCJp2KmxHbMINA8ClkiaZ65sTy0CDYuAJZKGnRrbMYtA8yDwvxqYRIiF5YTcAAAAAElFTkSuQmCC\"},\"problemOriginCode\":\"0\",\"registerAdvise\":\"121\",\"problemOriginCodeLabel\":[\"\\\"双随机\\\"抽查\"],\"question\":[]}"; Map map= JSON.parseObject(str); //String jsonStr=new JSONObject(map).toJSONString(); // System.out.println("jsonStr="+jsonStr); //存放段落数据 /* for (int i=1;i<1;i++) { excelMapTemp = new HashMap(); excelMapTemp.put("filingRegister.no1", "one-"+i); excelMapTemp.put("filingRegister.no2", "two-"+i); excelMapTemp.put("filingRegister.no3", "three-"+i); excelMapTemp.put("filingRegister.no4", "four-"+i); excelMapTemp.put("filingRegister.no5", "five-"+i); excelMapList.add(excelMapTemp); }*/ //模板存放位置 String templatePath="D:/word/立案登记审批表.docx";//"D:/word/poi.docx";// //生成文档存放位置 String targetPath = "D:/word/立案"+ UUID.randomUUID() +".docx"; //初始化导出 PoiExportWord export = new PoiExportWord(templatePath); try { export.init(); } catch (IOException e) { e.printStackTrace(); } boolean flag=false; try { export.export(map); //0为表格的下标,第一个表格下标为0,以此类推 export.export(map, 0); flag=export.generate(targetPath); } catch (Exception e) { e.printStackTrace(); } if(flag){ // wordToPft("D:/word/f694a031-8b28-40ea-987e-ff16d081bcf2.docx","D:/word/45.pdf"); //XWPFDocument doc = new XWPFDocument(new FileInputStream(targetPath)); // 以下几行代码是把这个word文件转化成pdf文件 // wordToPdf1(targetPath,"D:/word/立案登记审批表.pdf"); //jsonStr=null; try { new DocxToPdf().docxToPdf(targetPath,"D:/word/立案登记审批表2.pdf"); } catch (IOException e) { e.printStackTrace(); } } }