PDF开源库选择
对于我们开发⼈员来说,我们最关注的PDF SDK,只要有PDF SDK那么就能⽤程序来创建、修改和展⽰PDF⽂件。有这样⼀个现象就是:
PDF读操作,免费
编辑/创建,收费
相信⼤家也能感受到了,平时我们都是⽤的Adobe Reader吧,阅读免费的,但是编辑就是要⽤收费软件Adobe Acrobat Pro。
这些阅读器都是对应有PDF SDK,⽐较著名的两款软件是Adobe Reader和Foxit Reader(Adobe Reader和和Foxit Reader个⼈感觉⽐较类似Office和WPS的关系),其对应的PDF SDK,也只提供免费的view模块,⽽edit等其它模块都是收费的。
Adobe PDF SDK和Foxit PDF SDK资料很齐全,函数功能也很齐全,但是缺乏编辑和创建模块,相应的模块都是需要申请试⽤和购买。
其实,⽹上免费的PDF SDK也不少,但是都发展的很慢,功能⽐较少,本篇主要是关注java PDF开源库的选择,所以在这⾥着重介绍java PDF开源库。
各⽅开源库
其实就PDF SDK⽽⾔,有很多免费的开源软件,我们列举⼀下参考资料3⾥⾯列举出的开源类库(估计有点⽼了,但是还是很有参考价值):
开源项目名称 点击次数 描述
iText 6353 iText是⼀个能够快速产⽣PDF⽂件的java类库。iText的java类对于那些要产⽣包含⽂本,表格,图形的只读⽂档是很有⽤的。它的类库尤其与java Servlet有很好的给合。使⽤iText与PDF能够使你正确的控制Servlet的输出。
PDF Box 1958 PDFBox是⼀个Apache开源的x项⽬。可以操作PDF⽂档的Java PDF类库。它可以创建⼀个新PDF⽂档,操作现有PDF⽂档并提取⽂档中的内容。
JFreeReport 2146 JFreeReport的数据继承⾃Swing组件的TableModel接⼝。JFreeReport⽣成的报表可以分页预览、打印或者保存为多种格式的⽂件包括pdf、Excel、html等。
PJX 1214 PJX⽀持读取,组合,处理,和⽣成PDF⽂档(注意:PJX需要 J2SE 1.4.0 或更⾼版本)。
FOP 912 FOP是由James Tauber发起的⼀个开源项⽬,原先的版本是利⽤xsl-fo将xml⽂件转换成pdf⽂件。但最新的版本它可以将xml⽂件转换成pdf,mif,pcl,txt等多种格式以及直接输出到打印机,并且⽀持使⽤SVG描述图形
gnujpdf 782 gnujpdf是⼀个java类包(gnu.jpdf.*),它提供了⼀个简单的API来创建与打印PDF⽂件。遵循LGPL开源协议
Connla 986 Connla是⼀个Java包⽤于创建可导成TXT,CSV,HTML,XHTML,XML,PDF和XLS等格式的数据集。
说了这么多开源库,是不是优点眼花缭乱了呢?Java PDF开源库这⼀块⼀直在国内很薄弱的,为啥呢?⽂档!⽂档!⽂档! 重要的事情说三遍!⽂档不全,难以学习,是阻挡开源库发展的主要原因,⽽且⼤多数PDF开源库只关注⼀⽅⾯,拥有全⾯功能的PDF可以说少之⼜少。
其实我们从点击量就能看出PDF开源库的受欢迎程度了。除去JFreeRport(因为不能操作原⽣的PDF,依赖于报表)以外,最⽕热就是iText和Apache PDFBox和FOP了(Apache毕竟厉害),所以让我们来看⼀下他们的⽐较。
模块/功能⽐拼
接着来看⼀下各⾃的功能特性:
PDFBox:
Unicode⽂本提取
PDF⽂档拼接/分离
从PDF表单⾥⾯提取数据/数据填充表单
验证PDF⽂档是否符合PDF/A-1b标准
使⽤标准Java打印API打印PDF⽂档
另存为图⽚⽂件,如PNG、JPEG
使⽤内嵌字体和图⽚从头创建PDF
电⼦签名PDF⽂件
iText:
PDFBox⾥⾯的特性iText都有
iText与Servlet结合很好(我这种java web开发者的福⾳)
⾃动化的⽂档处理,例如从XML,HTML,web表单,CSS或者数据库转换成PDF
⽂档更加安全
丰富的插件,各个插件对于⼀个开源项⽬,可以访问iText GitHub
能⽅便地加⼊你的数据处理中,详情参阅参考资料7
⽂档例⼦⽐拼
最后看⼀下两者提供的⽂档:
iText:
官⽹提供的资料很多
出版了⼏本电⼦书,最新的iText7有三本书籍,也是我⼀直在翻译的
申请成功授权以后,提供⽀持
stackoverflow上⾯有专门模块来提供答疑
官⽹论坛提供⽀持
PDFBox:
暂时只有官⽹提供少量资料,没有系统地阐述架构
样例有限
没有相应的官⽅论坛
还有很多bug需要⼤家⼀起努⼒
iText唯⼀缺陷
为啥iText这么强⼤,这么优秀,为什么⽤的⼈这么少呢?或者没有⼤⼒推⼴呢?其实主要是碍于它的许可协议APGL,这个什么许可协议呢?我来总结⼀下:
如果你项⽬⽤到了iText系列产品,⽽且你把你的项⽬⽤于商业⽤途,那么你就需要向iText公司申请授权费了。
除了上述情况,那么都是开源的,只要是个⼈⽤途或者源码公开项⽬,那么你都可以免费试⽤iText产品
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论