Java 动态生成复杂 Word

简介:

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

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

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

    参照过的博客链接:

    http://www.360doc.com/content/13/0731/10/13247663_303740756.shtml

    http://blog.csdn.net/zhanwentao2/article/details/7255432

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 import java.io.BufferedWriter;
 2 import java.io.File;
 3 import java.io.FileOutputStream;
 4 import java.io.OutputStreamWriter;
 5 import java.io.Writer;
 6 import java.sql.Connection;
 7 import java.sql.ResultSet;
 8 import java.util.HashMap;
 9 import java.util.Map;
10 
11 import cn.sina.ttjava_13.database.DB;
12 import freemarker.template.Configuration;
13 import freemarker.template.Template;
14 
15 public class WordTest {
16 
17     private Configuration configuration = null;
18     private Connection conn;
19     private ResultSet res;
20 
21     public WordTest() {
22         configuration = new Configuration();
23         configuration.setDefaultEncoding("UTF-8");
24     }
25 
26     public void createWord() {
27         Map<String, Object> dataMap = new HashMap<String, Object>();
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 void main(String[] args) {
54         WordTest test = new WordTest();
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,如需转载请自行联系原作者

相关文章
|
4月前
|
Java API Apache
Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
【10月更文挑战第29天】Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
275 5
|
9月前
|
Java
java生成word(使用Poi-tl)
java生成word(使用Poi-tl)
551 0
|
5月前
|
Java Apache Maven
Java将word文档转换成pdf文件的方法?
【10月更文挑战第13天】Java将word文档转换成pdf文件的方法?
1587 1
|
7月前
|
XML Java 数据格式
基于Java+freemarker实现动态赋值以及生成Word文档
使用Java和Freemarker技术实现动态数据填充到Word文档模板并生成新的Word文档。
437 0
基于Java+freemarker实现动态赋值以及生成Word文档
|
6月前
|
Java Apache Maven
Java中使用poi+poi-tl实现根据模板导出word文档
这个过程不仅简化了文档生成的工作,而且保证了生成文档的一致性与准确性,特别适合于那些需要生成大量文档的自动化场景。通过以上步骤,Java开发人员可以实现高效、可靠的Word文档导出功能。
2075 0
|
8月前
|
JavaScript Java
Java 将Markdown文件转换为Word和PDF文档
【7月更文挑战第5天】Java中使用`Spire.Doc for Java`库可方便地将Markdown转换为Word或PDF。基本步骤包括导入模块,创建`Document`对象,加载Markdown文件,然后保存为目标格式(`.docx`或`.pdf`)。若遇到`Invalid UTF-8 stream`错误,需确保Markdown文件是UTF-8无BOM编码。页面设置可通过`PageSetup`类调整。注意,实际应用会依据具体需求和环境有所调整。
563 6
|
7月前
|
Java 网络安全 开发工具
新手入门Java。如何下载Eclipse、写出最基本的“Hello word”以及如何连接github并且上传项目。
新手入门Java。如何下载Eclipse、写出最基本的“Hello word”以及如何连接github并且上传项目。
101 0
|
10月前
|
Web App开发 前端开发 安全
如何用JAVA如何实现Word、Excel、PPT在线前端预览编辑?
随着信息化的发展,在线办公也日益成为了企业办公和个人学习不可或缺的一部分,作为微软Office的三大组成部分:Word、Excel和PPT也广泛应用于各种在线办公场景,但是由于浏览器限制及微软Office的不开源等特性,导致Word、Excel和PPT在在线办公很难整合到自己公司的OA或者文档系统。
666 13
|
Java 数据安全/隐私保护
使用java操作word
使用java操作word
171 0
|
10月前
|
Java Apache
Java将word、excel文件转成pdf文件
【5月更文挑战第26天】Java将word、excel文件转成pdf文件
2130 1