使用 poi 根据 word 模板生成 word 文件

转载 2015年11月17日 17:49:28

本例子是一个 maven 项目,要引入 poi 的依赖片段如下:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.13</version>
</dependency>

<!-- 支持Word文档的操作 -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-scratchpad</artifactId>
    <version>3.13</version>
</dependency>

注意:要想让 poi 操作 word ,须要引入 poi-scratchpad 这个模块。

本例子在开源中国代码托管的地址:
李威小朋友 / poi-word-template - 代码托管 - 开源中国社区
https://git.oschina.net/weimingge/poi-word-template

示例代码:

@Controller
@RequestMapping("/word")
public class DownLoadController {

    @RequestMapping(value = "/download",method = RequestMethod.POST)
    public void download(HttpServletRequest request,HttpServletResponse response){
        /**
         * 获取请求参数
         */
        String pzjg =  request.getParameter("pzjg"); // 篇章结构
        String gdnr =  request.getParameter("gdnr"); // 观点内容
        String jsyy =  request.getParameter("jsyy"); // 句式运用
        String chyf =  request.getParameter("chyf"); // 词汇语法
        String xzgf =  request.getParameter("xzgf"); // 写作规范

        // 获取应用的根路径
        String servletContextRealPath = request.getServletContext().getRealPath("");
        // 获取模板文件
        File templateFile = new File(servletContextRealPath + "/template/template1.doc");


        ByteArrayOutputStream ostream = null;
        try {
            FileInputStream in = new FileInputStream(templateFile);
            HWPFDocument hwpfDocument = new HWPFDocument(in);
            // 替换读取到的 word 模板内容的指定字段
            Map<String,String> params = new HashMap<>();
            params.put("$PZJG$",pzjg);
            params.put("$GDNR$",gdnr);
            params.put("$JSYY$",jsyy);
            params.put("$CHYF$",chyf);
            params.put("$XZGF$",xzgf);
            Range range = hwpfDocument.getRange();
            for(Map.Entry<String,String> entry:params.entrySet()){
                range.replaceText(entry.getKey(),entry.getValue());
            }
            // 输出 word 内容文件流,提供下载
            response.reset();
            response.setContentType("application/x-msdownload");

            // 随机生成一个文件名
            UUID randomUUID = UUID.randomUUID();
            String attachmentName = randomUUID.toString();
            response.addHeader("Content-Disposition", "attachment; filename=\""+ attachmentName + ".doc\"");
            ostream = new ByteArrayOutputStream();
            ServletOutputStream servletOS = response.getOutputStream();
            hwpfDocument.write(ostream);
            servletOS.write(ostream.toByteArray());
            servletOS.flush();
            servletOS.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

参考资料:

poi 根据模板调用静态数据
http://download.csdn.net/detail/lxlli/6413637
http://blog.csdn.net/classicbear/article/details/7549035
http://haohaoxuexi.iteye.com/blog/2031335
http://wenku.baidu.com/link?url=N65DYwHXIdl5NjZVgdJgzIgRu5VL2HyNFJ4kGCX0qlTYZTpp0U89817fQ-33898wNa7ms-pPShp2MigCceqxHZx6if2ddI68eMbp-qkBXBS
http://blog.csdn.net/longshengguoji/article/details/39433307
http://meigesir.iteye.com/blog/1539358
http://itindex.net/detail/45161-poi-excel-word

poi 动态调用数据

http://doc.okbase.net/53873039oycg/archive/110664.html

POI操作word模板并生成新的word.docx

XWPFDocument对象POI是apache提供的可以操作word文档的第三方jar。POI能操作word是使用XWPFDocument对象。 XWPFDocument对象可以解析docx文件,在...
  • Harry_ZH_Wang
  • Harry_ZH_Wang
  • 2017年03月18日 01:26
  • 5183

Java POI通过模板方法生成word文档

Java POI通过模板方法生成word文档
  • u013475360
  • u013475360
  • 2016年11月30日 10:53
  • 1870

Java:封装POI实现word的docx文件的简单模板功能

一:场景 通过Word模板来实现动态的word生成二: 基本要求 1:替换文本中的内容 2:替换表格中的内容(不用动态生成表格) 3:替换后的内容应该与替换前的内容格式相同 4:模板修改方便...
  • sadwxds
  • sadwxds
  • 2016年05月06日 13:51
  • 6682

poi操作word模板

  • 2013年10月17日 15:30
  • 2.52MB
  • 下载

POI完成从多个word模板到一个报告(word2007)

背景:          先说一下,作者为什么要选择POI来生成报告。之前项目中使用的是jacob,但是偶尔会出现windows错误提示框,word已停止工作,每次都需要手动关闭这个提示框,才能继续生...
  • pengchong333
  • pengchong333
  • 2016年12月22日 18:05
  • 1934

WEB项目中使用POI修改word模板并实现页面下载

  • 2017年06月10日 12:02
  • 2.98MB
  • 下载

POI模板导出word

java使用poi模板方式完成word导出,亲测可用。
  • u011752272
  • u011752272
  • 2016年04月17日 22:18
  • 2511

poi操作word文档总结

POI分段落生成纯Word动态模板并导入数据 导出数据,可以用word另存为xml格式的ftl文件,变量用${变量名}表示,然后在类中通过 freemarker去替换变量。 但是怎么导入w...
  • mike_caoyong
  • mike_caoyong
  • 2014年06月05日 17:18
  • 9692

Java POI通过模板方法生成word文档

大家可能看过另一篇博客,这个是博客地址点击打开链接 里面说到使用模板的方式生成word文档,但是给出的代码并没有起效,这里我稍作了修改,这个是word文档模板方法操作工具类: package util...
  • mate_ge
  • mate_ge
  • 2016年03月06日 12:54
  • 21301

通过一个word模板来生成新的word并且填充内容

关于用Java编写生成word文档,动态添加数据到word文档的一些心得,经过翻阅了无数的有用的和无用的资料以后,总算找到了一种靠谱的方法 1.概述 经过反反复复的查阅资料,总算找到了一个靠谱的生...
  • u012438476
  • u012438476
  • 2017年03月21日 16:19
  • 2086
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用 poi 根据 word 模板生成 word 文件
举报原因:
原因补充:

(最多只允许输入30个字)