2011-11-23 155 views
15

前些日子,我的老板问我,他想从外面的web应用程序发送PDFs的发票。鉴于每个人都使用JasperReports和iReport进行设计,我尝试过。我的Web应用程序基于Java + Hibernate和Spring。 Jasper看起来很好,iReport也是如此。无论如何,我已经被两件事情阻止了:寻找JasperReports的替代产品

  • iReport是我见过的最慢的东西。
  • 更严重的是,我确定某些bean具有一些类层次结构,并且在Jasper中处理它非常复杂。我办公室里的每个人都使用Jasper和SQL查询,这样它就是一个简单易用的工具,但我花了整整一天的时间试图将我的bean映射到报表和子报表,而且工作量很小。

我见过DynamicJasper,但是,似乎我无法用它设计报表。你怎么看?有更容易使用的替代品吗?

+0

您是否在寻找与Java + Hibernate和Spring结合使用的替代方案? –

+0

DynamicJasper API是JasperReports API的“包装器”API –

+1

关于iReport性能,最近的4.1.x和4版本中存在某种错误。5版本。查看此论坛帖子了解更多信息:http://jasperforge.org/plugins/espforum/view.php?group_id=83&forumid=101&topicid=94781#95291。删除/重置类路径将iReport的性能提高了一个数量级。 – kaliatech

回答

2

作为iReport的替代品,您可以尝试使用JasperWave JasperReports设计器。 为了解决第二个问题,为什么不写一些将bean结构转换为报告结构的帮助程序java代码?在任何情况下,将java对象映射到某种平面结构总是不容易的。创建一些将隐藏底层bean结构复杂性的java接口。不确定第二个问题是寻找替代报告解决方案的原因。

4

如果时间是最重要的(如通常情况下,当你的老板给了你的东西),我会建议您检查出iText的(主要站点是here)。学习非常非常简单(您可以在20分钟内完成它,运行并生成简单的“Hello,PDF!”示例),并且可以将几乎任何内容导出为PDF:表格,列表,图表,图片,超文本等。

JasperReports实施JRBeanCollectionDataSource是我自己承认的,它是一种更优雅,灵活,永久的解决方案。但是如果你需要一个快速的n-dirty库来生成PDF文件,即将到来的截止日期已经接近尾声,我会下载iText JAR并在其中进行下载。

该网站载有实际的代码示例,几乎任何你想完成。

与JasperReports不同,iText不是报表生成器。它只是一个PDF生成器(从我可以告诉您的问题,听起来像所有你需要的)。因此,对于任何特定的bean,你只要选择你要导出到PDF发票的属性,并使用ChunkParagraph等类,以它们添加到该文件,因为你需要:

// Your POJO/Bean/VO 
Employee oEmp = new Employee(); 

Document oInvoicePdf = new Document(); 
PdfWriter.getInstance(document, new FileOutputStream("/invoices/2011/Invoice201.pdf")); 
document.open(); 
document.add(new Chunk("Employee's name is : " + oEmp.getName())); 
document.close(); 

即使这不是你要找的,不惜一切代价我会推荐你​​转向明确的Apache PdfBox。在我看来,这是纯粹的邪恶,只会打破你的心。

希望这会有所帮助,祝您好运!

+0

我第二个PDFBox很困难。内部数据结构似乎充满了内存泄漏,而且并非真正用于处理大型文档。我最终需要关闭并重新打开源代码pdf,以清除所有不必要的数据。 我真的希望他们解决这些问题。 –

+0

这是否有任何新的更新? – powder366