关闭

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

标签: poi
3499人阅读 评论(0) 收藏 举报
分类:

本例子是一个 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

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:506841次
    • 积分:6234
    • 等级:
    • 排名:第3961名
    • 原创:223篇
    • 转载:31篇
    • 译文:0篇
    • 评论:92条
    常用链接
    我的 GitHub 地址:https://github.com/weimingge14/
    我的码云地址:http://git.oschina.net/weimingge
    我的新浪微博:http://weibo.com/u/2194939432
    我的通知
    最近写的文章主要在 GitHub 的博客上。后续会把质量比较高的内容转移过来。如果有的朋友想先预览一下,可以直接访问 http://www.liwei.party/。