上了adobe的贼船-JAVA操作PDF

项目中使用JAVA生成PDF,选择了Adobe Livecycle Designer,通过XML数据和模板生成PDF。然而,当数据量大导致PDF页数过多时,打开速度变慢,内存消耗大。研究发现动态PDF(XFA)在Adobe Reader中解析缓慢。尝试转换为静态PDF,包括打印转换和寻找开源解决方案,但未能避免内存消耗问题。最后了解到Adobe官方不支持flatten XFA Forms,寻找第三方解决方案成为下一步计划。

最近项目需求,要求用JAVA模拟旧有的系统的打印机制,生成PDF。

数据源是XML的,模版是旧系统的文本源文件(描述了位置和显示信息)。由于经验不足,在搜索各大网站之后,发现了adobe的livecycle designer(LC),这样只要能看懂旧系统的源文件,就能设计出新的模版,然后通过JAVA把XML数据灌入进去,就生成PDF了。

由于Adobe的产品都要收费,所以先下载了试用版,做试验,实验结果相当成功(做实验时候数据量小,根本发现不了问题),开发相关的程序也很顺手,所以就果断采用了。

在进一步的研究后,发现adobe LC的源代码是XML格式的,就更兴奋了,开发了一个小程序,读取旧模版的文本源文件,直接生成XDP(LC的源代码),设计模版的工作都可以节约出来,于是竭力推荐,公司就购买了一套acrobat professional。

初期的测试都没问题,但是后来的测试中,发现了一个很大的问题,数据量如果过大(生成的PDF页数超过200页),打开生成的报表就很耗内存,很慢。。。

于是上ADOBE 官方网站,并在各大论坛上找原因,最终发现,用LC设计的PDF模版,生成的最终报表仍然是动态的(XFA),每次打开报表时候,adobe reader会解析XML并组织格式进行显示(pdf的其他reader都读不了这种报表)。


怎么才能把这种动态的PDF报表转成静态的呢?研究livecycle的另存格式和脚本执行条件,均告失败。后来研究用acrobat professional打开之后,研究另存的格式,也没什么结果。

再后来,就尝试打印,发现打印出来的报表显示一切正常,于是尝试用打印成PDF格式(装了acrobat professional后,就有这个虚拟打印机),这次发现打印完成新的pdf后,PDF变成静态了,打开速度相当快,很是窃喜了一番,感觉曙光即将来临,下一步不就是搞一个虚拟打印机不就行了,不用打开文件中间的动态PDF,那就省时省力了。


感觉虚拟打印机肯定有开源的包,何必闭门造车,果断google,发现JDK本身就带这样的东东(知识太匮乏了。。),JDK自带的Desk

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值