Problems with images from shared resources in PDF output [message #517776] |
Mon, 01 March 2010 20:57  |
Eclipse User |
|
|
|
Like most of the folks here, I'm pretty new to BIRT but have been playing with if for the past few weeks.
I've managed to make awesome reports so easily and in a blink of an eye.
I'm using BIRT 2.5.1 and my problems is that reports that I try to generate in PDF format seem to have problems to output the images (Haven't tried charts yet...)
Every time I try to output a PDF report featuring a JPG image, instead of it there's a text saying "Current report item is not supported in this report format." If I use an embedded image the resulting report is normal, but I need the images to be from a shared resource.
This is the configuration of my PDFRenderOption (By the way, I'm using a Servlet whose only purpose is to print the report. It is to be deployed to a Weblogin 9.2 Server. Everything works awesome but the images):
...
design = birtReportEngine.openReportDesign( sc.getResource("/Reports/"+reportName+".rptdesign").toString().substring(6) );
//create task to run and render report
IRunAndRenderTask task = birtReportEngine.createRunAndRenderTask( design );
task.getAppContext().put("BIRT_VIEWER_HTTPSERVLET_REQUEST", req);
PDFRenderOption options = new PDFRenderOption();
options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_PDF);
resp.setHeader( "Content-Disposition", "inline; filename=\""+reportName+".pdf\"" );
options.setOutputStream(resp.getOutputStream());
options.setImageHandler(new HTMLServerImageHandler());
task.setRenderOption(options);
//run report
task.run();
task.close();
...
Everything, Images, Report designs is in the WebContent Folder. Images are in WebContent/Images and report designs are in WebContent/Reports.
Hope anyone helps me out with this.
[Updated on: Mon, 01 March 2010 21:21] by Moderator
|
|
|
|
|
|
|
|
|
|
|
|
Re: Problems with images from shared resources in PDF output [message #518673 is a reply to message #518603] |
Thu, 04 March 2010 12:47   |
Eclipse User |
|
|
|
Hey Jason, you are really being very helpful, I'm learning tons just from this problem.
Look, here are the outputs of the data items:
DataItem 1:
Data (id = 63) seems to output:
http://127.0.0.1:55360/viewer/WebContent/Images/logoBMX.jpg
Data (id = 63) definition:
<data id="63">
<list-property name="boundDataColumns">
<structure>
<property name="name">Column Binding</property>
<expression name="expression" type="javascript">fp = reportContext.getHttpServletRequest().getRequestURL();
lt = fp.lastIndexOf("/");
fp.substring( 0, lt) + "/WebContent/Images/logoBMX.jpg";</expression>
<property name="dataType">string</property>
</structure>
</list-property>
<property name="resultSetColumn">Column Binding</property>
</data>
Data Item 2:
Data (id = 64):
+ A BIRT exception occurred: Error evaluating Javascript expression. Script engine error: TypeError: Cannot call method "lastIndexOf" of null (#1)
Script source: , line: 0, text:
fp = reportContext.getHttpServletRequest().getSession().getServletContext().getRealPath('/WebContent/images');
lt = fp.lastIndexOf("/");
fp.substring( 0, lt) + "/WebContent/Images/logoBMX.jpg";. See next exception for more information.
Error evaluating Javascript expression. Script engine error: TypeError: Cannot call method "lastIndexOf" of null (#1)
Script source: , line: 0, text:
fp = reportContext.getHttpServletRequest().getSession().getServletContext().getRealPath('/WebContent/images');
lt = fp.lastIndexOf("/");
fp.substring( 0, lt) + "/WebContent/Images/logoBMX.jpg";
data.engine.BirtException ( 1 time(s) )
detail : org.eclipse.birt.report.engine.api.EngineException: A BIRT exception occurred: Error evaluating Javascript expression. Script engine error: TypeError: Cannot call method "lastIndexOf" of null (#1)
Script source: , line: 0, text:
fp = reportContext.getHttpServletRequest().getSession().getServletContext().getRealPath('/WebContent/images');
lt = fp.lastIndexOf("/");
fp.substring( 0, lt) + "/WebContent/Images/logoBMX.jpg";. See next exception for more information.
Error evaluating Javascript expression. Script engine error: TypeError: Cannot call method "lastIndexOf" of null (#1)
Script source: , line: 0, text:
fp = reportContext.getHttpServletRequest().getSession().getServletContext().getRealPath('/WebContent/images');
lt = fp.lastIndexOf("/");
fp.substring( 0, lt) + "/WebContent/Images/logoBMX.jpg";
at org.eclipse.birt.report.engine.executor.ExecutionContext.addException(ExecutionContext.java:1215)
at org.eclipse.birt.report.engine.executor.ExecutionContext.addException(ExecutionContext.java:1179)
at org.eclipse.birt.report.engine.executor.QueryItemExecutor.executeQuery(QueryItemExecutor.java:96)
at org.eclipse.birt.report.engine.executor.DataItemExecutor.execute(DataItemExecutor.java:75)
at org.eclipse.birt.report.engine.internal.executor.dup.SuppressDuplicateItemExecutor.execute(SuppressDuplicateItemExecutor.java:43)
at org.eclipse.birt.report.engine.internal.executor.wrap.WrappedReportItemExecutor.execute(WrappedReportItemExecutor.java:46)
at org.eclipse.birt.report.engine.internal.executor.l18n.LocalizedReportItemExecutor.execute(LocalizedReportItemExecutor.java:34)
at org.eclipse.birt.report.engine.layout.html.HTMLBlockStackingLM.layoutNodes(HTMLBlockStackingLM.java:65)
at org.eclipse.birt.report.engine.layout.html.HTMLPageLM.layout(HTMLPageLM.java:90)
at org.eclipse.birt.report.engine.layout.html.HTMLReportLayoutEngine.layout(HTMLReportLayoutEngine.java:99)
at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.doRun(RunAndRenderTask.java:170)
at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.run(RunAndRenderTask.java:75)
at org.eclipse.birt.report.service.ReportEngineService.runAndRenderReport(ReportEngineService.java:920)
at org.eclipse.birt.report.service.BirtViewerReportService.runAndRenderReport(BirtViewerReportService.java:973)
at org.eclipse.birt.report.service.actionhandler.BirtGetPageAllActionHandler.__execute(BirtGetPageAllActionHandler.java:131)
at org.eclipse.birt.report.service.actionhandler.AbstractBaseActionHandler.execute(AbstractBaseActionHandler.java:90)
at org.eclipse.birt.report.soapengine.processor.AbstractBaseDocumentProcessor.__executeAction(AbstractBaseDocumentProcessor.java:47)
at org.eclipse.birt.report.soapengine.processor.AbstractBaseComponentProcessor.executeAction(AbstractBaseComponentProcessor.java:143)
at org.eclipse.birt.report.soapengine.processor.BirtDocumentProcessor.handleGetPageAll(BirtDocumentProcessor.java:183)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.birt.report.soapengine.processor.AbstractBaseComponentProcessor.process(AbstractBaseComponentProcessor.java:112)
at org.eclipse.birt.report.soapengine.endpoint.BirtSoapBindingImpl.getUpdatedObjects(BirtSoapBindingImpl.java:66)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397)
at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186)
at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:454)
at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)
at org.eclipse.birt.report.servlet.BirtSoapMessageDispatcherServlet.doPost(BirtSoapMessageDispatcherServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.eclipse.birt.report.servlet.BirtSoapMessageDispatcherServlet.service(BirtSoapMessageDispatcherServlet.java:122)
at org.eclipse.equinox.http.registry.internal.ServletManager$ServletWrapper.service(ServletManager.java:180)
at org.eclipse.equinox.http.servlet.internal.ServletRegistration.handleRequest(ServletRegistration.java:90)
at org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:111)
at org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:59)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.eclipse.equinox.http.jetty.internal.HttpServerManager$InternalHttpServiceServlet.service(HttpServerManager.java:318)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:502)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:380)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:535)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:880)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:748)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:213)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:520)
Caused by: org.eclipse.birt.data.engine.core.DataException: A BIRT exception occurred: Error evaluating Javascript expression. Script engine error: TypeError: Cannot call method "lastIndexOf" of null (#1)
Script source: , line: 0, text:
fp = reportContext.getHttpServletRequest().getSession().getServletContext().getRealPath('/WebContent/images');
lt = fp.lastIndexOf("/");
fp.substring( 0, lt) + "/WebContent/Images/logoBMX.jpg";. See next exception for more information.
Error evaluating Javascript expression. Script engine error: TypeError: Cannot call method "lastIndexOf" of null (#1)
Script source: , line: 0, text:
fp = reportContext.getHttpServletRequest().getSession().getServletContext().getRealPath('/WebContent/images');
lt = fp.lastIndexOf("/");
fp.substring( 0, lt) + "/WebContent/Images/logoBMX.jpg";
at org.eclipse.birt.data.engine.core.DataException.wrap(DataException.java:118)
at org.eclipse.birt.data.engine.script.ScriptEvalUtil.evaluateJSAsExpr(ScriptEvalUtil.java:773)
at org.eclipse.birt.data.engine.expression.ExprEvaluateUtil.doEvaluateRawExpression(ExprEvaluateUtil.java:266)
at org.eclipse.birt.data.engine.expression.ExprEvaluateUtil.evaluateRawExpression(ExprEvaluateUtil.java:232)
at org.eclipse.birt.data.engine.impl.PreparedDummyQuery$ResultIterator.<init>(PreparedDummyQuery.java:531)
at org.eclipse.birt.data.engine.impl.PreparedDummyQuery$ResultIterator.<init>(PreparedDummyQuery.java:508)
at org.eclipse.birt.data.engine.impl.PreparedDummyQuery$QueryResults.getResultIterator(PreparedDummyQuery.java:367)
at org.eclipse.birt.report.engine.data.dte.QueryResultSet.<init>(QueryResultSet.java:98)
at org.eclipse.birt.report.engine.data.dte.DteDataEngine.doExecuteQuery(DteDataEngine.java:168)
at org.eclipse.birt.report.engine.data.dte.AbstractDataEngine.execute(AbstractDataEngine.java:265)
at org.eclipse.birt.report.engine.executor.ExecutionContext.executeQuery(ExecutionContext.java:1875)
at org.eclipse.birt.report.engine.executor.QueryItemExecutor.executeQuery(QueryItemExecutor.java:80)
... 59 more
Caused by: org.eclipse.birt.core.exception.CoreException: Error evaluating Javascript expression. Script engine error: TypeError: Cannot call method "lastIndexOf" of null (#1)
Script source: , line: 0, text:
fp = reportContext.getHttpServletRequest().getSession().getServletContext().getRealPath('/WebContent/images');
lt = fp.lastIndexOf("/");
fp.substring( 0, lt) + "/WebContent/Images/logoBMX.jpg";
at org.eclipse.birt.core.script.JavascriptEvalUtil.wrapRhinoException(JavascriptEvalUtil.java:299)
at org.eclipse.birt.core.script.JavascriptEvalUtil.evaluateRawScript(JavascriptEvalUtil.java:102)
at org.eclipse.birt.core.script.JavascriptEvalUtil.evaluateScript(JavascriptEvalUtil.java:134)
at org.eclipse.birt.data.engine.script.ScriptEvalUtil.evaluateJSAsExpr(ScriptEvalUtil.java:769)
... 69 more
Caused by: org.mozilla.javascript.EcmaError: TypeError: Cannot call method "lastIndexOf" of null (#1)
at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3557)
at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3535)
at org.mozilla.javascript.ScriptRuntime.typeError(ScriptRuntime.java:3563)
at org.mozilla.javascript.ScriptRuntime.typeError2(ScriptRuntime.java:3582)
at org.mozilla.javascript.ScriptRuntime.undefCallError(ScriptRuntime.java:3601)
at org.mozilla.javascript.ScriptRuntime.getPropFunctionAndThis(ScriptRuntime.java:2160)
at org.mozilla.javascript.gen.c5._c0(:1)
at org.mozilla.javascript.gen.c5.call()
at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:401)
at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3003)
at org.mozilla.javascript.gen.c5.call()
at org.mozilla.javascript.gen.c5.exec()
at org.eclipse.birt.core.script.JavascriptEvalUtil.evaluateRawScript(JavascriptEvalUtil.java:95)
... 71 more
Data Item 3:
Data (id = 65):
+ A BIRT exception occurred: Error evaluating Javascript expression. Script engine error: TypeError: Cannot call method "lastIndexOf" of null (#1)
Script source: , line: 0, text:
fp = reportContext.getHttpServletRequest().getSession().getServletContext().getResource('/WebContent');
lt = fp.lastIndexOf("/");
fp.substring( 0, lt) + "/WebContent/Images/logoBMX.jpg";. See next exception for more information.
Error evaluating Javascript expression. Script engine error: TypeError: Cannot call method "lastIndexOf" of null (#1)
Script source: , line: 0, text:
fp = reportContext.getHttpServletRequest().getSession().getServletContext().getResource('/WebContent');
lt = fp.lastIndexOf("/");
fp.substring( 0, lt) + "/WebContent/Images/logoBMX.jpg";
Data (id = 65) definition:
<data id="65">
<list-property name="boundDataColumns">
<structure>
<property name="name">Column Binding</property>
<expression name="expression" type="javascript">fp = reportContext.getHttpServletRequest().getSession().getServletContext().getResource('/WebContent');
lt = fp.lastIndexOf("/");
fp.substring( 0, lt) + "/WebContent/Images/logoBMX.jpg";</expression>
<property name="dataType">string</property>
</structure>
</list-property>
<property name="resultSetColumn">Column Binding</property>
</data>
Funny thing is that I don't have a viewer directory like the path Data Item 1 outputs...
I couldn't deploy the EAR to my Weblogic due to "org.eclipse.core.runtime.CoreException: Extended Operation failure: org.eclipse.jst.j2ee.internal.archive.operations.EARComponen tExportOperation " but the preview threw those.
Does any of this ring a bell?
Dan
|
|
|
|
|
|
|
|
|
|
|
|
|
|