适用于 Java 的 PDF 生成库 [已关闭]

我知道以前有人问过这个问题,但我仍然不确定在我当前的项目中使用哪种PDF生成框架。

我的要求

  • 动态生成 PDF 文档(主要是订单、发票)
  • 基于Java
  • 易于布局
  • 应该是开源的
  • 易于更改布局

很多人似乎都在使用iText,但我对关注点的分离有一些担忧(除了更改的许可证):在HTML上下文中,有很好的MVC支持,我通常坚持使用Spring MVC和FreeMarker来分离逻辑和布局。我有点担心使用iText,你最终会混合很多代码和布局。

我知道,Apache FOP在这里可能是一个解决方案,但是我再次发现XSLT使用起来很乏味,我读到FOP在涉及大量文档时可能会很慢?

我也考虑过JasperReports,但根据我的理解,这更适合包含表格数据集的报表,而不是单个文档,例如需要大量布局格式的发票?

对此有什么想法吗?


答案 1

试试 JasperReports。使用 iReport 创建 .jrxml 文件。JapserReports可以处理复杂的布局。对于基于不同查询的报表部分,请查看如何使用嵌入到主报表中的子报表。

就像@Adrian Smith 的解决方案一样,此方法将报表布局编辑与数据源分开。


答案 2

我已经实现了一个很好的解决方案,我的软件创建了一个与格式无关的“纯”XML文件,然后我给我的老板XSD,他把它放在Altova StyleVision中,在那里他可以根据他从XSD中提取的数据进行所见即所得的设计报告。该软件会生成一个 XSLT。所以我的程序:

  • 生成与格式无关的“纯”XML
  • 使用 XSLT 对其进行转换,XSLT 的输出为 XML-FO
  • 使用 Apache FOP 将 XML-FO 转换为 PDF

这是一个非常好的解决方案,这意味着我(作为程序员)不再需要每次我的老板想要更改报表中的颜色时都更改我的代码,我的工作只是生成“纯”XML。

更新:我还应该指出,我让我的老板使用Tortoise SVN访问我们的SVN存储库,这很容易使用,他可以毫无错误地使用它。因此,他可以将XSLT文件直接检查到SVN中并运行构建/部署,甚至不必中断我的工作。显然,该工作流程仅适用于那些足够精确以至于不会犯错误等的人,但在这种情况下,它对我们来说效果很好。


推荐