java web 操作word文档_Java Web项目中使用Freemarker生成Word文档

Web项目中生成Word文档的操作屡见不鲜。基于Java的解决方式也是非常多的,包含使用Jacob、Apache

POI、Java2Word、iText等各种方式,事实上在从Office 2003開始。就能够将Office文档转换成XML文件,这样仅仅要将须要填入的内容放上${}占位符,就能够使用像Freemarker这种模板引擎将出现占位符的地方替换成真实数据,这种方式较之其它的方案要更为简单。

0f8c2262c15358746ea9a14c3dd62892.png

以下举一个简单的样例。比方在Web页面中填写个人简历,然后点击保存下载到本地。效果图例如以下所看到的。

04429e96cb756368e7ba83a7dbd9d97d.png

打开下载的Word文件

4f845f3e3eb9979c94cbe515d9711773.png

首先在Eclipse Java EE版中新建一个Dynamic Web Project,项目结构例如以下图所看到的

9508f125598934d3ad23c4493f910456.png

须要向项目中增加freemarker的JAR文件,能够通过以下的链接获得Freemarker的最新版本号:

b9fc41421c2b2d22079d5e5bb10ae989.png

模板文件resume.ftl是怎样生成的呢。事实上很easy,将须要的Word文档做好之后。选择另存为XML文件。另存之后建议用Editplus、Notepad++、Sublime等工具打开查看一下,由于有的时候你写的占位符可能会被拆开,这样Freemarker就无法处理了。

9d15ca6e0b3d83b5a723bbdb0e2f7d5e.png

打开XML文件看看吧。假设刚才你写的${title}、${name}被xml文件给拆散了,改动一下XML文件就OK了。

1a87da4444465013a2a4f1c165c99d50.png

改动过后另存为resume.ftl模板文件,例如以下所看到的:

9dfab5b3a423def1bdc3dac97d0d763d.png

接下来就是Servlet(也能够是Struts2的Action、Spring MVC的Controller等)和工具类WordGenerator的编写以及页面test.jsp的制作了,代码例如以下所看到的:

小服务的代码:

packagecom.lovo.servlet;

importjava.io.File;

importjava.io.FileInputStream;

importjava.io.IOException;

importjava.io.InputStream;

importjava.util.Enumeration;

importjava.util.HashMap;

importjava.util.Map;

importjavax.servlet.ServletException;

importjavax.servlet.ServletOutputStream;

importjavax.servlet.annotation.WebServlet;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importcom.lovo.util.WordGenerator;

/**

* Servlet implementation class MyServlet

*/

@WebServlet("/saveDocServlet")

publicclassMyServletextendsHttpServlet {

privatestaticfinallongserialVersionUID = 1L;

@Override

protectedvoidservice(HttpServletRequest req, HttpServletResponse resp)

throwsServletException, IOException {

req.setCharacterEncoding("utf-8");

Map map = newHashMap();

Enumeration paramNames = req.getParameterNames();

// 通过循环将表单參数放入键值对映射中

while(paramNames.hasMoreElements()) {

String key = paramNames.nextElement();

String value = req.getParameter(key);

map.put(key, value);

}

// 提示:在调用工具类生成Word文档之前应当检查全部字段是否完整

// 否则Freemarker的模板殷勤在处理时可能会由于找不到值而报错 这里临时忽略这个步骤了

File file = null;

InputStream fin = null;

ServletOutputStream out = null;

try{

// 调用工具类WordGenerator的createDoc方法生成Word文档

file = WordGenerator.createDoc(map, "resume");

fin = newFileInputStream(file);

resp.setCharacterEncoding("utf-8");

resp.setContentType("application/msword");

// 设置浏览器下面载的方式处理该文件默认名为resume.doc

resp.addHeader("Content-Disposition","attachment;filename=resume.doc");

out = resp.getOutput

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值