项目中需要用 java 程序生成doc 文件,百度一番,发现FreeMarker 的评价比较高。

FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出,至于想详细了解 FreeMarker 的请自行百度。

这篇博文主要是总结自己在用网上例子时遇到的坑。吃水不忘挖井人,还是要感谢分享技术的前辈。

参照过的博客链接:

1. 制作 Word 模版

2. 将 Word文档保存为 xml

3. freemarker 标签语言替换字段

用 Firstobject free XML edito 打开,将你需要动态生成的字段打上标记,${} 这样就可以

FreeMarker 还支持需要丰富的标记,如果你想展示更复杂和丰富的内容,都可以实现,具体遇到需求时问度娘即可。

4. 引入项目

将 xml 文件更改后缀名 为 .ftl, 然后引用到你的项目中

需要注意的问题:

a. word 版本不能低于 2003 ,因为 2003 才开始支持 xml;

b.用 Firstobject free XML edito 打开 要编辑的 xml 文件时,xml 不要放在含有中文路径的目录中【编辑器会无响应,然后你知道的.....】。

实现的代码如下:

1 importjava.io.BufferedWriter;2 importjava.io.File;3 importjava.io.FileOutputStream;4 importjava.io.OutputStreamWriter;5 importjava.io.Writer;6 importjava.sql.Connection;7 importjava.sql.ResultSet;8 importjava.util.HashMap;9 importjava.util.Map;10

11 importcn.sina.ttjava_13.database.DB;12 importfreemarker.template.Configuration;13 importfreemarker.template.Template;14

15 public classWordTest {16

17 private Configuration configuration = null;18 privateConnection conn;19 privateResultSet res;20

21 publicWordTest() {22 configuration = newConfiguration();23 configuration.setDefaultEncoding("UTF-8");24 }25

26 public voidcreateWord() {27 Map dataMap = new HashMap();28 try{29 String selectSql = "SELECT ID,NAME,NORMALPRICE,MEMBERPRICE FROM T_PRODUCT WHERE 1 LIMIT 10";30 conn =DB.getConn();31 res =DB.getRs(conn, selectSql);32 while(res.next()){33 dataMap.put("id", res.getString("id").trim());34 dataMap.put("name", res.getString("name").trim());35 dataMap.put("normalprice", res.getString("normalprice").trim());36 dataMap.put("memberprice", res.getString("memberprice").trim());37

38 configuration.setClassForTemplateLoading(this.getClass(), "/template"); //FTL文件所存在的位置

39 Template template = configuration.getTemplate("Product.ftl");40

41 File outFile = new File("D:/temp/"+ res.getString("name").trim().replaceAll("/", "") +".doc");42 Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"UTF-8"));43 template.process(dataMap, out);44 out.close();45 }46 DB.close(res);47 DB.close(conn);48 } catch(Exception e) {49 e.printStackTrace();50 }51 }52

53 public static voidmain(String[] args) {54 WordTest test = newWordTest();55 test.createWord();56 }57 }

a. 代码数据库为 mysql ,将查询到的数据,动态填入到wod 中;

b.template.process(),接受一个 Map 和 输入流做为入参,Map 既是你需要动态生成到 doc 里面的数据,字段名必须与你在 .ftl 里面定义的一致;

c. 我觉得数据的来源可以很多,程序计算的结果,数据库存储的数据,页面点击的数据.........

d. 如果你想利用这段代码,需要有一个 .ftl 文件,并且在你的项目 src 目录下面新建 template 目录;

本文转自Orson博客园博客,原文链接:http://www.cnblogs.com/java-class/p/4686325.html,如需转载请自行联系原作者

