导出生成word
用XML做就很简单了。Word从2003开始支持XML格式,大致的思路是先用office2003或者2007编辑好word的样式,然后另存为xml,将xml翻译为FreeMarker模板(后缀为.ftl),
最后用java来解析FreeMarker模板并输出Doc。经测试这样方式生成的word文档完全符合office标准,样式、内容控制非常便利,打印也不会变形,生成的文档和office中编辑文档完全一样。
然后将word另存为.xml文件,打开文件,找到title将其修改为${title},后面要替换的内容依次替换掉。然后将.xml文件后缀改为.ftl,导入.ftl模板文件到指定目录。加载jar包freemarker.jar
import freemarker.cache.ClassTemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Locale;
import java.util.Map;
public class test {
/**
* 导出生成word
*/
@RequestMapping("exportWord")
public void exportword(HttpServletRequest request, HttpServletResponse response, @RequestParam Map<String,String>paramMap) throws Exception{
File file = null;
Map<String,Object> result = gzpService.getWordData(paramMap);
String fileName = "电力监控工作票.doc";
try{
response.setCharacterEncoding("utf-8");
response.setContentType("application/msword");
response.setHeader("Content-Disposition","attachment;filename="+new String(fileName.getBytes("GBK"),"ISO-8859-1"));
exportWord(response.getOutputStream(),"gzo.ftl",result);
}catch (Exception e){
e.printStackTrace();
response.reset();
response.setContentType("text/html; charset=UTF-8");
String s = "<script>alert(\"导出'"+fileName+"'时出错!\");</script>";
response.getOutputStream().print(s);
}finally {
response.flushBuffer();
}
}
/**
* 导出word临时文件
*/
private void exportWord(ServletOutputStream sos, String model, Map<String,Object> dataMap){
Configuration configuration =new Configuration();
configuration.setDefaultEncoding("UTF-8");
configuration.setEncoding(Locale.getDefault(),"UTF-8");
try{
configuration.setClassForTemplateLoading(this.getClass(),"/template");//模板的路径
configuration.setTemplateLoader(new ClassTemplateLoader(this.getClass(),"/template"));
Template t = configuration.getTemplate(model,"UTF-8");
Writer out = new OutputStreamWriter(sos,"UTF-8");
t.process(dataMap,out);
out.close();
sos.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
修改.ftl文件,找到列表所在位置,将其要加入的列表加入到文件中。在列表前加入<#list list as l>(在它的头上加一个<#list 你的集合名称 as xxxx>),
并在结尾加上</#list>。修改list内容,在要输出的名字前面加上l.。如xuehao,修改为l.xuehao。这样有点像EL表达式的使用。
导出生成word的更多相关文章
- PowerDesigner将PDM导出生成WORD文档
PowerDesigner将PDM导出生成WORD文档 环境 PowerDesigner15 1.点击Report Temlates 制作模板 2.如果没有模板,单击New图标创建.有直接双击进入. ...
- java导出生成word(类似简历导出)
参考帖子: http://www.cnblogs.com/lcngu/p/5247179.html http://www.cnblogs.com/splvxh/archive/2013/03/15/2 ...
- java导出生成word
最近做的项目,需要将一些信息导出到word中.在网上找了好多解决方案,现在将这几天的总结分享一下. 目前来看,java导出word大致有6种解决方案: 1:Jacob是Java-COM Bridge的 ...
- 将HTML导出生成word文档
前言: 项目开发中遇到了需要将HTML页面的内容导出为一个word文档,所以有了这边随笔. 当然,项目开发又时间有点紧迫,第一时间想到的是用插件,所以百度了下.下面就介绍两个导出word文档的方法. ...
- 数据导出生成word附件使用POI的XWPFTemplate对象
比较常用的实现Java导入.导出Excel的技术有两种Jakarta POI和Java Excel.Jakarta POI 是一套用于访问微软格式文档的Java API.Jakarta POI有很多组 ...
- 如何在PowerDesigner将PDM导出生成WORD文档或者html文件
a) 使用PowerDesigner打开pdm文件 b) 点击Report Temlates 制作模板 点击PowerDesigner菜单栏“Report” -> ...
- PowerDesigner将PDM导出生成WORD文档--温习老知识
转:http://www.cnblogs.com/wudiwushen/archive/2010/05/13/1734812.html 今天的温习老知识,是如何将一个PD设计的PDM来导出WORD文档 ...
- PowerDesigner将PDM导出生成WORD文档(转)
今天的温习老知识,是如何将一个PD设计的PDM来导出WORD文档,这是一个非常实用的功能,可以在软件过程的数据库设计文档编写中节省N多时间, 那不废话了,我们就开始今天的讲解吧! 第一步,点击Repo ...
- java生成word
import freemarker.template.Configuration; import freemarker.template.Template; import javax.servlet. ...
- 数据库数据导入导出系列之五 C#实现动态生成Word(转)
1. 一个控制台例子,实现动态生成Word. 首先,添加引用:COM->Microsoft Word 11.0 Object Library. 2. 介绍几篇牛人写的关于操作Word的文章 [分 ...
随机推荐
- MySQL_demo_50道习题
title: MySQL_demo_50道习题 author: 杨晓东 permalink: MySQL_demo date: 2021-10-02 11:27:04 categories: - 投篮 ...
- ORACLE 创建只读用户
create user cxuser01 identified by test123 default tablespace USERS temporary tablespace TEMP; --创建 ...
- 最好用的 vue v-for直接循环案例
vue v-for直接循环数字,也就是固定次数 项目中需要做一个酒店星级,酒店星级就是固定的5星,根据后台返回的数据来显示几星级 <!--星级,循环固定次数 5次 根据酒店等级显示亮的星星和灰色 ...
- JQuery 页面滚动至指定元素位置
$(window).scrollTop($("#id").offset().top - 20);
- 服务器部署 halo博客项目
2020-8-9 13:45:14 有个进阶方法! 如果静态资源加载缓慢如图片,头像 则用CDN加速 (确实很秀!) https://cdn.jsdelivr.net/gh/你的用户名/你的仓库 ...
- (jmeter笔记)模拟用户各种场景压测
插件:standard set 1.jp@gc - Ultimate Thread Group(波浪式压测,最终线程组) Start Threads Count :设置启用并发数 Initial De ...
- linux smb
/etc/samba/smb.conf [global]workgroup =WORKGROUPsecurity = usermap to guest =Bad Userpassdb backend ...
- noi 1.1 5 输出保留12位小数的浮点数
描述 读入一个双精度浮点数,保留12位小数,输出这个浮点数. 输入 只有一行,一个双精度浮点数. 输出 也只有一行,保留12位小数的浮点数. 样例输入 3.1415926535798932 样例输出 ...
- Django基础篇 01- 初识Django
一.Django介绍 flask,FastApi是轻量级服务端开发框架 Django是重量级服务端开发框架 ORM:封装了数据库操作 form:校验请求数据 安装Django: pip install ...
- Linux deploy 32位系统 怎么安装宝塔怎么安装linux系统安装宝塔后搭建网站
getconf LONG_BIT 获取当前linux系统位数