首页 文章

比较这些产品的 PDF 生成与 Java 内部要求:iText,Apache PDFBox 或 FOP? [1]

提问于
浏览
39

有人提出了这方面的问题,但最近并没有这方面的问

要求:

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

  • 能够填写文本数据

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

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

  • 生成要保存在数据库中的 pdf 文件(如 blob)and/or 打印

  • 打开 source/free

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

7 回答

  • 30
    • iText 的;如今 iText 是一个商业图书馆,最新版本不再免费

    • FOP;我和 FOP 一起工作了很多。它是相当资源密集型的(Java> XML> XSLT> PDF),复杂的 PDF 变成了一场噩梦(可能会导致 XSLT 带有 20k LoC)

    • PDFBox 的;它似乎是最好的选择,虽然我没有在大型项目中使用它

    • 还没检查飞碟

    总而言之,我会试试 PDFBox。根据条形码要求,您可能需要将条形码(字体)内嵌到 PDF 中或将字体分发给客户 - 处理这些问题。

  • 6

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

  • 6

    我认为你的标准可以通过 iText 和 Apahce FOp 来满足,但是你有一些额外的标准:

    • 许可:FOP 基于 Apache 许可证,因此也“友好”用于商业用途

    • 灵活性:像 iText 这样的低级 API 比高级 FOP 更灵活

    • 可视化工具:有FOP 的一位设计师

    • 编程模型:iText 基于编程 API,而 FOP 需要 XSLFO 模板和较少的编程。

    • 专有与标准。 Apache FOP 基于标准,因此独立于供应商,而 iText 是 proprietaRy API

    • 性能:据说 FOP 更加计算密集。它取决于你的目标 PDF 文件是什么。使用 FOP 对我来说永远不是问题。

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

  • 3

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

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

    PDF 表格:检查

    能够填写文本数据

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

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

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

    对于这种事情,我使用具有“仅图标”外观的 Button 字段。 “图标”是一些任意 PDF 绘图指令或图像。 iText 的条形码内容会创建一个PdfTemplate,你可以填入按钮而不会有太多麻烦。

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

    如果您的所有布局都被烘焙到 PDF 模板中,并且您的“条形码到此处”信息并未硬编码到源代码中,那么您就是金色的。

    生成要保存在数据库中的 pdf 文件(如 blob)and/or 打印

    PDF 是 PDF 格式的 PDF 格式。哎呀,你需要做一些额外的工作,你可以使用 iText 来构建 PDF/A 文件。 “A”代表档案。

    打开 source/free

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

    不完全是“小 f”免费,但 2.1.7 版本并不难获得。 OTOH,它是 orphan-ware,没有维护。做一个明智的消费者。

  • 2

    这取决于您想要如何创建 PDF。 FOP 使用 XML,IText 允许您以编程方式从 Java 创建。

  • 2

    另一个赞成 flying-saucer。它非常好用,如果你熟悉 html 和 css,它很容易使用。

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

  • -1

    没有人在谈论BFO(Big 无脸)虽然它是商业

相关问题