整理关于Java进行word文档的数据动态数据填充
首先我们看下,别人整理的关于Java生成doc 的 资料。
java生成word的几种方案
1、 Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用。DLL动态链接库的生成需要windows平台的支持。
2、 Apache POI包括一系列的API,它们可以操作基于MicroSoft OLE 2 Compound Document Format的各种格式文件,可以通过这些API在Java中读写Excel、Word等文件。他的excel处理很强大,对于word还局限于读取,目前只能实现一些简单文件的操作,不能设置样式。
3、 Java2word是一个在java程序中调用 MS Office Word 文档的组件(类库)。该组件提供了一组简单的接口,以便java程序调用他的服务操作Word 文档。
这些服务包括: 打开文档、新建文档、查找文字、替换文字,插入文字、插入图片、插入表格,在书签处插入文字、插入图片、插入表格等。填充数据到表格中读取表格数据 ,1.1版增强的功能: 指定文本样式,指定表格样式。如此,则可动态排版word文档。
4、 iText操作Excel还行。对于复杂的大量的word也是噩梦。用法很简单, 但是功能很少, 不能设置打印方向等问题。
5、 JSP输出样式基本不达标,而且要打印出来就更是惨不忍睹。
6、 用XML做就很简单了。Word从2003开始支持XML格式,大致的思路是先用office2003或者2007编辑好word的样式,然后另存为xml,将xml翻译为FreeMarker模板,最后用java来解析FreeMarker模板并输出Doc。经测试这样方式生成的word文档完全符合office标准,样式、内容控制非常便利,打印也不会变形,生成的文档和office中编辑文档完全一样。
java生成pdf方案总结
1. Jasper Report生成pdf:设计思路是先生成模板,然后得到数据,最后将两者整合得到结果。但是Jasper Report的问题在于,其生成模板的方式过于复杂,即使有IDE的帮助,我们还是需要对其中的众多规则有所了解才行,否则就会给调试带来极大的麻烦。
2. openoffice生成pdf:openoffice是开源软件且能在windows和linux平台下运行。
3. itext + flying saucer生成pdf:itext和flying saucer都是免费开源的,且与平台无关,结合css和velocity技术,可以很好的实现。
一般使用第三种方案比较多,它实现的步骤是非常简单的。
JAVA生成word优缺点对比
|
所用技术 |
优点 |
缺点 |
|
Jacob |
功能强大 |
代码量大,设置样式繁琐;需要windows平台支持,无法跨平台 |
|
Apache POI |
读写excel功能强大、操作简单 |
一般只用它读取word,能够创建简单的word,不能设置样式,功能太少 |
|
Java2word |
功能强大,操作简单 |
能满足一般要求,不支持07格式,国人开发的,参考资料较多,需要windows平台支持 |
|
iText |
功能全,能满足一般要求 |
不能直接生成或操作doc文档,只能生成rtf格式的文档,rtf也可以用word打开 |
|
JSP |
操作简单,代码量少 |
能把当前页面导出简单的word,不能设置样式,美观性差,无法操作word |
|
XML(最佳) |
代码量少,样式、内容容易控制,打印不变形,完全符合office标准 |
需要提前设计好word模板,把需要替换的地方用特殊标记标出来 |
JAVA生成pdf优缺点对比
|
所用技术 |
优点 |
缺点 |
|
openoffice |
本身就是office软件,很容易设计一些文档模板,支持java调用实现word转换成pdf |
需要先安装,设计好pdf模板样式,然后用程序来填充那些预留好的变量 |
|
itext |
能满足要求,本身提供了一些api |
无法识别很多html的tag和attribute,无法识别css,需要用其api函数来设置样式 |
|
Jasper Report |
能满足要求,市面上使用的比较多,相关文档多 |
复杂,很难完全掌握,需要先设计模板,强依赖于IDE进行可视化编辑 |
|
flying sauser(最佳) |
能解析html和css输出成image、pdf等格式,操作简单,api强大 |
需要编写freemarker或velocity模板,打造html,勾画pdf的样式 |
二、然后我们看下使用freemarker 来对word进行的动态填充的流程
1.准备word文档(最好用office2007 如果用别的版本低版本的会打不开)
(1)提前把你要用的文档再word上做好

(2)然后把文档另存为xml

(3)然后用打开xml文件,再网上找一个xml文件 格式化在线就可以格式化,记得转完xml文件之后不要用word再打开,切记)
后面会得到一个这样的文件。

(4)拿到之后找到你要替换值得地方写上freemarker标签${}就可以了

(5) 修改完毕将模板文件的后缀改为 .ftl 注意:一定不要用word打开ftl模板文件,否则xml内容会发生变化,导致前面的工作白做了。 可以使用其他的编辑器打开

(6)接下来就是转化填充了

