搜索热词

前言

最近做了一个调查问卷导出的功能,需求是将维护的题目,答案,导出成word,参考了几种方案之后,选择功能强大的freemarker+固定格式之后的wordxml实现导出功能。导出word的代码是可以直接复用的,于是在此贴出,并进行总结,方便大家拿走。

实现过程概览

先在word上,调整好自己想要的样子。然后存为xml文件。保存为freemarker模板,以ftl后缀结尾。将需要替换的变量使用freemarker的语法进行替换。最终将数据准备好,和模板进行渲染,生成文件并返回给浏览器流。

详细的实现过程

准备好word的样式

我们新建一个word,我们应该使用Microsoft office,如果使用wps可能会造成样式有些不兼容。在新建的office中,设置好我们的表格样式。我们的调查问卷涉及到四种类型,单选,多选,填空,简答。我们做出四种类型的示例。

样式没有问题后,我们选择另存为word xml 2003版本。将会生成一个xml文件。

格式化xml,并用freemarker语法替换xml

我们可以先下载一个工具 firstobject xml editor,这个可以帮助我们查看xml,同时方便我们定位我们需要改的位置。

复制过去之后,按f8可以将其进行格式化,左侧是标签,右侧是内容,我们只需要关注w:body即可。

像右侧的调查问卷这个就是个标题,我们实际渲染的时候应该将其进行替换,比如我们的程序数据map中,有title属性,我们想要这里展示,我们就使用语法${title}即可。

freemarker的具体语法,可以参考freemarker的问题,在这里我给出几个简单的例子。

比如我们将所有的数据放置在dataList中,所以我们需要判断,dataList是不是空,是空,我们不应该进行下面的逻辑,不是空,我们应该先循环题目是必须的,答案是需要根据类型进行再次循环的。语法参考文档,这里不再赘述。

程序端引入freemarker

org.freemarker

freemarker

将我们的flt文件放在resources下的templates下。

后端代码实现

此代码可以复用,在此贴出

