您当前的位置:首页 > 互联网教程

java调用freemarker模板文件在服务器生成pdf或word文

发布时间:2025-05-21 07:16:51    发布人:远客网络

java调用freemarker模板文件在服务器生成pdf或word文

一、java调用freemarker模板文件在服务器生成pdf或word文

1、在前年的项目中,需要一个在线预览功能,即用户上传的Word或Excel等文档可以不经过下载直接在线预览。项目部署在Linux上,对比了多种解决方案后,决定将所有文档统一转化为PDF,使用H5技术的PDF在线预览模块来实现在线预览。此过程涉及两个关键问题:文档转换为PDF和在线预览PDF。

2、首先,需解决用户上传文档转化为PDF的问题。考虑到项目部署环境,排除了基于MS Office的方案,最终选定使用LibreOffice的SDK完成转换。为解决Java与LibreOffice交互的问题,采用开源的JODConverter插件。测试结果显示转换效果满意,速度理想,但该插件不支持多线程。

3、其次,实现在线预览PDF的方案。考虑到Flash的复杂性和高昂成本,选择了使用火狐自家的PDF.js,纯H5实现,无需任何插件,满足在线预览需求。但其不支持IE8以下浏览器,存在一定的兼容性限制。

4、以上方案解决了文档预览问题,对于数据填写后生成固定格式的文档需求,可参考此解决方案。FreeMarker作为视图层的一部分,与文档生成属于不同层次,与生成文档并无直接关联。

5、针对生成固定格式文档的需求,推荐使用Java中强大的Apache POI库。POI库对于读取文档功能表现良好,但对于写入功能,尤其是对样式操作的直观性有所欠缺。尽管如此,对于所谓的“固定格式表格”生成,POI库应能满足需求。

6、综上所述,解决文档预览和生成固定格式文档的问题,推荐方案为:POI(生成文档)-> LibreOffice+ JODConverter(转换文档至PDF)。如果需要在线预览文档,则使用PDF.js。此方案在满足用户需求的同时,兼顾了功能实现的高效性和兼容性。

二、freemarker和的beetl有哪些区别

看了一下beetl的介绍,低侵入性有点名不副实,还有模板语法里直接print的,这样侵入性明显增加了啊。自定义标签真心吹毛求疵了,至少使用Java的IDE,freemarker的标签都不会造成什么障碍。

使用js语法,这个挺好的,freemarker很多函数的定义都有点反人类了。不过对于最常用的逻辑:循环和判断,我觉得freemarker那种标签形式要好于js方式,写循环和判断,层数一深简直要人命啊,这种,还没法对齐!

至于性能,提高总是好的,看了一下比较,0.02ms与0.01ms的区别,这个在大多数情况下多没啥意义吧?更何况模板引擎渲染也并非底层操作,一个正常Web页面响应都在50ms以上吧?万分之一的提高而已,反正我觉得吸引力不大。

安全输出挺不错的,mvc的分离也是不错的尝试(freemarker确实也可以单独进行渲染,只不过API不是那么有好罢了)。

freemarker这种成熟引擎,最大的优点倒不在于其性能多优越,功能多强大,而是业界公认,工具链完善,像我在Intellij里面编辑freemarker,语法检查、自动补全乃至于重构都是很方便的,我觉得要做一个模板引擎,也要从这方面考虑考虑。

三、freemarker 和的 beetl 比较,哪些有所欠缺吗

看了一下beetl的介绍,低侵入性有点名不副实,还有模板语法里直接print的,这样侵入性明显增加了啊。自定义标签真心吹毛求疵了,至少使用Java的IDE,freemarker的标签都不会造成什么障碍。

使用js语法,这个挺好的,freemarker很多函数的定义都有点反人类了。不过对于最常用的逻辑:循环和判断,我觉得freemarker那种标签形式要好于js方式,写循环和判断,层数一深简直要人命啊,<%}}}}%>这种,还没法对齐!

至于性能,提高总是好的,看了一下比较,0.02ms与0.01ms的区别,这个在大多数情况下多没啥意义吧?更何况模板引擎渲染也并非底层操作,一个正常Web页面响应都在50ms以上吧?万分之一的提高而已,反正我觉得吸引力不大。

安全输出挺不错的,mvc的分离也是不错的尝试(freemarker确实也可以单独进行渲染,只不过API不是那么有好罢了)。

freemarker这种成熟引擎,最大的优点倒不在于其性能多优越,功能多强大,而是业界公认,工具链完善,像我在Intellij里面编辑freemarker,语法检查、自动补全乃至于重构都是很方便的,我觉得要做一个模板引擎,也要从这方面考虑考虑。