比较这些产品的PDF生成与Java给出的要求内:iText,Apache PDFBox或FOP?

有关于这个问题的问题,但不是最近,技术必须自那时以来。

要求:

  • 根据预定义的模板生成pdf文档(我可以使用pdf格式或xsl-fo)
  • 能够填充文本数据
  • 能够填充graphics数据(生成的条形码)
  • 能够在生产环境中修改pdf模板而无需修补(重新编译)
  • 生成要保存在数据库(作为斑点)和/或打印的PDF文件
  • 开源/免费

假设的选项是iText,PDFBox,FOP,还有什么? 基于上述要求的build议是什么?

  1. iText的; 如今iText是一个商业图书馆,最新版本不再免费
  2. FOP; 我和FOP一起工作了很多。 这是相当的资源密集型(Java> XML> XSLT> PDF),复杂的PDF变成一场噩梦(可能导致20k + LoC的XSLT)
  3. PDFBox的; 它似乎是最好的select,虽然我没有在大型项目中使用它
  4. 还没有检查飞碟

总之,我会给PDFBox一个尝试。 根据您的条形码要求,您可能需要将条形码(字体)embeddedPDF中,或将字体分配给客户 – 处理这些问题。

我已经使用基于iText的飞碟http://code.google.com/p/flying-saucer/完成了一个项目。; 它是免费的,易于使用,对CSS有很好的支持,并有很好的开源。

我认为你的标准可以同时满足iText和Apahce FOp,但是在这里你有一些额外的标准:

  • 许可:FOP基于Apache许可,因此“友好”也用于商业用途
  • 灵活性:像iText这样的低级API比高级FOP更灵活
  • 可视化工具:这里有一个FOP的devise者 。
  • 编程模型:iText基于编程API,而FOP需要XSLFO模板和更less的编程。
  • 专有vs标准。 Apache FOP基于标准,因此独立于供应商,而iText是专有API
  • 性能:据说FOP是计算密集型的。 这取决于你的目标PDF文件是什么。 这对我来说是一个永远不会使用FOP的问题。

我不会使用PDFBox,它是阅读和修改现有的PDF文件,但使用PDFBox从头开始创build一个文件可以是很多工作。

我有点偏见(提交者),但我build议iText。

根据预定义的模板生成pdf文档(我可以使用pdf格式或xsl-fo)

PDF格式:检查

能够填充文本数据

PDF表格,检查。 您也可以执行程序化布局。

能够填充graphics数据(生成的条形码)

检查。 给定一个已知的位置(这可能是“特定注释的位置”),iText会根据符号和价值为您绘制一个条形码。 您可以从这里列出的常量中推导出支持的符号体系列表。

对于这种情况,我使用“仅图标”外观的button字段。 “图标”是一些任意的PDF绘图说明或图像。 iText的条形码的东西将创build一个PdfTemplate你可以没有太多的麻烦进入button。

能够在生产环境中修改pdf模板而无需修补(重新编译)

如果你所有的布局都被烘焙到PDF模板中,并且你的“条码到这里”信息不会被硬编码到源代码中,那么你是黄金。

生成要保存在数据库(作为斑点)和/或打印的PDF文件

PDF是PDF是PDF。 哎呀,您可以使用iText来创buildPDF / A文件。 “A”用于存档。

开源/免费

开源:是的。 v2.1.7是使用MPL的最后一个版本。 自5.x以来,所有的iText版本都在AGPL之下。 是的,iText从2.1.7跳到5.0,为了同步iText和iTextSharp之间的版本号。

不完全“小f”免费,但2.1.7版本并不难。 OTOH,它是无用的东西。 成为知情的消费者。

这取决于你想如何创buildPDF。 FOP从XML开始工作,IText允许您从Java以编程方式创build。

另一个赞成飞碟。 它工作得很好,如果你熟悉HTML和CSS,很容易使用。

没有真正logging的是如何访问iTexts内置的条码function。 但是,这可以很容易地完成。 我在这里提供了一个简短的教程: http : //andreas.haufler.info/2012/12/generating-barcodes-in-pdfs-with-flying.html

没有人谈论BFO(大不露面),尽pipe它是商业的

Interesting Posts