2009-11-06 60 views
8

我想用JSP创建一个动态报告网页。基本上它应该包含以下部分:JasperReports html和pdf输出

  1. 过滤器:用户可以指定过滤条件并按过滤按钮。
  2. HTML-output:过滤器的结果可以在这里看到。这是一个大的html页面(或者如果一个页面太大,就会有几个页面)。它可能包含到系统其他部分的链接。
  3. PDF输出:用户应该能够保存PDF版本的报告用于打印或归档目的。

我不想自己实现所有的东西,我想使用java报告库,所以我使用JasperReports创建了我的报告。 pdf输出非常好,但报告的html导出不适合我的目的。

JasperReport的html导出创建了一个包含大量硬连线代码和相当随机配置选项的html文件。例如,它默认创建一个白色背景的表格(<table style="... bgcolor="white" ... ">),该表格可以使用IS_WHITE_PAGE_BACKGROUND选项关闭,另一方面,cellpadding="0" cellspacing="0" border="0"table标签中被硬连线。这也是奇怪的(并且使css造型困难),而不是span类,html文件包含所有我的字段的<span style="font-family: sansserif; color: #000000; font-size: 10.0px;">

当然,我可以使用JSP实现html输出,但这意味着我必须设计输出两次(一次在jrxml中用于JasperReports,一次在JSP中),并且我必须重新实现报告功能(如小计计算,总计算,分组......),这是违反DRY原则。

实现此目的的最佳实践是什么?使用JasperReports可以创建更好的HTML导出吗?

回答

12

要改变JasperReports的HTML输出效果并不容易。这是为什么一个古老的名言:

...文档格式,如HTML或XLS, 不支持的 文本和图形元素绝对定位。这些文档的内容 在网格或表格结构中排列为 。的 当然,有些人可能会在HTML元素是绝对 定位 可能由于CSS,但你可以 确保CSS标准 功能远未 在所有浏览器中实现,或者 相同的HTML文档不会看到相同的地方 。

这就是为什么产生HTML, XLS或CSV文件,内置的出口商^ JasperReports的使用一种特殊的算法 以安排存在于某种网格的某个文件 页面上的 元素。当 报表设计非常复杂或 团聚,从绝对 定位传递给电网或表格布局 产生非常复杂的表格有许多 未使用的行和列,使其 的元素 或他们的特殊定位之间的空间。

source

如前所述它是旧的,但据我可以告诉它仍然是准确的。

的事情你可以控制的HTML出口列表是非常有限的:

net.sf.jasperreports.export.html.frames.as.nested.tables 
net.sf.jasperreports.export.html.remove.emtpy.space.between.rows 
net.sf.jasperreports.export.html.size.unit 
net.sf.jasperreports.export.html.using.images.to.align 
net.sf.jasperreports.export.html.white.page.background 
net.sf.jasperreports.export.html.wrap.break.word 
net.sf.jasperreports.export.{format}.exclude.origin.{suffix}.{arbitrary_name} 
net.sf.jasperreports.export.{format}.exclude.origin.keep.first.{suffix}.{arbitrary_name} 

documentation here

我已经从HTML待在一边,只使用PDF,Excel和CSV除非客户需求HTML。如果您必须使用HTML,您可以定义一个样式表来处理您的网站,并使用jQuery删除所有内联样式,以便样式表接管。像这样:

$(document).ready(function() { 
    $('span').removeAttr('style'); 
}); 
+1

我今天碰到这个帖子,我使用html,我需要删除这个跨越得到生成。正如你在答案中提到的,我理解使用jQuery。我的问题是在哪里编写这段代码,以及如何将它集成到我的报告中?请指导我 – 2012-12-27 10:35:21