gpt4 book ai didi

java - JasperReports html 和 pdf 输出

转载 作者:太空狗 更新时间:2023-10-29 13:43:59 33 4
gpt4 key购买 nike

我想使用 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 样式变得困难)html 文件包含 <span style="font-family: sansserif; color: #000000; font-size: 10.0px;"> 而不是 span 类。对于我所有的领域。

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

实现这个的最佳实践是什么?是否可以使用 JasperReports 创建更好的 HTML 导出?

最佳答案

将 JasperReports 的 HTML 输出改得漂亮并不容易。这是关于原因的旧引用:

...document formats such as HTML or XLS, do not support absolute positioning of the text and graphic elements. The content of such documents is arranged in a grid or table structure. Of course, some may argue that absolute positioning of elements in HTML is possible thanks to CSS, but you can be sure that the CSS standard functionality is far from being implemented in all browsers or that the same HTML document won't look the same everywhere.

This is why the ^JasperReports built-in exporters that produce HTML, XLS or CSV documents use a special algorithm in order to arrange the elements present on a certain document page in some sort of a grid. When the report designs are very complex or agglomerated, passing from absolute positioning to grid or table layout produces very complex tables with many unused rows and columns, to make it for the empty space between elements or their special alignment.

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,否则我一直远离 HTML,只使用 PDF、Excel 和 CSV。如果您必须使用 HTML,您可以定义一个样式表来处理您的站点,并使用 jQuery 删除所有内联样式,以便您的样式表接管。像这样的东西:

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

关于java - JasperReports html 和 pdf 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1686117/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com