我一直在从事一个网络项目,其中客户需要显示诸如身份证之类的报告。我在 Illustrator 中设计了报告的结构并导出为 SVG,因此 BatikRenderer 处理该文件并将其显示在报告中。在iReport中只需包含我要显示的字段。所以基本上它可以在iReport Designer 5.5.0中工作。
当我编译它并显示预览时。看起来一切都很好。
这是我的 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 测试,我需要首先实现这一点,以便我可以继续使用数据源填充报告。
这是我用来测试报告的虚拟代码:
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);
}
这里是异常(exception):
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")
最佳答案
我解决了!我忘记在我的项目中包含 batik 库。就我而言,我使用的是 MAC 操作系统。我在 Ireport Designer.app/Contents/Resources/ireport/ireport/modules/ext/文件夹中搜索了 batik 库。所以你不需要下载。这种方法更好,因此您可以确保使用与 Ireport Designer 相同的 jar。顺便说一下,您需要 xml-apis-ext.jar,它是 batik jar 的依赖项。这个可以在 Ireport Designer 的同一文件夹中找到。将所有这些 jar 添加到您的类路径中,然后完成。这次讨论很有帮助。 Batik not in classpath
关于java - 在 iReport 中使用 SVG 文件会出现 JRExpressionEvalException : Error evaluating expression : Source Text,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23789819/