Web项目中生成Word文档的操作屡见不鲜。基于Java的解决方式也是非常多的,包含使用Jacob、Apache
POI、Java2Word、iText等各种方式,事实上在从Office 2003開始。就能够将Office文档转换成XML文件,这样仅仅要将须要填入的内容放上${}占位符,就能够使用像Freemarker这种模板引擎将出现占位符的地方替换成真实数据,这种方式较之其它的方案要更为简单。
以下举一个简单的样例。比方在Web页面中填写个人简历,然后点击保存下载到本地。效果图例如以下所看到的。
打开下载的Word文件
首先在Eclipse Java EE版中新建一个Dynamic Web Project,项目结构例如以下图所看到的
须要向项目中增加freemarker的JAR文件,能够通过以下的链接获得Freemarker的最新版本号:
http://freemarker.org/freemarkerdownload.html
模板文件resume.ftl是怎样生成的呢。事实上很easy,将须要的Word文档做好之后。选择另存为XML文件。另存之后建议用Editplus、Notepad++、Sublime等工具打开查看一下,由于有的时候你写的占位符可能会被拆开,这样Freemarker就无法处理了。
打开XML文件看看吧。假设刚才你写的${title}、${name}被xml文件给拆散了,改动一下XML文件就OK了。
改动过后另存为resume.ftl模板文件,例如以下所看到的:
接下来就是Servlet(也能够是Struts2的Action、Spring MVC的Controller等)和工具类WordGenerator的编写以及页面test.jsp的制作了,代码例如以下所看到的:
小服务的代码:
-
package com.lovo.servlet;
-
-
import java.io.File;
-
import java.io.FileInputStream;
-
import java.io.IOException;
-
import java.io.InputStream;
-
import java.util.Enumeration;
-
import java.util.HashMap;
-
import java.util.Map;
-
-
import javax.servlet.ServletException;
-
import javax.servlet.ServletOutputStream;
-
import javax.servlet.annotation.WebServlet;
-
import javax.servlet.http.HttpServlet;
-
import javax.servlet.http.HttpServletRequest;
-
import javax.servlet.http.HttpServletResponse;
-
-
import com.lovo.util.WordGenerator;
-
-
-
-
-
@WebServlet("/saveDocServlet")
-
public class MyServlet extends HttpServlet {
-
private static final long serialVersionUID = 1L;
-
-
@Override
-
protected void service(HttpServletRequest req, HttpServletResponse resp)
-
throws ServletException, IOException {
-
req.setCharacterEncoding("utf-8");
-
Map<String, Object> map = new HashMap<String, Object>();
-
Enumeration<String> paramNames = req.getParameterNames();
-
-
while(paramNames.hasMoreElements()) {
-
String key = paramNames.nextElement();
-
String value = req.getParameter(key);
-
map.put(key, value);
-
}
-
-
-
-
File file = null;
-
InputStream fin = null;
-
ServletOutputStream out = null;
-
try {
-
-
file = WordGenerator.createDoc(map, "resume");
-
fin = new FileInputStream(file);
-
-
resp.setCharacterEncoding("utf-8");
-
resp.setContentType("application/msword");
-
-
resp.addHeader("Content-Disposition", "attachment;filename=resume.doc");
-
-
out = resp.getOutput
Java Web项目中使用Freemarker生成Word文档
标签:word文档 art com data marker color long ons UI
原文地址:http://www.cnblogs.com/wzjhoutai/p/7381093.html