zoukankan      html  css  js  c++  java
  • Java Web项目中使用Freemarker生成Word文档

    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.   
    3. import java.io.File;  
    4. import java.io.FileInputStream;  
    5. import java.io.IOException;  
    6. import java.io.InputStream;  
    7. import java.util.Enumeration;  
    8. import java.util.HashMap;  
    9. import java.util.Map;  
    10.   
    11. import javax.servlet.ServletException;  
    12. import javax.servlet.ServletOutputStream;  
    13. import javax.servlet.annotation.WebServlet;  
    14. import javax.servlet.http.HttpServlet;  
    15. import javax.servlet.http.HttpServletRequest;  
    16. import javax.servlet.http.HttpServletResponse;  
    17.   
    18. import com.lovo.util.WordGenerator;  
    19.   
    20. /** 
    21.  * Servlet implementation class MyServlet 
    22.  */  
    23. @WebServlet("/saveDocServlet")  
    24. public class MyServlet extends HttpServlet {  
    25.     private static final long serialVersionUID = 1L;  
    26.   
    27.     @Override  
    28.     protected void service(HttpServletRequest req, HttpServletResponse resp)  
    29.             throws ServletException, IOException {  
    30.         req.setCharacterEncoding("utf-8");  
    31.         Map<String, Object> map = new HashMap<String, Object>();  
    32.         Enumeration<String> paramNames = req.getParameterNames();  
    33.         // 通过循环将表单參数放入键值对映射中  
    34.         while(paramNames.hasMoreElements()) {  
    35.             String key = paramNames.nextElement();  
    36.             String value = req.getParameter(key);  
    37.             map.put(key, value);  
    38.         }  
    39.       
    40.         // 提示:在调用工具类生成Word文档之前应当检查全部字段是否完整  
    41.         // 否则Freemarker的模板殷勤在处理时可能会由于找不到值而报错 这里临时忽略这个步骤了  
    42.         File file = null;  
    43.         InputStream fin = null;  
    44.         ServletOutputStream out = null;  
    45.         try {  
    46.             // 调用工具类WordGenerator的createDoc方法生成Word文档  
    47.             file = WordGenerator.createDoc(map, "resume");  
    48.             fin = new FileInputStream(file);  
    49.               
    50.             resp.setCharacterEncoding("utf-8");  
    51.             resp.setContentType("application/msword");  
    52.             // 设置浏览器下面载的方式处理该文件默认名为resume.doc  
    53.             resp.addHeader("Content-Disposition""attachment;filename=resume.doc");  
    54.               
    55.             out = resp.getOutput
  • 相关阅读:
    Vue.js 初尝试
    docker 搭建lnmp开发环境
    【转】【Salesfoece】在 Apex 中得到 sObject 的信息
    【转】【Salesfoece】Approval Process 在 Apex 中的使用
    【转】【Salesfoece】Apex 中 PageReference 的使用
    「codeforces
    「二次剩余」Tonelli
    「loj
    pytest---mock使用(pytest-mock)
    Django---setting文件详解
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7381093.html
Copyright © 2011-2022 走看看