java 生成复杂的word_Java 动态生成复杂 Word
项目中需要用 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相关推荐
- Java中利用freemarker模板动态生成word含表格
最近公司有导出word的需求,由于word的样式有的很复杂所以记录一下Java中利用freemarker模板动态生成word含表格,以防以后忘记. 1.word表格的模板 删掉无用的数据留下基础的样式 ...
- java 复杂word_Java 动态生成复杂 Word
Java 动态生成复杂 Word 阅读目录 1. 制作 Word 模版,将你需要动态生成的字段用${}替换. 2. 将 Word文档保存为 xml . 3. 引入项目. 项目中需要用 java 程序生 ...
- 动态生成java类_Java 运行时动态生成class
Java是一门静态语言,通常,我们需要的class在编译的时候就已经生成了,为什么有时候我们还想在运行时动态生成class呢? 因为在有些时候,我们还真得在运行时为一个类动态创建子类.比如,编写一个O ...
- Java使用FreeMarker模版技术动态生成word实践
一.序言 在日常开发中,常常有动态word文件生成的需求,通过编制模版,然后动态修改word内容以组合成新的文件.报告单.请假单.发票页等都可以使用动态生成word来解决. 笔者总结归纳出通用技术要点 ...
- bootstrap自动生成html,Bootstrap框架动态生成Web页面文章内目录的方法
引言在写博客的时候,为了条理性起见,经常会使用许多小标题,当文章长时,需要来回在不同的标题之间穿梭,如果手动添加目录,添加锚点,实在是麻烦,为此,可以动态生成一块目录区域,并使用Bootstrap提供 ...
- html动态生成按钮事件,javascript 动态生成按钮并添加事件时为什么不响应?
javascript 动态生成按钮并添加事件时为什么事件不响应?(谢谢大家!) 1)html部分 1 2 3 4 5 6 7 8 9 10 11 12 2)script部分 //_t 为一个现在的Ta ...
- php动态生成页面结构,PHP 动态生成静态HTML页面示例代码
temp.html {penglig_site_title} test.php header('content-type:text/html; charset=utf-8');//防止生成的页面乱码 ...
- Android开发如何理解Java静态代理 动态代理及动态生成代理对象原理 看这篇就够了
动态代理与静态代理 前言 代理模式 静态代理 动态代理 JDK代理 动态生成代理对象原理 生成class数据源码 动态代理类真身 总结 前言 近期在研究Hook技术,需要用到动态代理,说到动态代理就会 ...
- Java篇 - 代理模式和动态代理实现原理
设计模式中有一种模式叫代理模式,Spring框架离不开动态代理技术,Android hook技术用到了反射 + 动态代理,Framework中我们也经常看到各种proxy,如ApplicationTh ...
最新文章
- java 办公,中文JAVA技术网
- 纯CSS实现多级菜单,兼容IE6
- 微信小程序长按保存图片
- 如何使用graphpad做柱形图_系列文章 如何使用PaddleDetection做一个完整项目(三)...
- php求及格,详解PHP通过递归实现提成计算
- pythonweb面试常见问题_python和web框架面试题目整理(3)
- java为什么需要枚举_java – 什么是枚举,为什么它们有用?
- 一个flash网页图片播放器
- php微信浏览器清空cookie,微信内置浏览器中的cookie很诡异呀
- tomcat 请求超时_高并发环境下如何优化Tomcat性能?看完我懂了!
- [leetcode]139. 单词拆分
- 宝藏机器学习资料分享(超高质量pdf直接下载)
- 人工智能时代的投影融合软件
- OpenKG 祝大家 2021 新年快乐 —「2020 精选文章汇编」
- linux ipcs字段含义 共享内存删除 ipcs dest状态
- 64G的EXFAT格式的U盘如何格式化为FAT32
- excel使用vb选中指定单元格,到指定行的最后一行有数据的等行数的单元格区间(列等高复制)
- 关于Windows聚焦一直保持一个图不变(搬运后加了图,留着以后用)
- 共享yum资源库下一键安装虚拟机的脚本3【完全自动化】
- ajax上传文件:ajaxSubmit使用
热门文章
- Play on Words UVA - 10129 (欧拉回路)
- gnss观测质量检查软件下载_【速查】你可能下载了个假“北斗”!
- quartz的负载均衡
- matlab模式识别实验二,模式识别实验二
- mysql数据库日志太多_数据库Log太多如何清理但是不影响mysql原本的表数据。
- 树莓派 ubuntu gpio_树莓派学习笔记(一)输入输出GPIO
- com.alibaba.fastjson.JSONException: can‘t create non-static inner class inst
- 从spring管理的datasource中获取connection
- 电脑出现 flash update failed 解决方法
- Java10的新特性