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.
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.
at net.sf.jasperreports.engine.util.JRLoader.loadBytes(JRLoader.java:405)
... 29 more
What goes wrong here???
- Log in or register to post comments
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")
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.