项目中需要用 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文件的更多相关文章

  1. Java 动态生成 PDF 文件

    每片文章前来首小诗:   今日夕阳伴薄雾,印着雪墙笑开颜.我心仿佛出窗前,浮在半腰望西天.  --泥沙砖瓦浆木匠 需求: 项目里面有需要java动态生成 PDF 文件,提供下载.今天我找了下有关了,系 ...

  2. java动态生成HTML文件

    在eclipse中,用java动态生成html文件. //用于存储html字符串 StringBuilder stringHtml = new StringBuilder(); try{ //打开文件 ...

  3. 利用Java动态生成 PDF 文档

    利用Java动态生成 PDF 文档,则需要开源的API.首先我们先想象需求,在企业应用中,客户会提出一些复杂的需求,比如会针对具体的业务,构建比较典型的具备文档性质的内容,一般会导出PDF进行存档.那 ...

  4. Java 动态生成复杂 Word

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

  5. 如何获取java运行时动态生成的class文件?

    查看运行时生成的文件,以更清楚运行情况. 查看动态生成的类,一般有两个方法: 1. 使用据说是jdk自带包sa-jdi.jar里的工具. 其中,不想自己搞,当然就利用下,sa-jdi.jar 里自带的 ...

  6. [转载]Java动态生成word文档(图文并茂)

    很多情况下,软件开发者需要从数据库读取数据,然后将数据动态填充到手工预先准备好的Word模板文档里,这对于大批量生成拥有相同格式排版的正式文件非常有用,这个功能应用PageOffice的基本动态填充功 ...

  7. [原创]Java动态生成word文档(图文并茂)

    很多情况下,软件开发者需要从数据库读取数据,然后将数据动态填充到手工预先准备好的Word模板文档里,这对于大批量生成拥有相同格式排版的正式文件非常有用,这个功能应用PageOffice的基本动态填充功 ...

  8. java动态生成带下拉框的Excel导入模板

    在实际开发中,由于业务需要,常常需要进行Excel导入导出操作.以前做一些简单的导入时,先准备一个模板,再进行导入,单有十几. 二十几个导入模板时,往往要做十几.二十几个模板.而且,当在模板中需要有下 ...

  9. 【原】如何获取Java动态生成类?

    写作目的:Java大部分框架,如Spring,Hibernate等都会利用动态代理在程序运行的时候生成新的类, 有的时候为了学习,或者深入了解动态代理,想查看动态生成类的源代码究竟长怎么个样子, 通过 ...

随机推荐

  1. 聊聊 Statsd 和 Collectd 那点事!

    StatsD 是由 Etsy 开发并发布的汇总和总结应用指标的一个简单的守护进程,近些年来发展迅速,已经变成了一个用于收集应用性能指标的统一的协议. 关于 Statsd 的使用已经有很多文章介绍过,所 ...

  2. ANDROID_MARS学习笔记_S01原始版_023_MP3PLAYER005_用广播BroacastReciever实现后台播放不更新歌词

    一.代码流程1.自定义一个AppConstant.LRC_MESSAGE_ACTION字符串表示广播"更新歌词" 2.在PlayerActivity的onResume()注册Bro ...

  3. WPF中的MatrixTransform

    原文:WPF中的MatrixTransform WPF中的MatrixTransform                                                         ...

  4. Linux伙伴系统1

    (一)--伙伴系统的概述 Linux内核内存管理的一项重要工作就是如何在频繁申请释放内存的情况下,避免碎片的产生.Linux采用伙伴系统解决外部碎片的问题,采用slab解决内部碎片的问题,在这里我们先 ...

  5. linux模块安装卸载命令

    lsmod   查看系统安装了那些模块 insmod 安装模块 rmmod 卸载模块 modprobe可安装模块,也可卸载模块 modprobe [-acdlrtvV][--help][模块文件][符 ...

  6. 测试ODBC与OLE

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data. ...

  7. SSH框架应用中常用Jar包用途介绍

    struts2需要的几个jar包:1)xwork-core-2.1.62)struts2-core-2.1.83)ognl-2.7.34)freemarker-2.3.155)commons-io-1 ...

  8. 360手机助手内部资料曝光,63张PPT纯干货

    360手机助手内部资料曝光,63张PPT纯干货 日前,国内最大的安卓应用商店360手机助手发布了<2016年手机软件行业趋势绿皮书>,这份绿皮书对2015年以来移动互联网的趋势做了总结,展 ...

  9. [POJ 2019] Cornfields

    Cornfields Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 5516   Accepted: 2714 Descri ...

  10. SQL中取当前记录的ID----->SCOPE_IDENTITY()

    SQL Server 2000中,有三个比较类似的功能:他们分别是:SCOPE_IDENTITY.IDENT_CURRENT 和 @@IDENTITY,它们都返回插入到 IDENTITY 列中的值.I ...