在iReport中使用SVG FILES会产生JRExpressionEvalException:评估表达式时出错:源文本

时间:2014-05-21 17:13:36

标签: java svg jasper-reports ireport batik

我一直在网络项目中工作,客户需要像Id卡一样显示报告。我在Illustrator中设计了报表的结构并导出为SVG,因此BatikRenderer处理文件并在报表中显示。在 iReport 中只包含我要显示的字段。所以基本上它适用于 iReport Designer 5.5.0

当我编译它并显示预览时。好像一切都好。

enter image description here

这是我的jrxml:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="prueba" whenNoDataType="AllSectionsNoDetail" language="groovy" pageWidth="180" pageHeight="288" columnWidth="180" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="2cedbacf-8972-4cbe-bf07-7d3af62126d5">
<detail>
    <band height="288" splitType="Stretch">
        <image>
            <reportElement x="0" y="0" width="180" height="288" uuid="3c8031c1-70ca-4e47-be8e-735b90b7797a"/>
<imageExpression class="net.sf.jasperreports.engine.JRRenderable"><![CDATA[net.sf.jasperreports.renderers.BatikRenderer.getInstanceFromLocation("svg-design.svg")]]></imageExpression>
        </image>
    </band>
</detail>
    </jasperReport>

我使用绝对路径的其他变体,它也有效:

<![CDATA[net.sf.jasperreports.renderers.BatikRenderer.getInstance(new java.io.File("/Users/RogelioMonge/Dropbox/Adepafut/src/java/com/adepafut/common/reports/svg-design.svg"))]]>

问题是当我尝试从我的应用程序执行报告时。我使用带有空数据源的报告,仅用于SVG测试,我需要先实现这一点,以便继续使用DataSource填充报告。

这是我用来测试报告的虚拟代码:

try {
    Map<String, Object> parameters = new HashMap<String, Object>();
    JRDataSource dataSource = null;
    InputStream report = this.getClass().getClassLoader().getResourceAsStream(JugadorReportEnum.PATH_REPORT.getValue());
    JasperPrint jasperPrint = JasperFillManager.fillReport(report, parameters, dataSource);
    JasperViewer jv = new JasperViewer(jasperPrint, false);
    jv.viewReport(jasperPrint, false);
} catch (JRException ex) {
    Logger.getLogger(ReportHandler.class.getName()).log(Level.SEVERE, null, ex);
}

以下是例外:

ex = (net.sf.jasperreports.engine.fill.JRExpressionEvalException)net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression : 
Source text : net.sf.jasperreports.renderers.BatikRenderer.getInstanceFromLocation("svg-design.svg")

1 个答案:

答案 0 :(得分:0)

我解决了!我忘了在我的项目中包含蜡染库。在我的情况下,我使用MAC OS。我搜索了Ireport Designer.app/Contents/Resources/ireport/ireport/modules/ext/文件夹中的Batik库。所以你不需要下载。这种方式更好,因此您可以确保使用的是Ireport Designer使用的相同罐子。顺便说一句,你需要xml-apis-ext.jar,它是蜡染罐的依赖。这个可以在Ireport Designer的同一文件夹中找到。将所有这些罐子添加到您的类路径中,然后完成。这个讨论帮了很多忙。 Batik not in classpath