50

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

我的要求

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

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

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

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

对此有什么想法吗?

4

6 回答 6

22

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

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

于 2010-10-21T09:47:31.297 回答
9

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

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

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

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

于 2010-10-21T09:44:29.150 回答
7

根据我的经验,我建议您考虑使用Java PDF 库来创建 PDF 报告,

  1. 动态报告
  2. 阿帕奇 PDF 框
  3. iText PDF
  4. PDF小丑

对于您的要求,我认为DynamicReports将是正确的选择。过去 3 年以来,我一直在使用动态报告来满足我的所有 PDF 报告要求。使用非常少的代码,您可以轻松创建真正动态的 PDF。Dynamicreports 是 Jasper Report 的包装器。因此,它在内部使用 Jasper 报告。

于 2016-12-29T09:35:52.040 回答
2

Docmosis允许您在 Word 或 OpenOffice 编写器中创建模板 - 很好地分离关注点,然后在最熟悉的工具中进行布局。

于 2010-10-29T13:34:17.500 回答
1

我使用JODConverter已经有一段时间了,我真的很喜欢它。

我们所做的是使用JODReports生成动态 OpenOffice.org 文档(内部使用 FreeMarker)。然后我们使用 JODConverter 将这些文档转换为 PDF 文档。

听起来工作量很大,但实际上并非如此。

于 2010-10-21T09:45:55.013 回答
1

一种可能是

  • 以 PostScript 格式创建文档,然后
  • 使用 ghostscript (ps2pdf) 将其转换为 pdf
于 2010-10-21T09:49:44.927 回答