最近项目需要,生成的数据需要按照word 模板去生成相应的word文档。差了几个资料。发现以下两个博客解决了项目上的需求。地址如下
Java中根据模板导出数据到word的解决方案
http://blog.csdn.net/myyate/article/details/2049701
另一个是
jsp结合Velocity依据Word模板文件产生对应的数据文件
http://blog.csdn.net/Matol/article/details/6052555
部署tomcat项目可以参考
http://www.ibm.com/developerworks/cn/java/j-velocity/#5
velocity vm 模板 根据word另存为 mht文件后。修改mht代码 生成vm文件即可
服务器部分代码如下:
public String execute() throws Exception {
ServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
String sjid = (String) request.getParameter("sjid");
dhjldVo = this.dhjlManager.get(sjid);
// 初始化并取得Velocity引擎
VelocityEngine ve = new VelocityEngine();
// 取得velocity的模版
// String fileDir = DhjlQueryAction.class.getResource("/template").getPath();
Properties properties = new Properties();
//System.out.println("fileDirfileDi~~~"+fileDir);
properties.setProperty(ve.FILE_RESOURCE_LOADER_PATH,"\\template\\");
//指定,如"D:/template",但记住只要指定到文件夹就行了
ve.init(properties); //初始化
取得velocity的模版 如果有汉字 用 GBK 否则可能出现乱码
Template t = ve.getTemplate("hellovelocity.vm","GBK");//此处只要指明文件名就可以了.
// 取得velocity的上下文context
VelocityContext context = new VelocityContext();
// 把数据填入上下文
context.put("name", "潘");
context.put("date", (new Date()).toString());
// 为后面的展示,提前输入List数值
List temp = new ArrayList();
temp.add("1");
temp.add("2");
context.put("list", temp);
// 输出流 注释部分代码为 将流写入到服务器的文件
/* PrintWriter writer = new PrintWriter("E://单点登录.doc","UTF-8");
t.merge(context, writer);
writer.flush();
writer.close(); */
//此部分代码为 生产一个下载流 客户端页面会 弹出 另存为的对话框
response.setHeader("content-disposition", "attachment;filename=ldws.doc" );
response.setContentType("application/msword;");
response.setCharacterEncoding("GBK");
StringWriter writer =new StringWriter();
// 转换输出
t.merge(context, writer);
response.getOutputStream().print(writer.toString());
return null;
}