2014-05-21 30 views
1

我在客戶端需要顯示像身份證的報告的web項目一直在努力。我在Illustrator中設計了報告的結構並將其導出爲SVG,因此BatikRenderer處理該文件並在報告中顯示它。並在iReport只包括我要展示的領域。所以基本上它在iReport Designer 5.5.0中有效。與SVG文件中的iReport的工作給予JRExpressionEvalException:評估表達式錯誤:源文本

當我編譯它並顯示預覽。好像一切都好。

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") 

回答

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