将这些PDF生成产品与Java给定的需求进行比较:iText、Apache PDFBox或FOP



这方面有问题,但不是最近的问题,从那以后技术一定在进步。

要求:

  • 基于预定义模板生成pdf文档(我可以使用pdf表单或xsl-fo)
  • 能够填充文本数据
  • 能够填充图形数据(生成的条形码)
  • 能够在生产环境中更改pdf模板而无需打补丁(重新编译)
  • 生成要保存在数据库中的pdf文件(blob)和/或打印
  • 开源/免费

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

  1. iText;现在iText是一个商业库,最新版本不再是免费的(旧版本的分支仍然在MIT许可下:OpenPDF)
  2. FOP;我和FOP共事过很多次。它是相当资源密集的(Java> XML> XSLT> PDF),复杂的PDF变成了一场噩梦(可能导致使用20k+ LoC的XSLT)
  3. PDFBox;它似乎是最好的选择,虽然我没有在大型项目中使用它
  4. 还没有检查飞碟

总之,我会给PDFBox一个尝试。根据您的条形码要求,您可能需要将您的条形码(字体)内联到PDF中或将字体分发给您的客户-注意这些问题。

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

我认为iText和Apahce FOp都可以满足您的标准,但这里您还有一些额外的标准:

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

我不会使用PDFBox,它很适合阅读和修改现有的PDF文件,但使用PDFBox从头开始创建文件可能会有很多工作。

我有点偏见(提交者),但我建议使用iText。

基于预定义模板生成pdf文档(我可以使用pdf表单或xsl-fo)

PDF格式:Check

能够填充文本数据

PDF表单,勾选。您还可以执行程序化布局。

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

检查。给定一个已知的位置(可以是"这个特定注释的位置"),iText将根据符号和值为您绘制条形码。您可以从这里列出的常量推断出支持的符号列表。

对于这类东西,我使用带有"Icon Only"外观的按钮字段。"图标"是一些任意的PDF绘图说明或图像。iText的条形码将创建一个PdfTemplate,你可以把它塞进按钮,没有太多的麻烦。

能够在生产环境中更改PDF模板而无需打补丁(重新编译)

如果你所有的布局都嵌入到PDF模板中,并且你的"条形码到这里"信息没有硬编码到源代码中,那么你就很好了。

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

PDF就是PDF就是PDF。见鬼,只要您做一些额外的工作,您就可以使用iText来构建PDF/A文件。"A"代表存档。

开源/免费

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

不完全是"小f"免费的,但2.1.7版本并不难获得。哦,这是一个孤儿器,没有维护。做一个见多识广的消费者。

这也取决于您想要如何创建PDF。

又一次为飞碟点赞。如果你熟悉html和css,它很容易使用。

没有真正记录的是如何访问itext内置的条形码功能。然而,这很容易实现。我在这里放了一个简短的教程:http://andreas.haufler.info/2012/12/generating-barcodes-in-pdfs-with-flying.html

没有人谈论BFO(Big faceless),尽管它是商业的

最新更新