POI根据docx文件生成word文档(jeesite)
2017-12-21 18:19
483 查看
/** * 功能描述: * * @param params 替换参数 * @param fileName 文件名 * @param request HttpServletRequest * @param response HttpServletResponse * @author Cloud */ public static void exportWord(Map<String, Object> params,String fileName, HttpServletRequest request, HttpServletResponse response){ // 获取应用的根路径 String servletContextRealPath = request.getServletContext().getRealPath(""); XWPFDocument doc; // 获取模板文件 InputStream is = null; try { is = new FileInputStream(servletContextRealPath + "/template/"+fileName); } catch (FileNotFoundException e) { e.printStackTrace(); } try { doc = new XWPFDocument(is); //输出到客户端:设置发送到客户端得响应的内容类型 response.setContentType("application/vnd.ms-excel"); //设置下载文件名 response.setHeader("Content-disposition","attachment;filename="+fileName); //替换表格里面的变量 ExportWord.replaceInPara(doc, params); //替换表格里面的变量 ExportWord.replaceInTable(doc, params); OutputStream os = response.getOutputStream(); doc.write(os); /*ExportWord.close(os); ExportWord.close(is); os.flush(); os.close();*/ } catch (IOException e) { e.printStackTrace(); } }
注意:OutputStream 不可以关闭不然会报response已提交的异常
替换变量
/** * 替换段落里面的变量 * * @param doc 要替换的文档 * @param params 参数 */ public static void replaceInPara(XWPFDocument doc, Map<String, Object> params) { Iterator<XWPFParagraph> iterator = doc.getParagraphsIterator(); XWPFParagraph para; while (iterator.hasNext()) { para = iterator.next(); replaceInPara(para, params); } } /** * 替换段落里面的变量 * * @param para 要替换的段落 * @param params 参数 */ public static void replaceInPara(XWPFParagraph para, Map<String, Object> params) { List<XWPFRun> runs; Matcher matcher; if (matcher(para.getParagraphText()).find()) { runs = para.getRuns(); int start = -1; int end = -1; String str = ""; for (int i = 0; i < runs.size(); i++) { XWPFRun run = runs.get(i); String runText = run.toString(); if ('$' == runText.charAt(0)&&'{' == runText.charAt(1)) { start = i; } if ((start != -1)) { str += runText; } if ('}' == runText.charAt(runText.length() - 1)) { if (start != -1) { end = i; break; } } } for (int i = start; i <= end; i++) { para.removeRun(i); 9feb i--; end--; } for (String key : params.keySet()) { if (str.equals(key)) { para.createRun().setText((String) params.get(key)); break; } } } }
replaceInPara跟replaceInTable的方法网上有很多例子可以参考的。
我一直在这里反复出现的一个问题是:本机下载文件是可以的,但是放到Linux服务器却报500错误,最后发现将图片当中的’template\’改为’template/’就可以了,原因是:Linux是以’/”分割的,Windows是用’\’分隔,就这个问题弄了3天o(╥﹏╥)o
相关文章推荐
- 使用 poi 根据 word 模板生成 word 文件
- poi-tl 自定义图片处理类,解决生成多个文件时图片重复出现在word文档中问题
- 使用 poi 根据 word 模板生成 word 文件
- java poi 基于模板文件替换字符生成word文档
- POI操作word模板并生成新的word.docx
- Java:使用POI实现word的docx文件的模板功能
- Java POI 生成Word文档
- python 使用CppHeaderParser库 根据c++头文件生成html说明文档表格
- Java根据word模板生成word文档之前言
- Java根据word模板生成word文档之后台解析和实现及部分代码(三)C
- java通过poi-tl使用word模版生成word文件
- POI读写Word docx文件
- freemarker根据word模板生成word文档中遇到的问题
- C#生成word文档 、word转pdf、合并pdf文件等
- POI生成WORD文档
- 根据模板生成word文档《转》
- java代码操作POI生成Word文档
- Java根据word模板生成word文档之设计详细思路---XML标签定义
- Java根据word模板生成word文档之后台解析和实现及部分代码(三)D
- java根据模板生成word文件