java利用freemarker生成word模板,并在网页端下载
java后台生成word技术选型
所用技术 | 优点 | 缺点 |
---|---|---|
Jacob | 功能强大 | 代码量大,设置样式繁琐;需要windows平台支持,无法跨平台 |
Apache POI | 读写excel功能强大、操作简单 | 一般只用它读取word,能够创建简单的word,不能设置样式,功能太少 |
Java2word | 功能强大,操作简单 | 能满足一般要求,不支持07格式,国人开发的,参考资料较多,需要windows平台支持 |
iText | 功能全,能满足一般要求 | 不能直接生成或操作doc文档,只能生成rtf格式的文档,rtf也可以用word打开 |
JSP | 操作简单,代码量少 | 能把当前页面导出简单的word,不能设置样式,美观性差,无法操作word |
XML(最佳) | 代码量少,样式、内容容易控制,打印不变形,完全符合office标准 | 需要提前设计好word模板,把需要替换的地方用特殊标记标出来 |
综上此文以XML为例
java后台生成word是编写好word后,添加占位符,对编辑好的文件另存为xml格式文件。把xml格式文件放入项目中,利用freemarker生成word文件,并下载.
freemarker引入项目
此次用的版本是freemarker-2.3.23.jar
可自行下载,或者maven导入
word生成xml模板
word2010编辑好文档,插入xml语法支持的变量,另存为xml格式文件保存。(word从2003开始支持xml格式,所以从03版word都可以保存为xml格式文档)
编写word
插入变量
word编辑完成,保存为xml格式文档,以我自己使用的word2010为例。
注:如果另存为的xml文件格式乱码,则需要在word中设置为utf-8编码保存。设置保存编码位置:文件-选项-高级-滚动滚轮找到 Web选项并点击进入-选择编码,按如下图进行设置点击确定。此时xml文档编码为utf-8,项目编码也设置为utf-8即可。
word编码设置截图
另保存为xml文件时的截图
改写生成的xml模板
word生成为xml文档后,会出现原本在一起的变量被分开了,如图,此时需将图中蓝色部分删掉。届时模板文件已经做好了。
后台代码
此后台代码为网页端下载word,如需下载到硬盘可另行改写代码
package com.demo.controller;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet