沫沫金:使用Java模版引擎FreeMarker生成复杂的Word文档

简介: 目前Java操作office文档常用的有以下几种方案(POI、iText、jacob这三种)以上三种方案优缺点分析如下:Jacod是使用dll文件,使用它项目只能在windows系统中使用。


目前Java操作office文档常用的有以下几种方案(POIiTextjacob这三种)

以上三种方案优缺点分析如下:

Jacod是使用dll文件,使用它项目只能在windows系统中使用。但是大家知道java项目的特性是良好的可移植性,所以不建议使用。而且它处理文档的效率不是很好。

POIword文档还行,写文档实在不敢恭维,复杂的样式很难控制不提,想象一下一个20多页,嵌套很多表格和图像的word文档靠POI来写代码输出,对程序员来说比去山西挖煤还惨,况且文档格式还经常变化。

iText操作Excel还行。对于复杂的大量的word也是噩梦。

(直接通过JSP输出样式基本不达标,而且要打印出来就更是惨不忍睹。)

新方案:Word2003开始支持XML格式,用XML来做就很简单了

大致分以下三个步骤:

一、先用office2003或更高版本编辑好word模版,然后另存为xml文件

二、使用FirstObject XML Editorxml翻译为FreeMarker模板

三、最后用java来解析FreeMarker模板并输出Doc

经测试这样方式生成的word文档完全符合office标准,样式、内容控制非常便利,打印也不会变形,生成的文档和office中编辑文档完全一样

看看实际效果

首先用office【版本要2003以上,以下的不支持xml格式】编辑文档的样式,图中下划线的部分就是要输出的部分:

110322407.jpg

将编辑好的文档另存为XML

110342659.jpg

再用Firstobject free XML editorxml中我们需要填数据的地方打上FreeMarker标记

110438311.jpg

最后生成的文档样式


110500633.jpg

提示:

要使用这个新方案,你必须了解FreeMarker这个很优秀的Java模版引擎。官方中文API下载请点击这里中文版手册(PDF

Firstobject free XML editor工具下载,等你给xml添加好Freemarker标签后直接将xml文件后缀修改为ftl文件。(ftl文件为Freemarker模版文件)

Freemarker下载

相关连接:

MyEclipse集成FreeMarker教程

本教程的源码

联系方式(email:zl0828@yeah.net  qq搜索-'沫沫金')
目录
相关文章
|
2月前
|
Java API Apache
Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
【10月更文挑战第29天】Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
170 5
|
5月前
|
XML 数据采集 存储
使用Java和XPath在XML文档中精准定位数据
在数据驱动的时代,从复杂结构中精确提取信息至关重要。XML被广泛用于数据存储与传输,而XPath则能高效地在这些文档中导航和提取数据。本文深入探讨如何使用Java和XPath精准定位XML文档中的数据,并通过小红书的实际案例进行分析。首先介绍了XML及其挑战,接着阐述了XPath的优势。然后,提出从大型XML文档中自动提取特定产品信息的需求,并通过代理IP技术、设置Cookie和User-Agent以及多线程技术来解决实际网络环境下的数据抓取问题。最后,提供了一个Java示例代码,演示如何集成这些技术以高效地从XML源中抓取数据。
204 7
使用Java和XPath在XML文档中精准定位数据
|
3月前
|
Java Linux
java读取linux服务器下某文档的内容
java读取linux服务器下某文档的内容
47 3
java读取linux服务器下某文档的内容
|
3月前
|
Java Apache Maven
Java将word文档转换成pdf文件的方法?
【10月更文挑战第13天】Java将word文档转换成pdf文件的方法?
915 1
|
3月前
|
缓存 Java 程序员
Java|SpringBoot 项目开发时,让 FreeMarker 文件编辑后自动更新
在开发过程中,FreeMarker 文件编辑后,每次都需要重启应用才能看到效果,效率非常低下。通过一些配置后,可以让它们免重启自动更新。
55 0
|
4月前
|
Java Apache Maven
Java中使用poi+poi-tl实现根据模板导出word文档
这个过程不仅简化了文档生成的工作,而且保证了生成文档的一致性与准确性,特别适合于那些需要生成大量文档的自动化场景。通过以上步骤,Java开发人员可以实现高效、可靠的Word文档导出功能。
1769 0
|
9天前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
50 17
|
20天前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者