最近项目需求,要求用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自带的Desktop包就有我所需要的东西,只不过需要把pdf打印机设成默认的,如果不想预览,就把打印机做相关的设置,就一切后台运作了。

但是,虽然调用这个打印机最终生成的是静态的PDF,但是后台仍然是跟用adobe reader打开一样,先解析,再打印,程序跑完了,内存仍旧耗的厉害,最终的打印结果也是要等一段时间才出来(打印肯定要打开文档的。。。)。

木法,但是至少研究中知道了一个名词,XFA flatten,表示把动态的PDF文档转成静态的PDF。。。

解铃还需系铃人,只能找adobe了,官网上搜了一圈,发现了一个令人沮丧的结果。。

The Flatten Fields and Comments Action can only flatten forms which were created in Acrobat (AcroForms). Forms created in LiveCycle Designer (XFA Forms) cannot be flattened. The only way to flatten an XFA form is to print it to the Adobe PDF print driver.

跟我的想法一样。

不过在查询过程中,发现了一篇文章,号称可以flatten这种PDF,http://help.adobe.com/en_US/livecycle/9.0/programLC/help/index.htm?content=000709.html#1548326,由于安装文件过大并且要收费,我就没继续研究了。

研究过程虽然是几句话说完了,不过中间查询的文档和做的试验却是很多的,小结一下,以备日后查询。

1)ITEXT

ITEXT是使用最广泛的第三方插件,但是最近它却要求商用时候付费,所以果断弃用。

如果需要处理中文的时候,需要安装亚洲语言包。

2)PDFBOX

这个功能作为普通的报表开发已经足够了,但是中文支持有限,目前知道的是可以读取中文文档,但是创建PDF的时候,写入中文还是乱码。从网上查询的资料来看,中文的读取需要最新版1.6.0。之前的版本好像也不是很支持。

3)FOP

这个需要配合XSL文件使用,需要研究XSL的语法,这个是我下一步要采取的一个策略。

上了adobe的贼船-JAVA操作PDF相关推荐

  1. JAVA操作pdf——创建表格

    JAVA操作pdf--创建表格 一.前言 在实习的时候遇到了需要将查询到的数据构建成为PDF的情况,于是在网上查找到了相关的Java操作pdf的教程,看到大部分的文章都是使用ITextPdf操作的,于 ...

  2. java 操作 PDF

    近来收到一个需求, 制作 PDF 制作发票. 类似于制作这样的发票 技术选型我选择java 在网上寻找了一些操作PDF的框架决定用iText制作, 因为它比较活跃, 而且后期做签章和插入图片二维码都有 ...

  3. java操作pdf制作电子签章

    #java操作pdf制作电子签章 ##电子签章简介 电子签章,与我们所使用的数字证书一样,是用来做为身份验证的一种手段,泛指所有以电子形式存在,依附在电子文件并与其逻辑关联,可用以辨识电子文件签署者身 ...

  4. Java操作PDF之iText超入门

    转自:https://www.cnblogs.com/liaojie970/p/7132475.html Java操作PDF之iText超入门 iText是著名的开放项目,是用于生成PDF文档的一个j ...

  5. 【Java 代码实例 13】Java操作pdf的工具类itext

    目录 一.什么是iText? 二.引入jar 1.项目要使用iText,必须引入jar包 2.输出中文,还要引入下面```itext-asian.jar```包 3.设置pdf文件密码,还要引入下面` ...

  6. java操作PDF文件,可支持分页、合并、图片转PDF等

    java操作PDF,有一个很好用的工具--pdfbox.只需要引入依赖,即可使用. <dependency><groupId>org.apache.pdfbox</gro ...

  7. Java操作PDF大全

    PDF预览 /*** pdf文件预览* @param request* @param response* @return* @throws IOException*/ @RequestMapping( ...

  8. java在模板图片中填写文字,java 操作pdf模板(向指定域添加文本内容和图片)

    项目需求涉及到操作pdf模板,根据生成好的模板向里面填充数据 用到的jar包是iText-5.0.6.jar 和iTextAsian.jar 上代码: public static void main( ...

  9. java操作PDF实现简单盖章功能(未签字)

    最近有一个电子签章的功能需求,网上相关的资料比较少,我查阅了相关资料,做了一个简单的盖章功能的demo 首先需要导个依赖,这里选用的是itextpdf来操作pdf <dependencies&g ...

最新文章

  1. AI芯片体系结构目标图形处理
  2. spring cloud alibaba版本选择
  3. Linux下更好用的帮助命令—cheat
  4. 云计算与 OpenStack - 每天5分钟玩转 OpenStack(14)
  5. wince6.0编译命令分析
  6. 清华王兴再抛神论:为什么教育决定着中国餐饮业质量?
  7. 云虚拟主机和传统虚拟主机的区别?
  8. Oracle 警告:Weblogic 服务器中含有多个可遭远程利用的严重漏洞
  9. Mybatis(持久层的框架),注入的三种方式
  10. 直播实录丨十年主导15个产品从0到1,她的经验与思考现场拆解
  11. OpenCV中文官方文档-分享
  12. 怎么解苹果7手机ID锁
  13. 建筑智能化集成系统及架构简介
  14. Verilog加法器设计
  15. 解决Typora导出文件为其他格式时图片无法显示或者发给别人
  16. java实现生成二维码
  17. “玩具租赁/销售平台”类产品进化发展的可能性浅析
  18. 离散数学知识点总结(2)-谓词逻辑
  19. 串口硬盘与并口硬盘详解:IDE SATA SCSI 接口详解
  20. Fabric(二)部署Fabric2.2.0

热门文章

  1. 【错误记录】Git 使用报错 ( error: Cannot delete branch ‘dev‘ checked out at ‘D:/Git/git-learning-course‘)
  2. crm系统的销售管理模块
  3. 云计算原来是IT界工资最高的
  4. 回收站清空了怎么恢复?来看看这个回收站文件恢复的官方指南
  5. python绘制如下图形、小三角形边长20_python实现输入三角形边长自动作图求面积案例...
  6. 高帧频CMOS相机研发方案
  7. 【社区图书馆】30+危机,最值得读烂的5本书|必读
  8. Ubuntu18.04分辨率只有1024*768的多种解决办法
  9. Oracle 知识篇+RMAN带库备份恢复/带库全备恢复/带库0级备份恢复操作概要
  10. 一文理解Flink 水位线(Flink Watermark)