HTML 报告中的 JasperReports SVG 图表

JasperReports SVG chart in HTML report

当以 HTML 格式导出时,JasperReports 中的图表是否可以清晰或至少不是很模糊?

我使用 SVG 图表渲染器类型,适合 PDF 导出。 HTML 出口仍然模糊。

我尝试使用 JFreeChart 和 BatikRenderer(使用 scriptlet)以编程方式创建 SVG。我得到 SVG XML,我在 jrxml 文件中将其设置为字符串变量,并在图像元素中使用它:

<image scaleImage="FillFrame">
    <reportElement positionType="Float" x="401" y="566" width="159" height="124" uuid="1baa80f7-3151-4fb8-be85-140059e9e28e"/>
    <imageExpression>
        <![CDATA[net.sf.jasperreports.renderers.BatikRenderer.getInstanceFromText($V{Chart})]]>
    </imageExpression>
</image>

使用这种方法图像仍然模糊(后来我注意到 HTML 导出的所有图像资源都是 .png 格式)。

使用下面的代码仍然可以在 HTML 导出中生成 PNG 图像

net.sf.jasperreports.renderers.BatikRenderer.getInstanceFromText("<svg xmlns:svg=\"http://www.w3.org/2000/svg\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.0\" width=\"100\" height=\"100\"><circle cx=\"50\" cy=\"50\" r=\"40\" stroke=\"green\" stroke-width=\"4\" fill=\"yellow\" /></svg>")

有没有办法在 Jasper 报告或任何其他解决方案中使用生成的 SVG XML 来获得 HTML 文件中图表的清晰图像?我也在考虑在带有 HTML 标记的 TextField 组件内部使用生成的 SVG XML 但我认为这对所有 HTML 标签都是不可能的,只是像 <b><br>.

从 JasperReports 6.2.2 开始,如果设置了 net.sf.jasperreports.chart.render.type=svg,HTML 导出器将为图表元素和 BatikRenderer 图像输出 SVG。

BatikRenderer 实际上已被弃用,您可以改用 net.sf.jasperreports.renderers.SimpleDataRenderer.getInstance(byte[])(如果您将 SVG 作为 String,则需要传递类似 $V{Chart}.getBytes("UTF-8") 的内容).

对于旧版本,您可以通过将 net.sf.jasperreports.image.dpi 属性(在 jasperreports.properties 中)设置为 300 之类的值来提高光栅化 SVG 的质量。但这仍然不是与实际的 SVG 相同,因此请考虑升级到最新的 JasperReports。