public class WordUtils {

private static Configuration configuration = null;

private static final String templateFolder = WordUtils.class.getClassLoader().getResource("").getPath()+"/templates/word";

static {

configuration = new Configuration();

configuration.setDefaultEncoding("utf-8");

try {

configuration.setDirectoryForTemplateLoading(new File(templateFolder));

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* @Description:导出word,传入request,response,map就是值,title是导出问卷名,ftl是你要使用的模板名

*/

public static void exportWord(HttpServletRequest request,HttpServletResponse response,Map map,String title,String ftlFile) throws Exception {

Template freemarkerTemplate = configuration.getTemplate(ftlFile);

File file = null;

InputStream fin = null;

ServletOutputStream out = null;

try {

file = createDocFile(map,freemarkerTemplate);

fin = new FileInputStream(file);

String fileName = title + ".doc";

response.setCharacterEncoding("utf-8");

response.setContentType("application/msword");

response.setHeader("Content-Disposition","attachment;filename="

+fileName);

out = response.getOutputStream();

byte[] buffer = new byte[512];

int bytesToRead = -1;

while((bytesToRead = fin.read(buffer)) != -1) {

out.write(buffer,bytesToRead);

}

}finally {

if(fin != null) fin.close();

if(out != null) out.close();

if(file != null) file.delete();

}

}

/**

* @Description:创建doc文件

*/

private static File createDocFile(Map,?> dataMap,Template template) {

File file = new File("init.doc");

try {

Writer writer = new OutputStreamWriter(new FileOutputStream(file),"utf-8");

template.process(dataMap,writer);

writer.close();

} catch (Exception e) {

e.printStackTrace();

}

return file;

}

}

有了工具类后,我们准备好我们的map数据。map里面的数据大家可以自行定义。然后调用utils中的导出方法即可。

WordUtils.exportWord(request,response,dataMap,"word","demo.ftl");

结语

至此已经结束了,十分的好用,有疑问的话,可以评论交流。

相关文章

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

freemarker+生成java_Freemarker + xml 实现Java导出word相关推荐

  1. Freemarker + xml 实现Java导出word

    前言 最近做了一个调查问卷导出的功能,需求是将维护的题目,答案,导出成word,参考了几种方案之后,选择功能强大的freemarker+固定格式之后的wordxml实现导出功能.导出word的代码是可 ...

  2. java导出word的几种方式

    目前来看,java导出word大致有6种解决方案: 1:Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁.使用Jacob自带的DLL动态链接库,并通过J ...

  3. java导出word纸张方向_java导出word的几种方式

    目前来看,java导出word大致有6种解决方案: 1:Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁.使用Jacob自带的DLL动态链接库,并通过J ...

  4. Java导出word 图片重复

    Java导出word 需要的库 <dependency><groupId>org.freemarker</groupId><artifactId>fre ...

  5. java_导出_word_[转载]java导出word的5种方式

    在网上找了好多天将数据库中信息导出到word中的解决方案,现在将这几天的总结分享一下.总的来说,java导出word大致有5种解决方案: 1:Jacob是Java-COM Bridge的缩写,它在Ja ...

  6. 目前java导出word的6种解决方案

    文章转载自:http://www.cnblogs.com/lcngu/p/5247179.html 最近做的项目,需要将一些信息导出到word中.在网上找了好多解决方案,现在将这几天的总结分享一下. ...

  7. 【Java用法】使用Java导出word文档的解决方案(适用于Windows电脑)

    目录 实现方式一.通过原生的POI 实现方式二.通过Hutool工具包 步骤1.添加pom依赖 步骤2.编写几行代码 步骤3.启动项目,大功告成 实现的效果 最近在做一个word导出功能,需求非常简单 ...

  8. JAVA导出Word文档工具EasyWord

    介绍 基于Apache poi封装,在上层做了模型转换的封装,让使用者更加简单方便 只支持docx的导出,不支持doc 下面废话少说 让我们以最快的方式学会用java导出word文档 组件依赖 依赖 ...

  9. 【Java用法】使用Java导出word文档的解决方案(适用于从服务器上下载到本地电脑)

    本文目录 一.Controller 二.Service 接口类 三.ServiceImpl 实现类 四.Content-Type 类型与MIME Type类型对照表 最近在做一个word导出功能,需求 ...

最新文章

  1. MFC中显示 .bmp格式的位图
  2. centos查看端口命令
  3. wordpress--SEO们的福音
  4. git查看某个文件的修改历史
  5. mysql 内置功能 存储过程介绍
  6. acdream 1023 xor按位思考
  7. (十)IDEA添加mybatis-mapp.xml文件
  8. 基于Jenkins+Gitlab的自动化部署实战
  9. javascript中浅拷贝和深拷贝的理解
  10. Oracle树反向查询的优化(转载)
  11. 毕竟这个世界互相适合的人太少了
  12. mysql基础5-数据的操作
  13. 易语言制作计算机按键指令,易语言键代码一览表
  14. flash mx拖拽实例_Flash MX 2004 Professional的百叶窗过渡效果
  15. 黑客概念与文化(课程笔记)
  16. 酷我音乐解析API,支持搜索、歌单、单曲、专辑、MV解析、多音质切换、图片大小切换
  17. 100 位测试工程师的 2018 年度关键词与 2019 展望
  18. 血氧仪电路方案开发--PCBA方案
  19. 最新!2020年11月编程语言排行榜出炉
  20. 一行Python能实现什么丧心病狂的功能?

热门文章

  1. 【Elasticsearch】elasticsearch 查询 高亮
  2. 【clickhouse】clickhouse 一些博客链接
  3. 【clickhouse】MergeTree引擎的固定/自适应索引粒度
  4. CheckstyleException: cannot initialize module TreeWalker - TreeWalker is not allowed as a
  5. 【Siddhi】Siddhi的语法关键字
  6. 【Linux】linux系统很卡排除
  7. Spring : @Repository 注解
  8. hive集群安装,连接mysql
  9. 11-Elasticsearch的X-Pack
  10. android listview item 展开动画,android的ListView点击item使item展开的做法的实现代码