java 生成复杂的word_Java 动态生成复杂 Word相关推荐

  1. Java中利用freemarker模板动态生成word含表格

    最近公司有导出word的需求,由于word的样式有的很复杂所以记录一下Java中利用freemarker模板动态生成word含表格,以防以后忘记. 1.word表格的模板 删掉无用的数据留下基础的样式 ...

  2. java 复杂word_Java 动态生成复杂 Word

    Java 动态生成复杂 Word 阅读目录 1. 制作 Word 模版,将你需要动态生成的字段用${}替换. 2. 将 Word文档保存为 xml . 3. 引入项目. 项目中需要用 java 程序生 ...

  3. 动态生成java类_Java 运行时动态生成class

    Java是一门静态语言,通常,我们需要的class在编译的时候就已经生成了,为什么有时候我们还想在运行时动态生成class呢? 因为在有些时候,我们还真得在运行时为一个类动态创建子类.比如,编写一个O ...

  4. Java使用FreeMarker模版技术动态生成word实践

    一.序言 在日常开发中,常常有动态word文件生成的需求,通过编制模版,然后动态修改word内容以组合成新的文件.报告单.请假单.发票页等都可以使用动态生成word来解决. 笔者总结归纳出通用技术要点 ...

  5. bootstrap自动生成html,Bootstrap框架动态生成Web页面文章内目录的方法

    引言在写博客的时候,为了条理性起见,经常会使用许多小标题,当文章长时,需要来回在不同的标题之间穿梭,如果手动添加目录,添加锚点,实在是麻烦,为此,可以动态生成一块目录区域,并使用Bootstrap提供 ...

  6. html动态生成按钮事件,javascript 动态生成按钮并添加事件时为什么不响应?

    javascript 动态生成按钮并添加事件时为什么事件不响应?(谢谢大家!) 1)html部分 1 2 3 4 5 6 7 8 9 10 11 12 2)script部分 //_t 为一个现在的Ta ...

  7. php动态生成页面结构,PHP 动态生成静态HTML页面示例代码

    temp.html {penglig_site_title} test.php header('content-type:text/html; charset=utf-8');//防止生成的页面乱码 ...

  8. Android开发如何理解Java静态代理 动态代理及动态生成代理对象原理 看这篇就够了

    动态代理与静态代理 前言 代理模式 静态代理 动态代理 JDK代理 动态生成代理对象原理 生成class数据源码 动态代理类真身 总结 前言 近期在研究Hook技术,需要用到动态代理,说到动态代理就会 ...

  9. Java篇 - 代理模式和动态代理实现原理

    设计模式中有一种模式叫代理模式,Spring框架离不开动态代理技术,Android hook技术用到了反射 + 动态代理,Framework中我们也经常看到各种proxy,如ApplicationTh ...

最新文章

  1. java 办公,中文JAVA技术网
  2. 纯CSS实现多级菜单,兼容IE6
  3. 微信小程序长按保存图片
  4. 如何使用graphpad做柱形图_系列文章 如何使用PaddleDetection做一个完整项目(三)...
  5. php求及格,详解PHP通过递归实现提成计算
  6. pythonweb面试常见问题_python和web框架面试题目整理(3)
  7. java为什么需要枚举_java – 什么是枚举,为什么它们有用?
  8. 一个flash网页图片播放器
  9. php微信浏览器清空cookie,微信内置浏览器中的cookie很诡异呀
  10. tomcat 请求超时_高并发环境下如何优化Tomcat性能?看完我懂了!
  11. [leetcode]139. 单词拆分
  12. 宝藏机器学习资料分享(超高质量pdf直接下载)
  13. 人工智能时代的投影融合软件
  14. OpenKG 祝大家 2021 新年快乐 —「2020 精选文章汇编」
  15. linux ipcs字段含义 共享内存删除 ipcs dest状态
  16. 64G的EXFAT格式的U盘如何格式化为FAT32
  17. excel使用vb选中指定单元格,到指定行的最后一行有数据的等行数的单元格区间(列等高复制)
  18. 关于Windows聚焦一直保持一个图不变(搬运后加了图,留着以后用)
  19. 共享yum资源库下一键安装虚拟机的脚本3【完全自动化】
  20. ajax上传文件:ajaxSubmit使用

热门文章

  1. Play on Words UVA - 10129 (欧拉回路)
  2. gnss观测质量检查软件下载_【速查】你可能下载了个假“北斗”!
  3. quartz的负载均衡
  4. matlab模式识别实验二,模式识别实验二
  5. mysql数据库日志太多_数据库Log太多如何清理但是不影响mysql原本的表数据。
  6. 树莓派 ubuntu gpio_树莓派学习笔记(一)输入输出GPIO
  7. com.alibaba.fastjson.JSONException: can‘t create non-static inner class inst
  8. 从spring管理的datasource中获取connection
  9. 电脑出现 flash update failed 解决方法
  10. Java10的新特性