JasperReports html和pdf输出

asa*_*n74 8 html java jsp reporting jasper-reports

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

  1. 过滤:用户可以指定过滤条件并按下过滤按钮.
  2. HTML输出:可以在此处看到过滤器的结果.它是一个大的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导出?

beg*_*ggs 11

将JasperReports的HTML输出更改为不错并不容易.这是一个旧的引用原因:

... HTML或XLS等文档格式不支持文本和图形元素的绝对定位.这些文档的内容以网格或表格结构排列.当然,有些人可能会争辩说,由于CSS可以在HTML中对元素进行绝对定位,但是你可以确定CSS标准功能远远没有在所有浏览器中实现,或者相同的HTML文档在各处看起来都不一样.

这就是生成HTML,XLS或CSV文档的^ JasperReports内置导出器使用特殊算法的原因,以便在某种网格中排列某个文档页面上的元素.当报表设计非常复杂或聚集时,从绝对定位到网格或表格布局会产生非常复杂的表格,其中包含许多未使用的行和列,以使其适用于元素之间的空白空间或其特殊对齐.

资源

如上所述它已经过时了,但据我所知,它仍然准确无误.

您可以为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}
Run Code Online (Sandbox Code Playgroud)

文档在这里

我远离HTML,只使用PDF,Excel和CSV,除非客户要求HTML.如果必须使用HTML,则可以定义样式表以使用您的站点,并使用jQuery删除所有内联样式,以便样式表接管.就像是:

$(document).ready(function() {
   $('span').removeAttr('style');
});
Run Code Online (Sandbox Code Playgroud)