JasperReports html和pdf输出

时间:2009-11-06 08:07:41

标签: java html jsp reporting jasper-reports

我想使用JSP创建动态报告网页。基本上它应该包含以下部分:

  1. 过滤器:用户可以指定过滤条件并按下过滤器按钮。
  2. HTML-output:可以在此处看到过滤器的结果。它是一个大的html页面(如果一个页面太大,则为几个页面)。它可能包含指向系统其他部分的链接。
  3. PDF输出:用户应该能够保存报告的pdf版本以进行打印或存档。
  4. 我不想自己实现所有内容,而是想使用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导出?

1 个答案:

答案 0 :(得分:11)

将JasperReports的HTML输出更改为不错并不容易。以下是关于原因的旧报价:

  

...... HTML或XLS等文档格式,   不支持绝对定位   文字和图形元素。该   安排此类文件的内容   在网格或表结构中。的   当然,有些人可能会说绝对   HTML中元素的定位是   可能感谢CSS,但你可以   确定CSS标准   功能远非如此   在所有浏览器中实现   相同的HTML文档看起来不会   在任何地方都一样。

     

这就是生成HTML的^ JasperReports内置导出器的原因,   XLS或CSV文档使用特殊的   算法以便安排   存在于某个文件上的元素   某种网格中的页面。什么时候   报告设计非常复杂或   凝聚,从绝对中传递   定位到网格或表格布局   生成非常复杂的表格   未使用的行和列,以实现它   为元素之间的空白空间   或者他们的特殊对齐。

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');
});