JasperReports HTML报告中的SVG图表

时间:2016-07-11 13:58:52

标签: java svg jasper-reports batik

以HTML格式导出时,是否可以在JasperReports中使用清晰或至少不是非常模糊的图表?

我使用SVG图表渲染器类型,这对PDF导出很好。 HTML导出仍然模糊。

我尝试使用JFreeChart和BatikRenderer(使用scriptlet)创建SVG programaticaly。我得到SVG XML,我在jrxml文件中设置为String变量,并在image元素中使用它:

<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文件中图表的清晰图像?我还在考虑在TextField组件中使用生成的SVG XML和HTML标记,但我不认为所有HTML标记都可以使用,只有<b><br>等基本标记。

1 个答案:

答案 0 :(得分:3)

Starting with JasperReports 6.2.2 the HTML exporter will output SVG for chart elements if net.sf.jasperreports.chart.render.type=svg is set, and for BatikRenderer images.

BatikRenderer has actually been deprecated, you can use net.sf.jasperreports.renderers.SimpleDataRenderer.getInstance(byte[]) instead (if you have the SVG as a String you'll need to pass something like $V{Chart}.getBytes("UTF-8")).

For older versions you can improve the quality of the rasterized SVG by setting the net.sf.jasperreports.image.dpi property (in jasperreports.properties) to something like 300. But that would still not be the same as having the actual SVG, so consider upgrading to the latest JasperReports.