Java 动态生成 复杂 .doc文件
阅读目录
项目中需要用 java 程序生成doc 文件,百度一番,FreeMarker 的评价比较高,FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出,至于想详细了解 FreeMarker 的请去问百度.....
这篇博文主要是总结自己在用网上例子时遇到的坑。吃水不忘挖井人,还是要感谢分享技术的前辈。
原文链接:
http://www.360doc.com/content/13/0731/10/13247663_303740756.shtml [博主博客很漂亮,赞一个]
参照过的例子链接:
1.http://www.360doc.com/content/13/0731/10/13247663_303740756.shtml
2.http://blog.csdn.net/zhanwentao2/article/details/7255432
FreeMarker.jar 下载地址:
1.http://download.csdn.net/detail/pc159321/7077059
2.http://download.csdn.net/detail/zhaoshe/3153176
主要思路如下:
1.word 里面调整好排版,包括你想生成的动态部分,还有一些不用生成的规则性的文字
2. 将 word 文档保存为 xml
3.用 Firstobject free XML edito 打开,将你需要动态生成的字段打上标记,${} 这样就可以
FreeMarker 还支持需要丰富的标记,如果你想展示更复杂和丰富的内容,都可以实现;
Firstobject free XML edito 友情下载链接:
http://www.cnblogs.com/know-life-death/archive/2012/02/01/2334742.html
4.将 xml 文件更改后缀名 为 .ftl, 然后引用到你的项目中
需要注意的问题:
a. word 版本不能低于 2003 ,因为 2003 才开始支持 xml;
b.用 Firstobject free XML edito 打开 要编辑的 xml 文件时,记得xml 不要放在含有中文路径的目录中【编辑器会无响应,然后你知道的.....】。
实现的代码如下:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.HashMap;
import java.util.Map; import cn.sina.ttjava_13.database.DB;
import freemarker.template.Configuration;
import freemarker.template.Template; public class WordTest { private Configuration configuration = null;
private Connection conn;
private ResultSet res; public WordTest() {
configuration = new Configuration();
configuration.setDefaultEncoding("UTF-8");
} public void createWord() {
Map<String, Object> dataMap = new HashMap<String, Object>();
try {
String selectSql = "SELECT ID,NAME,NORMALPRICE,MEMBERPRICE FROM T_PRODUCT WHERE 1 LIMIT 10";
conn = DB.getConn();
res = DB.getRs(conn, selectSql);
while(res.next()){
dataMap.put("id", res.getString("id").trim());
dataMap.put("name", res.getString("name").trim());
dataMap.put("normalprice", res.getString("normalprice").trim());
dataMap.put("memberprice", res.getString("memberprice").trim()); configuration.setClassForTemplateLoading(this.getClass(), "/template"); // FTL文件所存在的位置
Template template = configuration.getTemplate("Product.ftl"); File outFile = new File("D:/temp/"+ res.getString("name").trim().replaceAll("/", "") +".doc");
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"UTF-8"));
template.process(dataMap, out);
out.close();
}
DB.close(res);
DB.close(conn);
} catch (Exception e) {
e.printStackTrace();
}
} public static void main(String[] args) {
WordTest test = new WordTest();
test.createWord();
}
}
a. 代码数据库为 mysql ,将查询到的数据,动态填入到wod 中;
b.template.process(),接受一个 Map 和 输入流做为入参,Map 既是你需要动态生成到 doc 里面的数据,字段名必须与你在 .ftl 里面定义的一致;
c. 我觉得数据的来源可以很多,程序计算的结果,数据库存储的数据,页面点击的数据.........
d. 如果你想利用这段代码,需要有一个 .ftl 文件,并且在你的项目 src 目录下面新建 template 目录;
e.我不知道怎样把 .ftl 文件上传上来,如果需要做例子的,请在下面留言,我发给你。
Java 动态生成 复杂 .doc文件的更多相关文章
- Java 动态生成 PDF 文件
每片文章前来首小诗: 今日夕阳伴薄雾,印着雪墙笑开颜.我心仿佛出窗前,浮在半腰望西天. --泥沙砖瓦浆木匠 需求: 项目里面有需要java动态生成 PDF 文件,提供下载.今天我找了下有关了,系 ...
- java动态生成HTML文件
在eclipse中,用java动态生成html文件. //用于存储html字符串 StringBuilder stringHtml = new StringBuilder(); try{ //打开文件 ...
- 利用Java动态生成 PDF 文档
利用Java动态生成 PDF 文档,则需要开源的API.首先我们先想象需求,在企业应用中,客户会提出一些复杂的需求,比如会针对具体的业务,构建比较典型的具备文档性质的内容,一般会导出PDF进行存档.那 ...
- Java 动态生成复杂 Word
Java 动态生成复杂 Word 阅读目录 1. 制作 Word 模版,将你需要动态生成的字段用${}替换.2. 将 Word文档保存为 xml .3. 引入项目. 项目中需要用 java 程序生成d ...
- 如何获取java运行时动态生成的class文件?
查看运行时生成的文件,以更清楚运行情况. 查看动态生成的类,一般有两个方法: 1. 使用据说是jdk自带包sa-jdi.jar里的工具. 其中,不想自己搞,当然就利用下,sa-jdi.jar 里自带的 ...
- [转载]Java动态生成word文档(图文并茂)
很多情况下,软件开发者需要从数据库读取数据,然后将数据动态填充到手工预先准备好的Word模板文档里,这对于大批量生成拥有相同格式排版的正式文件非常有用,这个功能应用PageOffice的基本动态填充功 ...
- [原创]Java动态生成word文档(图文并茂)
很多情况下,软件开发者需要从数据库读取数据,然后将数据动态填充到手工预先准备好的Word模板文档里,这对于大批量生成拥有相同格式排版的正式文件非常有用,这个功能应用PageOffice的基本动态填充功 ...
- java动态生成带下拉框的Excel导入模板
在实际开发中,由于业务需要,常常需要进行Excel导入导出操作.以前做一些简单的导入时,先准备一个模板,再进行导入,单有十几. 二十几个导入模板时,往往要做十几.二十几个模板.而且,当在模板中需要有下 ...
- 【原】如何获取Java动态生成类?
写作目的:Java大部分框架,如Spring,Hibernate等都会利用动态代理在程序运行的时候生成新的类, 有的时候为了学习,或者深入了解动态代理,想查看动态生成类的源代码究竟长怎么个样子, 通过 ...
随机推荐
- unity 与 android 协调工作 注意事项
原地址:http://blog.csdn.net/u012085988/article/details/17436191 1.unity调android函数 AndroidJavaClass jc = ...
- 如何用 Retrofit 2 在安卓上实现 HTTP 访问?
最近,笔者对安卓开发的兴趣愈发浓厚,而且不断尝试了许多传闻很棒的开发库 -- 大部分也真的很不错.于是打算写一个系列文章,介绍使用这些让人惊叹的库建立安卓示例应用的实践.这样,读者可以自行判断,这些库 ...
- Eclipse 安装Activiti 插件失败解决方法
遇到的错误为:1.4.0' but it could not be found等.
- 170. Two Sum III - Data structure design
题目: Design and implement a TwoSum class. It should support the following operations: add and find. a ...
- C++ sizeof的使用总结
说明:以下代码在VS2008中通过,在32位操作系统下. 1. 定义 sizeof是一个操作符(operator). 其作用是返回一个对象或类型所占的内存字节数. 其返回值类型为size_t ...
- get started with laravel
Browsing the API (http://laravel.com/api) can be somewhat intimidating at first.But it is often the ...
- Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces
问题解决:缺少jar包 cglib-2.1.3.jar
- bzoj1965
很明显,求方程x*2^m=L (mod n+1)的解(1<=x<=n) var n,m,l,x,y,p:int64; function quick(x:int64):int64; var ...
- 操作系统杂谈 mac 和linux windows若干概念
Mac: vmware 安装:1.方式一通过FreeBSD方式用 darwin.iso引导加载dmg安装 2.通过制作cdr /iso vmware安装mac插件 mac有 macpe 使用open ...
- [ECNU 1624] 求交集多边形面积
求交集多边形面积 Time Limit:1000MS Memory Limit:30000KB Total Submit:98 Accepted:42 Description 在平面上有两给定的凸多边 ...