[SOLVED] SVG is not rendered

I made a report with iReport 5.0.1, and after I checked "Force SVG Shapes" in the PDF export options, the SVG shapes are rendered as they should when generating the report as PDF. BUT: When I deployed the report to the Jasperserver from within iReport, the Report is stopped being rendered with an error.

The Expression I use in iReport (which works) is (for some reason the code here in this editor is converted into html, so I changed the brackets into round ones):

            (image)
                (reportElement uuid="6d70bf5f-9652-4df1-9715-16de7fdffd1e" x="0" y="0" width="78" height="33"/)
                (imageExpression class="net.sf.jasperreports.engine.JRRenderable")(![CDATA[net.sf.jasperreports.renderers.BatikRenderer.getInstance(new java.io.File("Z:\\jaspersoft\\reports\\logo.svg"))]])(/imageExpression)
            (/image)

On the server I changed the path to "repo:logo.svg" and uploaded the SVG via iReport into the resources folder. The error I get is:
net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression :
        Source text : net.sf.jasperreports.renderers.BatikRenderer.getInstance(new java.io.File("repo:logo_de.svg"))
        at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:203)
        at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:591)
        at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:559)
        at net.sf.jasperreports.engine.fill.JRFillElement.evaluateExpression(JRFillElement.java:966)
        at net.sf.jasperreports.engine.fill.JRFillImage.evaluateImage(JRFillImage.java:483)
        at net.sf.jasperreports.engine.fill.JRFillImage.evaluate(JRFillImage.java:463)
        at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:259)
        at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:459)
        at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2044)
        at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:778)
        at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:288)
        at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:151)
        at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:909)
        at net.sf.jasperreports.engine.fill.BaseFillHandle$ReportFiller.run(BaseFillHandle.java:120)
        at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl$SynchronousExecutor.execute(EngineServiceImpl.java:859)
        at net.sf.jasperreports.engine.fill.BaseFillHandle.startFill(BaseFillHandle.java:165)
        at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl$AsynchronousReportFiller.fillReport(EngineServiceImpl.java:821)
        at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl.fillReport(EngineServiceImpl.java:1622)
        at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl$ReportFill.runReport(EngineServiceImpl.java:1005)
        at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl$ReportRunnable.run(EngineServiceImpl.java:881)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)
Caused by: net.sf.jasperreports.engine.JRException: Error loading byte data : repo:logo_de.svg
        at net.sf.jasperreports.engine.util.JRLoader.loadBytes(JRLoader.java:419)
        at net.sf.jasperreports.renderers.BatikRenderer.getInstance(BatikRenderer.java:318)
        at net.sf.jasperreports.renderers.BatikRenderer$getInstance.call(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
        at report3_1359470066359_298192.evaluate(calculator_report3_1359470066359_298192:199)
        at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:190)
        ... 22 more
Caused by: java.io.FileNotFoundException: repo:logo_de.svg (No such file or directory)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.(FileInputStream.java:106)
        at net.sf.jasperreports.engine.util.JRLoader.loadBytes(JRLoader.java:405)
        ... 29 more
2013-01-29 15:34:28,714 ERROR errorPage_jsp,http-8080-20:487 - stack trace of exception that redirected to errorPage.jsp
com.jaspersoft.jasperserver.api.JSException: Error filling report
        at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl$FillResultListener.reportFillError(EngineServiceImpl.java:1178)
        at net.sf.jasperreports.engine.fill.BaseFillHandle.notifyError(BaseFillHandle.java:211)
        at net.sf.jasperreports.engine.fill.BaseFillHandle$ReportFiller.run(BaseFillHandle.java:135)
        at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl$SynchronousExecutor.execute(EngineServiceImpl.java:859)
        at net.sf.jasperreports.engine.fill.BaseFillHandle.startFill(BaseFillHandle.java:165)
        at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl$AsynchronousReportFiller.fillReport(EngineServiceImpl.java:821)
        at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl.fillReport(EngineServiceImpl.java:1622)
        at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl$ReportFill.runReport(EngineServiceImpl.java:1005)
        at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl$ReportRunnable.run(EngineServiceImpl.java:881)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)
Caused by: net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression :
        Source text : net.sf.jasperreports.renderers.BatikRenderer.getInstance(new java.io.File("repo:logo_de.svg"))
        at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:203)
        at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:591)
        at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:559)
        at net.sf.jasperreports.engine.fill.JRFillElement.evaluateExpression(JRFillElement.java:966)
        at net.sf.jasperreports.engine.fill.JRFillImage.evaluateImage(JRFillImage.java:483)
        at net.sf.jasperreports.engine.fill.JRFillImage.evaluate(JRFillImage.java:463)
        at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:259)
        at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:459)
        at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2044)
        at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:778)
        at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:288)
        at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:151)
        at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:909)
        at net.sf.jasperreports.engine.fill.BaseFillHandle$ReportFiller.run(BaseFillHandle.java:120)
        ... 9 more
Caused by: net.sf.jasperreports.engine.JRException: Error loading byte data : repo:logo_de.svg
        at net.sf.jasperreports.engine.util.JRLoader.loadBytes(JRLoader.java:419)
        at net.sf.jasperreports.renderers.BatikRenderer.getInstance(BatikRenderer.java:318)
        at net.sf.jasperreports.renderers.BatikRenderer$getInstance.call(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
        at report3_1359470066359_298192.evaluate(calculator_report3_1359470066359_298192:199)
        at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:190)
        ... 22 more
Caused by: java.io.FileNotFoundException: repo:logo_de.svg (No such file or directory)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.(FileInputStream.java:106)
        at net.sf.jasperreports.engine.util.JRLoader.loadBytes(JRLoader.java:405)
        ... 29 more
 

What goes wrong here???

rucksman007's picture
Joined: Jan 29 2013 - 6:14am
Last seen: 9 years 2 months ago
Hmm..played around with this and got the same error..but maybe a bit further. I think you need getInstanceFromLocation not getInstance http://jasperreports.sourceforge.net/api/net/sf/jasperreports/renderers/...(net.sf.jasperreports.engine.JasperReportsContext, java.lang.String)
ernestoo - 10 years 7 months ago

2 Answers:

Finally I was able to solve this problem. Not the way I wanted to, but in the end this solution works for me. Instead of "new java.io.File" I am using now "new java.net.URL" and point to a web directory on my localhost (a regular apache webserver is running anyway on my jasperserver machine). So the complete string is:

new java.net.URL("http://localhost/jaspersoft/logo.svg")

rucksman007's picture
Joined: Jan 29 2013 - 6:14am
Last seen: 9 years 2 months ago

Hi all,
I have used this code to add SVG image in iReport but I have an error which says "Error displaying report page.See the console for details". The problem is nothing is displayed in the console. Can any one help me?

metmuler - 9 years 4 months ago

If you use

 net.sf.jasperreports.renderers.BatikRenderer.getInstanceFromLocation("./image/logo.svg")
 
<imageExpression><![CDATA[net.sf.jasperreports.renderers.BatikRenderer.getInstanceFromLocation("./image/logo.svg")]]></imageExpression> 

instead of

net.sf.jasperreports.renderers.BatikRenderer.getInstance(new java.io.File("Z:\\jaspersoft\\reports\\logo.svg"))

you can use relative path. Since the absolut path could eventually not found after deployment to any render server.

BigAl's picture
111
Joined: Nov 4 2013 - 8:37am
Last seen: 5 years 9 months ago

Thank you very much. Been struggling with this for a while now!

toffer - 9 years 6 months ago
Feedback
randomness