我想使用JSP创建动态报告网页。基本上它应该包含以下部分:
我不想自己实现所有内容,而是想使用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导出?
答案 0 :(得分:11)
将JasperReports的HTML输出更改为不错并不容易。以下是关于原因的旧报价:
...... HTML或XLS等文档格式, 不支持绝对定位 文字和图形元素。该 安排此类文件的内容 在网格或表结构中。的 当然,有些人可能会说绝对 HTML中元素的定位是 可能感谢CSS,但你可以 确定CSS标准 功能远非如此 在所有浏览器中实现 相同的HTML文档看起来不会 在任何地方都一样。
这就是生成HTML的^ JasperReports内置导出器的原因, XLS或CSV文档使用特殊的 算法以便安排 存在于某个文件上的元素 某种网格中的页面。什么时候 报告设计非常复杂或 凝聚,从绝对中传递 定位到网格或表格布局 生成非常复杂的表格 未使用的行和列,以实现它 为元素之间的空白空间 或者他们的特殊对齐。
如上所述它已经过时了,但据我所知,它仍然准确无误。
您可以为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}
我远离HTML,只使用PDF,Excel和CSV,除非客户要求HTML。如果必须使用HTML,则可以定义样式表以使用您的站点,并使用jQuery删除所有内联样式,以便样式表接管。类似的东西:
$(document).ready(function() {
$('span').removeAttr('style');
});