比较这些产品的PDF生成与Java给出的要求内:iText,Apache PDFBox或FOP?
有关于这个问题的问题,但不是最近,技术必须自那时以来。
要求:
- 根据预定义的模板生成pdf文档(我可以使用pdf格式或xsl-fo)
- 能够填充文本数据
- 能够填充graphics数据(生成的条形码)
- 能够在生产环境中修改pdf模板而无需修补(重新编译)
- 生成要保存在数据库(作为斑点)和/或打印的PDF文件
- 开源/免费
假设的选项是iText,PDFBox,FOP,还有什么? 基于上述要求的build议是什么?
- iText的; 如今iText是一个商业图书馆,最新版本不再免费
- FOP; 我和FOP一起工作了很多。 这是相当的资源密集型(Java> XML> XSLT> PDF),复杂的PDF变成一场噩梦(可能导致20k + LoC的XSLT)
- PDFBox的; 它似乎是最好的select,虽然我没有在大型项目中使用它
- 还没有检查飞碟
总之,我会给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它是商业的