Java JasperReports html和pdf输出

Java JasperReports html和pdf输出,java,html,jsp,reporting,jasper-reports,Java,Html,Jsp,Reporting,Jasper Reports,我想使用JSP创建一个动态报告网页。基本上应包括以下部分: 过滤:用户可以指定过滤条件并按下过滤按钮 HTML输出:过滤器的结果可以在这里看到。它是一个大的html页面(如果一个页面太大,则有几个页面)。它可能包含到系统其他部分的链接 PDF输出:用户应能够保存报告的PDF版本,以便打印或存档 我不想自己实现所有功能,而是想使用java报告库,因此我使用创建报告。pdf输出非常好,但是报告的html导出不适合我的目的 JasperReport的html导出创建了一个html文件,其中包含大量硬连

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

  • 过滤:用户可以指定过滤条件并按下过滤按钮
  • HTML输出:过滤器的结果可以在这里看到。它是一个大的html页面(如果一个页面太大,则有几个页面)。它可能包含到系统其他部分的链接
  • PDF输出:用户应能够保存报告的PDF版本,以便打印或存档
  • 我不想自己实现所有功能,而是想使用java报告库,因此我使用创建报告。pdf输出非常好,但是报告的html导出不适合我的目的

    JasperReport的html导出创建了一个html文件,其中包含大量硬连线代码和非常随机的配置选项。例如,默认情况下,它会创建一个白色背景的表格(
    ),可以使用option关闭该表格,另一方面,
    cellpadding=“0”cellspacing=“0”border=“0”
    表格
    标记中硬连接。同样奇怪的是(这使得css样式设计变得困难),html文件中包含了所有my字段的
    ,而不是跨类

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


    实施这一目标的最佳实践是什么?是否可以使用JasperReports创建更好的HTML导出?

    要将JasperReports的HTML输出更改为良好的输出并不容易。以下是一段关于原因的老话:

    …文档格式,如HTML或XLS, 不支持设备的绝对定位 文本和图形元素。这个 这些文件的内容已安排妥当 在网格或表格结构中。属于 当然,有些人可能会说绝对的 HTML中元素的定位是非常重要的 可能是因为CSS,但你可以 确保CSS标准 功能还远远没有实现 在所有浏览器或其他浏览器中实现 相同的HTML文档看起来不一样 到处都一样

    这就是为什么^JasperReports报告生成HTML的内置导出程序, 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');
    });