java - 在 iReport 中使用 SVG 文件会出现 JRExpressionEvalException : Error evaluating expression : Source Text

标签 java svg jasper-reports ireport batik

我一直在从事一个网络项目,其中客户需要显示诸如身份证之类的报告。我在 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 测试,我需要首先实现这一点,以便我可以继续使用数据源填充报告。

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

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/

相关文章:

java - 如何将 "listener"添加到 JList

java - 具有动态列的数据表

file - 如何将SVG动画文件与音频文件同步?

java - 使用 java 或任何 API 将 HTML 页面转换为 MS Word

java - 从 NetBeans 项目的命令行运行 jar 时找不到文件

java - readLine 用于读取多行而不循环?

java - JasperReports 报告未在 Spring MVC 应用程序中弹出

jasper-reports - Jasper 报告使用相同的模板以 CSV 和 PDF 格式呈现

javascript - 将元素附加到 d3.js 中的现有元素

javascript - 多系列时间轴 : plot the lines one by one