Web项目中生成Word文档的操作屡见不鲜。基于Java的解决方式也是非常多的,包含使用JacobApache
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的制作了,代码例如以下所看到的:

小服务的代码:

[java] view
plain
 copy

  1. package com.lovo.servlet;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.util.Enumeration;
  7. import java.util.HashMap;
  8. import java.util.Map;
  9. import javax.servlet.ServletException;
  10. import javax.servlet.ServletOutputStream;
  11. import javax.servlet.annotation.WebServlet;
  12. import javax.servlet.http.HttpServlet;
  13. import javax.servlet.http.HttpServletRequest;
  14. import javax.servlet.http.HttpServletResponse;
  15. import com.lovo.util.WordGenerator;
  16. /**
  17. * Servlet implementation class MyServlet
  18. */
  19. @WebServlet("/saveDocServlet")
  20. public class MyServlet extends HttpServlet {
  21. private static final long serialVersionUID = 1L;
  22. @Override
  23. protected void service(HttpServletRequest req, HttpServletResponse resp)
  24. throws ServletException, IOException {
  25. req.setCharacterEncoding("utf-8");
  26. Map<String, Object> map = new HashMap<String, Object>();
  27. Enumeration<String> paramNames = req.getParameterNames();
  28. // 通过循环将表单參数放入键值对映射中
  29. while(paramNames.hasMoreElements()) {
  30. String key = paramNames.nextElement();
  31. String value = req.getParameter(key);
  32. map.put(key, value);
  33. }
  34. // 提示:在调用工具类生成Word文档之前应当检查全部字段是否完整
  35. // 否则Freemarker的模板殷勤在处理时可能会由于找不到值而报错 这里临时忽略这个步骤了
  36. File file = null;
  37. InputStream fin = null;
  38. ServletOutputStream out = null;
  39. try {
  40. // 调用工具类WordGenerator的createDoc方法生成Word文档
  41. file = WordGenerator.createDoc(map, "resume");
  42. fin = new FileInputStream(file);
  43. resp.setCharacterEncoding("utf-8");
  44. resp.setContentType("application/msword");
  45. // 设置浏览器下面载的方式处理该文件默认名为resume.doc
  46. resp.addHeader("Content-Disposition", "attachment;filename=resume.doc");
  47. out = resp.getOutput
posted @ 2017-08-17 13:27 wzjhoutai 阅读(...) 评论(...) 编辑 收藏

Java Web项目中使用Freemarker生成Word文档的更多相关文章

  1. Java Web项目中使用Freemarker生成Word文档遇到的问题

    这段时间项目中使用了freemarker生成word文档.在项目中遇到了几个问题,在这里记录一下.首先就是关于遍历遇到的坑.整行整行的遍历是很简单的,只需要在整行的<w:tr></w ...

  2. springboot中使用freemarker生成word文档并打包成zip下载(简历)

    一.设计出的简历模板图以及给的简历小图标切图         二.按照简历模板图新建简历word文件 :${字段名},同时将图片插入到word中,并将建好的word文件另存为xml文件:    三.直 ...

  3. java使用freemarker 生成word文档

      java 生成word文档     最近需要做一个导出word的功能, 在网上搜了下, 有用POI,JXL,iText等jar生成一个word文件然后将数据写到该文件中,API非常繁琐而且拼出来的 ...

  4. FreeMarker生成Word文档

    FreeMarker简介: FreeMarker是一款模板引擎:即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具,它不是面向最终用户的,而是一个 ...

  5. 使用FreeMarker生成word文档

    生成word文档的框架比较多,比如poi,java2word,itext和freemarker. 调研之后,freemarker来实现挺简单的,具体步骤如下: 1. 新建word文档,占位符用${}, ...

  6. java使用freemarker生成word文档

    1.原料 开源jar包freemarker.eclipse.一份模板word文档 2.首先设计模板word文档 一般,通过程序输出的word文档的格式是固定的,例如建立一个表格,将表格的标题写好,表格 ...

  7. 用 Freemarker 生成 word 文档(包含图片)

    1. 用word写一个需要导出的word模板,然后存为xml格式. 2. 将xml中需要动态修改内容的地方,换成freemarker的标识符,例如: <w:p wsp:rsidR="0 ...

  8. 用 Freemarker 生成 word 文档

     阅读目录 添加图片 自定义载入模板 1.       用word写一个需要导出的word模板,然后存为xml格式. 2.       将xml中需要动态修改内容的地方,换成freemarker的 ...

  9. Freemarker生成word文档的时的一些&,>,<报错

    替换模板ftl中的内容的时候,一些特殊的字符需要转移,例如: &,<,> value为字符串 value.replace("&","& ...

随机推荐

  1. SDL相关学习

    原文地址:https://www.cnblogs.com/landmark/category/311822.html 介绍SDL图形库的使用 SDL显示文字 摘要: 前面教程里,我们只显示图片,没提到 ...

  2. 搭建自己的 github.io 博客

    1.前言 github.io 是基于 Github 的 repo 管理,这意味着咱们对其是有绝对的控制,这个跟放在第三方的平台比,可控性要好太多. 使用 github pages 服务搭建博客的好处有 ...

  3. 基于matplotlib的数据可视化 - 等高线 contour 与 contourf

    contour 与contourf 是绘制等高线的利器. contour  - 绘制等高线 contourf - 填充等高线 两个的返回值值是一样的(return values are the sam ...

  4. golang学习 ----获取URL

    package main import ( "fmt" "io/ioutil" "net/http" "os" ) fu ...

  5. .net core下直接执行SQL语句并生成DataTable

    .net core可以执行SQL语句,但是只能生成强类型的返回结果.例如var blogs = context.Blogs.FromSql("SELECT * FROM dbo.Blogs& ...

  6. ext2文件系统 - mke2fs

      上一遍博文的重点其实将ext2整体的组织框架,我们知道了ext2文件系统由块组组成,每个块组里面的组织形式.我们甚至直接把超级块和组描述符里面的内容,用十六进制形式展现了出来.这篇博文主要讲述如何 ...

  7. cucumber java从入门到精通(3)简单实现及断言

    cucumber java从入门到精通(3)简单实现及断言 上一节里我们定义了step的java代码实现文件,step就是测试步骤及断言的集合,我们先定义出来,以后可以驱动开发以及在持续集成时重用. ...

  8. 还没被玩坏的robobrowser(7)——表单操作

    背景 有一些站点是需要登录之后才能抓取内容的,另外做web测试的时候登录是家常便饭. 这一节里我们就以登陆testerhome为例,讲解一下robobrowser中form的操作. 预备知识 get_ ...

  9. Java 8 – Stream Collectors groupingBy count examples

    Java 8 – Stream Collectors groupingBy count examples 1. Group By, Count and Sort1.1 Group by a List ...

  10. C#基础课程之二变量常量及流程控制

    课堂练习:.一个四位整数 输出它的千位,百位,十位,个位 数字. ; ; % ; % ; ; Console.WriteLine("千位数" + b+" 百位数" ...