接下来就是总结了:
其实吧,我个人感觉这个freemarker框架没有多大卵用,说白了就是一个字符的替换,其实就是将doc转xml文件,然后替换可以将内部的文字替换,替换完,再输出保存到doc文件,感觉这个框架并没有任何啥特别的,自己就可以写,不过,这种轮子别人造好了,咱们确实拿来用就可以了。
但是,我们的目标并不是为了完成任务而去做一件事,我们更期望懂是什么?怎么做?为什么? 这是我们的核心
整理关于Java进行word文档的数据动态数据填充的更多相关文章
- 使用Java生成word文档(附源码)
当我们使用Java生成word文档时,通常首先会想到iText和POI,这是因为我们习惯了使用这两种方法操作Excel,自然而然的也想使用这种生成word文档.但是当我们需要动态生成word时,通常不 ...
- poi读写word模板 / java生成word文档
有一word文档表格 形如: 姓名 ${name} 电话 ${tel} 从数据库读取记录替换上述变量 import java.io.FileOutputStream; import java.util ...
- Java生成 Word文档的并打印解决方案
户要求用程序生成标准的word文档,要能打印,而且不能变形,以前用过很多解决方案,都在客户严格要求下牺牲的无比惨烈. POI读word文档还行,写文档实在不敢恭维,复杂的样式很难控制不提,想象一下一个 ...
- Java生成word文档
itext-rtf-2.1.7.jar,下载地址:http://download.csdn.net/detail/xuxu198899223/7717727 itext-2.1.7.jar 下载地址: ...
- Java解析word文档
背景 在互联网教育行业,做内容相关的项目经常碰到的一个问题就是如何解析word文档. 因为系统如果无法智能的解析word,那么就只能通过其他方式手动录入word内容,效率低下,而且人工成本和录入出错率 ...
- Java 处理word文档后在前端展示
最新新开发的这个项目需要使用word文档并要求能在前端页面上带格式展示,由于项目不是内部使用,所以不考虑插件类的处理模式,都必须要本地处理完成,前端不需要做什么更新或者说安装就能直接访问,类似于百度文 ...
- Java操作word文档使用JACOB和POI操作word,Excel,PPT需要的jar包
可参考文档: http://wibiline.iteye.com/blog/1725492 下载jar包 http://download.csdn.net/download/javashixiaofe ...
- [转载]java获取word文档的条目化内容
在开发Web办公系统或文档系统时,PageOffice组件是众所周知的在线处理微软word/ppt/excel文档的强大工具,它对WORD文档的各种处理在API层面进行了封装,屏蔽了Office VB ...
- [转载]Java生成Word文档
在开发文档系统或办公系统的过程中,有时候我们需要导出word文档.在网上发现了一个用PageOffice生成word文件的功能,就将这块拿出来和大家分享. 生成word文件与我们编辑word文档本质上 ...
随机推荐
- 如何使用代码备份SQL Server数据库
1.添加引用 using Microsoft.SqlServer.Management.Smo; using Microsoft.SqlServer.Management.Common; 2. Bac ...
- 2018 Multi-University Training Contest 9 Solution
A - Rikka with Nash Equilibrium 题意:构造一个$n * m$的矩阵,使得$[1, n * m]$ 中每个数只出现一次,并且纳什均衡只出现一次. 思路:从大到小的放置,每 ...
- 文件读写网络IO简单了解,同步IO和异步IO
在Linux中,对文件的读写其实就是IO. 与IO有关的名词:同步,异步,阻塞,非阻塞,甚至是同步阻塞,同步非阻塞,异步阻塞,异步非阻塞.别急,下面有举例IO分为两大种,同步和异步 同步IO:阻塞IO ...
- 20145106 《Java程序设计》第5周学习总结
教材学习内容总结 个人认为本周的学习在很大程度上是作为之前学习内容的补充.之前编译的程序相信所有人都会失败过,error算是我程序的老主顾了. 第八章名为"异常处理".本章中,我们 ...
- Cooperation.GTST团队第一周项目总结
Cooperation.GTST团队第一周项目总结 团队项目 项目内容:我们打算利用Android Studio开发一款博客园的Android APP,初步设想能够实现在Android手机平台使用博客 ...
- 简单方法实现无刷新提交Form表单
前几天遇到一个前端的问题.我希望提交表单后页面不跳转且不刷新当前页面,然而查了很多方法都没有解决. 由于Form 是提交后一定刷新页面的,所以我们可以用一个折中的办法.我们给Form 指定一个ifra ...
- [BZOJ4069][Apio2015]巴厘岛的雕塑
题目大意 分成 \(x\) 堆,是的每堆的和的异或值最小 分析 这是一道非常简单的数位 \(DP\) 题 基于贪心思想,我们要尽量让最高位的 \(1\) 最小, 因此我们考虑从高位向低位进行枚举,看是 ...
- LightOJ 1027 A Dangerous Maze(期望)
https://cn.vjudge.net/problem/LightOJ-1027 题意:有n扇门,每扇门有个时间ti,选择正数的门可以在ti后带你走出迷宫,负数的门会在ti后带你回到起点,然后重新 ...
- POJ 2443 Set Operation(压位加速)
http://poj.org/problem?id=2443 题意: 有1000个集合,每个集合有至多10000个数,之后输入多个询问,判断询问的两个数是否位于同一个集合. 思路: 位运算...很强大 ...
- BZOJ 3238 【AHOI2013】 差异
题目链接:差异 写题时发现这道题当初已经用后缀数组写过了……但是既然学了后缀自动机那就再写一遍吧…… 观察一下题目所给的式子:\[\sum_{1\leqslant i < j \leqslant ...