当前位置: 首页 > 知识库问答 >
问题:

在iReport中使用SVG文件会产生JRExpress sionEvalExc的异常:计算表达式时出错:源文本

孟晨朗
2023-03-14

我一直在一个Web项目中工作,客户端需要显示像ID卡一样的报告。我在Illustrator中设计了报告的结构并导出为SVG,因此BatikRender处理文件并在报告中显示。在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);
}

以下是例外情况:

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个答案

金子轩
2023-03-14

我解决了!我忘了在我的项目中包括蜡染图书馆。就我而言,我使用的是苹果操作系统。我在Ireport designer . app/Contents/Resources/Ireport/Ireport/modules/ext/folder中搜索了蜡染库。所以你不需要下载。这种方式更好,这样可以确保您使用的jar与Ireport设计人员使用的jar相同。顺便说一下,您将需要xml-apis-ext.jar,它是batik jars的一个依赖项。这个可以在Ireport Designer的同一个文件夹中找到。将所有这些jar添加到您的类路径中,这样就完成了。这个讨论帮助很大。蜡染不在类路径中

 类似资料:
  • 我们正在使用iReport 5.0.1,并且已经成功地转换了我们的许多水晶报告包。 我正在处理整数和双精度数据类型的混合数据,并且我正在详细信息部分的变量字段中执行计算。 然后,我有3个变量对详细数据求和。第一个变量是上面的细节变量的直接和。第二个根据IF..THEN.ELSE语句添加一个参数或第二个参数,第三个根据类似的IF..THEN.ELSE语句减去相同的参数值。 我需要舍入组页脚中的3个变

  • 我需要使用iReport生成报告,我试图从2个不同的数据库中获取数据。我是通过(Bilal Siddiqui,JasperReports 3.6开发食谱的作者)关注这篇文章的。但是我每次都得到以下错误。它单独工作很好,但当我使用子报告时,它开始给我错误。 主报告:- 错误 net.sf.jasperreports.engine.fill.JRExpressionEvalException异常:

  • 我试图在iReport中实现一个简单的表达式,但无论我尝试什么,似乎都给了我一个错误。这似乎是一件很简单的事情,但每当我尝试用Java做任何事情时,我都需要大约20次尝试才能把它做好。 我所要做的就是在整数字段的值不为零时显示子报告。我正在对子报告控件使用打印时表达式。 以下是我尝试过的许多事情中的一些: 显然我的Java很烂。任何帮助都将不胜感激。谢谢

  • 错误4904---[nio-8080-exec-1]org.THYMELEAF.templateEngine :[THYMELEAF][http-nio-8080-exec-1]异常处理模板“index”:模板分析期间出错(模板:“class path resource[templates/index.html]”) org.thymeleaf.exceptions.templateInputEx

  • 我想添加日期,但在保存计算SpringEL表达式的表单异常时出错:“#dates.format(Passation.DatePassation,'dd-mmm-yyyy')” 1-胸腺嘧啶: 2级通行 “谢谢你的帮助!

  • 我有一个3D对象的OBJ文件,我正在使用Import Sceneform Asset将其转换为SFA,但在执行此操作时,它总是给我错误,说明找不到“sampledata/models/plc”。磁盘上的mtl 你可以看到红色的盒子。 在其中一个例子中,你可以看到gradle已经为sceneform.asset创建了后台代码,但是由于mtl的缺失,它不能再进一步了。 此外,在默认的谷歌arcore项