⑴ java调用freemarker模板文件在服务器生成pdf或word文
在线预览文档功能实现概述
在前年的项目中,需要一个在线预览功能,即用户上传的Word或Excel等文档可以不经过下载直接在线预览。项目部署在Linux上,对比了多种解决方案后,决定将所有文档统一转化为PDF,使用H5技术的PDF在线预览模块来实现在线预览。此过程涉及两个关键问题:文档转换为PDF和在线预览PDF。
首先,需解决用户上传文档转化为PDF的问题。考虑到项目部署环境,排除了基于MS Office的方案,最终选定使用LibreOffice的SDK完成转换。为解决Java与LibreOffice交互的问题,采用开源的JODConverter插件。测试结果显示转换效果满意,速度理想,但该插件不支持多线程。
其次,实现在线预览PDF的方案。考虑到Flash的复杂性和高昂成本,选择了使用火狐自家的PDF.js,纯H5实现,无需任何插件,满足在线预览需求。但其不支持IE8以下浏览器,存在一定的兼容性限制。
以上方案解决了文档预览问题,对于数据填写后生成固定格式的文档需求,可参考此解决方案。FreeMarker作为视图层的一部分,与文档生成属于不同层次,与生成文档并无直接关联。
针对生成固定格式文档的需求,推荐使用Java中强大的Apache POI库。POI库对于读取文档功能表现良好,但对于写入功能,尤其是对样式操作的直观性有所欠缺。尽管如此,对于所谓的“固定格式表格”生成,POI库应能满足需求。
综上所述,解决文档预览和生成固定格式文档的问题,推荐方案为:POI(生成文档)-> LibreOffice + JODConverter(转换文档至PDF)。如果需要在线预览文档,则使用PDF.js。此方案在满足用户需求的同时,兼顾了功能实现的高效性和兼容性。