2011-09-08 139 views
42

创建PDF可能重复:
PDF Generation Library for Java与Java

我工作的发票项目为当地的会计公司。 什么是使用Java创建PDF文件的好方法?任何好的图书馆? 我完全不熟悉PDF导出(任何语言)。

+0

[HTML to PDF转换器列表](http://stackoverflow.com/questions/3178448/list-of-html-to-pdf-converters)的可能的重复,在[将HTML文件转换为PDF ](http://stackoverflow.com/questions/633780/converting-html-files-to-pdf)。 – trashgod

回答

65

我喜欢我的输出数据转换成XML(使用CastorXStreamJAXB),然后使用XSLT样式表到XSL-FO并呈现与Apache FOP成PDF转换它。到目前为止,已经完成了10页的报告和400页的手册。我发现这比使用iText代码生成PDF更灵活和可塑。

+0

将400页手册转换为PDF有多快?我已经使用iText,但对于我们的一些大型文档来说太慢了。 –

+0

对不起,我在2005 - 2007年做过这件事,但是IIRC对于一份简单的10页报告(带有缓存样式表)以及几十秒针对更复杂的400页报告而言是次要的。如果需要使用不同的数据生成相同/相似的报表,请缓存已解析的XSL样式表 - 这会大大提升。 –

+0

我也可以推荐Velocity输出数据到xml。 –

29

以下是使用Java创建PDF一些库:

  1. iText
  2. Apache PDFBox
  3. BFO

我已经使用iText的用于genarating PDF的疼痛在一点点过去。

或者您可以尝试使用FOP:FOP是用Java编写的XSL格式化程序。它与XSLT转换引擎一起使用,将XML文档格式化为PDF。

+14

在iText网站上,我读到他们的AGPL许可要求您提供“包括您自己的产品在内的所有源代码的分发,包括如果它是基于Web的应用程序”等等。似乎对任何商业项目都是完全不能接受的。 – mvmn

+0

@mvmn:您可以购买商业授权。 – Thilo

+0

或者你可以使用iText 1。3这是GNU Affero通用公共许可证v3 –

13

另一种选择是JasperReports:JasperReports Library。它使用iText本身,而不仅仅是你要求的PDF库,但如果它符合你的需求,我会为它而努力。

简而言之,它允许您设计可在运行时填充的报表。如果您使用custom datasource,则可以将JasperReports轻松集成到现有系统中。它可以为您节省整个布局问题,例如当发票跨越更多的网站,每一方都应该有一个页脚,等等。