| Home » Archived » BIRT » How to render a chart (standalone)?
 Goto Forum:| 
| How to render a chart (standalone)? [message #85108] | Thu, 27 October 2005 22:53  |  | 
| Eclipse User  |  |  |  |  | Originally posted by: none.none.none 
 Hello,
 I'm trying to use BIRT charting independent of a report.  So, for example, I
 have a web application that will generate a chart and render it to a PNG
 image.  Once I have the org.eclipse.birt.chart.model.Chart object, what do I
 do??  I can't seem to even come close to figuring out how to turn this into
 a viewable image.
 
 Any ideas?
 
 Thanks!
 |  |  |  |  |  |  |  |  | 
| Re: How to render a chart (standalone)? [message #85366 is a reply to message #85327] | Fri, 28 October 2005 12:44   |  | 
| Eclipse User  |  |  |  |  | Originally posted by: none.none.none 
 Actually, after a bit more searching I came across another useful document.
 I haven't tested it out yet, but it looks like it has what I need here (so
 far the most comprehensive doc I've seen on the chart engine)...  It's a
 little confusing because it's a FAQ  Word document which I just assumed was
 the same as the FAQ web page... but it's not.
 
 Anyway, for those interested, it is located here:
 http://eclipse.org/birt/faq/Charts_FAQ.doc
 
 The relevant code I was looking for below....
 
 
 
 
 IDeviceRenderer idr = null;
 
 try {
 
 idr = ps.getDevice("dv.PNG");
 
 } catch (PluginException pex)
 
 {
 
 DefaultLoggerImpl.instance().log(pex);
 
 }
 
 
 
 // DEFINE THE BOUNDS AND CONVERT INTO POINTS
 
 Bounds bo = BoundsImpl.create(0, 0, 800, 600); // IN PIXELS
 
 bo.scale(72d/idr.getDisplayServer().getDpiResolution()); // CONVERTED TO
 POINTS
 
 
 
 // BUILD THE RENDERED CHART STRUCTURE
 
 Generator gr = Generator.instance();
 
 GeneratedChartState gcs = null;
 
 try {
 
 gcs = gr.build(
 
 idr.getDisplayServer(),
 
 cm, null,
 
 bo, null
 
 );
 
 } catch (GenerationException gex)
 
 {
 
 DefaultLoggerImpl.instance().log(gex);
 
 System.exit(0);
 
 }
 
 
 
 // RENDER THE CHART TO A PNG FILE
 
 Image img = new BufferedImage(
 
 (int) bo.getWidth(), (int) bo.getHeight(), BufferedImage.TYPE_INT_ARGB
 
 );
 
 idr.setProperty(IDeviceRenderer.FILE_IDENTIFIER, "chart.png");
 
 try {
 
 gr.render(idr, gcs);
 
 } catch (RenderingException rex)
 
 {
 
 DefaultLoggerImpl.instance().log(rex);
 
 }
 
 
 
 "chris" <none@none.none> wrote in message
 news:djti7j$hgg$1@news.eclipse.org...
 > Thanks David.   I had actually not located that document.  However, it
 > looks very similar to the examples given in the FAQ.  Both of which show
 > how to render an image to a Swing or SWT device.  I'm not familiar with
 > either one of those other than I believe you would only do that if you
 > wanted to render the chart in a desktop app.  I need to render it to
 > web/HTML client.  I still haven't seen anything about how to render it to
 > a common image format such as PNG, JPG, etc.
 > What am I missing?
 >
 |  |  |  |  | 
| Re: How to render a chart (standalone)? [message #85388 is a reply to message #85327] | Fri, 28 October 2005 12:47   |  | 
| Eclipse User  |  |  |  |  | Hi Chris, 
 Rendering in PNG or JPG is quite easy, simply use a PNG device renderer.
 Then set the file path on the renderer:
 
 File fChartImage = File.createTempFile( "chart.png");
 IDeviceRenderer idr = PluginSettings.instance( ).getDevice( "dv.PNG" );
 idr.setProperty( IDeviceRenderer.FILE_IDENTIFIER, fChartImage.getPath( ));
 
 The file will be rendered at the specified path.
 
 You can use all these device renderers, and even implement new ones if you
 like:
 dv.SWING
 dv.SWT
 dv.PNG
 dv.GIF
 dv.JPG
 dv.BMP
 dv.SVG
 
 Hope this helps,
 
 Thanks,
 
 David
 
 "chris" <none@none.none> wrote in message
 news:djti7j$hgg$1@news.eclipse.org...
 > Thanks David.   I had actually not located that document.  However, it
 > looks very similar to the examples given in the FAQ.  Both of which show
 > how to render an image to a Swing or SWT device.  I'm not familiar with
 > either one of those other than I believe you would only do that if you
 > wanted to render the chart in a desktop app.  I need to render it to
 > web/HTML client.  I still haven't seen anything about how to render it to
 > a common image format such as PNG, JPG, etc.
 > What am I missing?
 >
 > "David Michonneau" <dmichonneau@actuate.com> wrote in message
 > news:djsmgb$aaj$1@news.eclipse.org...
 >> Hi,
 >>
 >> Please check the existing chart engine API:
 >> http://www.eclipse.org/birt/wiki/index.php?n=BPS.BPS39
 >>
 >> Thanks,
 >>
 >> David
 >
 >
 >
 |  |  |  |  |  |  | 
| Re: How to render a chart (standalone)? [message #85460 is a reply to message #85108] | Fri, 28 October 2005 15:29   |  | 
| Eclipse User  |  |  |  |  | Originally posted by: none.none.none 
 Sorry to keep dragging this thing out, I'm closer, but still not quite
 there.  So I've gotten over the hurdle of understanding, in general, how to
 render an image through code.  However, I think I'm still having a problem
 with the 'standalone' part.
 
 So here's how I'm trying to run this.. My IDE is Eclipse 3.1 using the
 Tomcat plugin.  I'm trying to generate a simple chart (createLineChart()
 taken from samples) into a PNG.  I am currently on 2.0 M1, but I also
 initially tried the 1.0.1 standalone charting download.  The code to
 generate the chart and render it is in a servlet.
 
 I've taken the brute-force approach to try to get this thing working.  So,
 in my web-inf directory (where I point BIRT_HOME), I have a plugins
 directory with ALL of the Birt 2.0 plugins in there.  In my Eclipse
 build-path to get the servlet to compile, I have the following libs...
 
 birt.core
 device.extension
 chart.engine
 
 When running the code (at the bottom of this message) as-is, I get the
 following error which occurs on the gr.build() call:
 ------------------------------------------------------------ ------------------
 Oct 28, 2005 1:05:49 PM org.eclipse.birt.chart.log.impl.JavaUtilLoggerImpl
 log
 
 SEVERE: Exception
 
 org.eclipse.birt.chart.exception.ChartException: $NO-RB$
 org.eclipse.birt.chart.render.Line
 
 at
 org.eclipse.birt.chart.util.PluginSettings.newInstance(Plugi nSettings.java:595)
 
 at
 org.eclipse.birt.chart.util.PluginSettings.getRenderer(Plugi nSettings.java:306)
 
 at
 org.eclipse.birt.chart.render.BaseRenderer.instances(BaseRen derer.java:1537)
 
 at  org.eclipse.birt.chart.factory.Generator.build(Generator.jav a:239)
 
 
 
 If I remove the "STANDALONE" property, then I get this error:
 
 ------------------------------------------------------------ -----------------
 
 java.lang.VerifyError: Cannot inherit from final class
 
 at java.lang.ClassLoader.defineClass1(Native Method)
 
 at java.lang.ClassLoader.defineClass(Unknown Source)
 
 at java.security.SecureClassLoader.defineClass(Unknown Source)
 
 at java.net.URLClassLoader.defineClass(Unknown Source)
 
 at java.net.URLClassLoader.access$100(Unknown Source)
 
 at java.net.URLClassLoader$1.run(Unknown Source)
 
 at java.security.AccessController.doPrivileged(Native Method)
 
 at java.net.URLClassLoader.findClass(Unknown Source)
 
 at
 org.eclipse.birt.core.framework.server.PluginClassLoader.fin dLocalClass(PluginClassLoader.java:116)
 
 at
 org.eclipse.birt.core.framework.server.PluginClassLoader.fin dClass(PluginClassLoader.java:36)
 
 at java.lang.ClassLoader.loadClass(Unknown Source)
 
 at java.lang.ClassLoader.loadClass(Unknown Source)
 
 at
 org.eclipse.birt.core.framework.server.PluginClassLoader.loa dExportedClass(PluginClassLoader.java:98)
 
 at
 org.eclipse.birt.core.framework.server.PluginClassLoader.doL oadImportClass(PluginClassLoader.java:84)
 
 at
 org.eclipse.birt.core.framework.server.PluginClassLoader.loa dImportedClass(PluginClassLoader.java:54)
 
 at
 org.eclipse.birt.core.framework.server.PluginClassLoader.fin dClass(PluginClassLoader.java:30)
 
 
 
 
 
 
 
 
 
 Code:
 
 ------------------------------------------------------------ -------------------------------------------------------
 
 System.setProperty("STANDALONE", "true");
 System.setProperty("BIRT_HOME",
 "C:\\EclipseWorkspace\\Test\\web\\WEB-INF");
 Chart chart = createLineChart();
 PluginSettings ps = PluginSettings.instance();
 IDeviceRenderer idr = null;
 try
 {
 idr = ps.getDevice("dv.PNG");
 } catch (ChartException e)
 {
 logger.error(e.getMessage(), e);
 }
 
 // DEFINE THE BOUNDS AND CONVERT INTO POINTS
 Bounds bo = BoundsImpl.create(0, 0, 800, 600); // IN PIXELS
 bo.scale(72d / idr.getDisplayServer().getDpiResolution()); // CONVERTED
 // TO
 // POINTS
 
 // BUILD THE RENDERED CHART STRUCTURE
 Generator gr = Generator.instance();
 GeneratedChartState gcs = null;
 try
 {
 gcs = gr.build(idr.getDisplayServer(), chart, null, bo, null);
 } catch (ChartException e)
 {
 logger.error(e.getMessage(), e);
 }
 ------------------------------------------------------------ ---------------------------
 
 
 If I remove the STANDALONE and BIRT_HOME properties, then it says something
 about not being able to find a plugins.xml and dv.PNG.
 
 Any ideas?
 Thanks
 |  |  |  |  | 
| Re: How to render a chart (standalone)? [message #85695 is a reply to message #85460] | Mon, 31 October 2005 08:22   |  | 
| Eclipse User  |  |  |  |  | If you remove STANDALONE, you need to specify BIRT_HOME for the path to your plugins parent directory.
 
 For the exception, can you try to enable tracing on the chart engine plugin,
 and see what exactly is the exception about in the log?
 
 Thanks,
 
 David
 
 "chris" <none@none.none> wrote in message
 news:djtu7b$248$1@news.eclipse.org...
 >
 > Sorry to keep dragging this thing out, I'm closer, but still not quite
 > there.  So I've gotten over the hurdle of understanding, in general, how
 > to render an image through code.  However, I think I'm still having a
 > problem with the 'standalone' part.
 >
 > So here's how I'm trying to run this.. My IDE is Eclipse 3.1 using the
 > Tomcat plugin.  I'm trying to generate a simple chart (createLineChart()
 > taken from samples) into a PNG.  I am currently on 2.0 M1, but I also
 > initially tried the 1.0.1 standalone charting download.  The code to
 > generate the chart and render it is in a servlet.
 >
 > I've taken the brute-force approach to try to get this thing working.  So,
 > in my web-inf directory (where I point BIRT_HOME), I have a plugins
 > directory with ALL of the Birt 2.0 plugins in there.  In my Eclipse
 > build-path to get the servlet to compile, I have the following libs...
 >
 > birt.core
 > device.extension
 > chart.engine
 >
 > When running the code (at the bottom of this message) as-is, I get the
 > following error which occurs on the gr.build() call:
 >  ------------------------------------------------------------ ------------------
 > Oct 28, 2005 1:05:49 PM org.eclipse.birt.chart.log.impl.JavaUtilLoggerImpl
 > log
 >
 > SEVERE: Exception
 >
 > org.eclipse.birt.chart.exception.ChartException: $NO-RB$
 > org.eclipse.birt.chart.render.Line
 >
 > at
 >  org.eclipse.birt.chart.util.PluginSettings.newInstance(Plugi nSettings.java:595)
 >
 > at
 >  org.eclipse.birt.chart.util.PluginSettings.getRenderer(Plugi nSettings.java:306)
 >
 > at
 >  org.eclipse.birt.chart.render.BaseRenderer.instances(BaseRen derer.java:1537)
 >
 > at  org.eclipse.birt.chart.factory.Generator.build(Generator.jav a:239)
 >
 >
 >
 > If I remove the "STANDALONE" property, then I get this error:
 >
 >  ------------------------------------------------------------ -----------------
 >
 > java.lang.VerifyError: Cannot inherit from final class
 >
 > at java.lang.ClassLoader.defineClass1(Native Method)
 >
 > at java.lang.ClassLoader.defineClass(Unknown Source)
 >
 > at java.security.SecureClassLoader.defineClass(Unknown Source)
 >
 > at java.net.URLClassLoader.defineClass(Unknown Source)
 >
 > at java.net.URLClassLoader.access$100(Unknown Source)
 >
 > at java.net.URLClassLoader$1.run(Unknown Source)
 >
 > at java.security.AccessController.doPrivileged(Native Method)
 >
 > at java.net.URLClassLoader.findClass(Unknown Source)
 >
 > at
 >  org.eclipse.birt.core.framework.server.PluginClassLoader.fin dLocalClass(PluginClassLoader.java:116)
 >
 > at
 >  org.eclipse.birt.core.framework.server.PluginClassLoader.fin dClass(PluginClassLoader.java:36)
 >
 > at java.lang.ClassLoader.loadClass(Unknown Source)
 >
 > at java.lang.ClassLoader.loadClass(Unknown Source)
 >
 > at
 >  org.eclipse.birt.core.framework.server.PluginClassLoader.loa dExportedClass(PluginClassLoader.java:98)
 >
 > at
 >  org.eclipse.birt.core.framework.server.PluginClassLoader.doL oadImportClass(PluginClassLoader.java:84)
 >
 > at
 >  org.eclipse.birt.core.framework.server.PluginClassLoader.loa dImportedClass(PluginClassLoader.java:54)
 >
 > at
 >  org.eclipse.birt.core.framework.server.PluginClassLoader.fin dClass(PluginClassLoader.java:30)
 >
 >
 >
 >
 >
 >
 >
 >
 >
 > Code:
 >
 >  ------------------------------------------------------------ -------------------------------------------------------
 >
 >   System.setProperty("STANDALONE", "true");
 >   System.setProperty("BIRT_HOME",
 > "C:\\EclipseWorkspace\\Test\\web\\WEB-INF");
 >   Chart chart = createLineChart();
 >   PluginSettings ps = PluginSettings.instance();
 >   IDeviceRenderer idr = null;
 >   try
 >   {
 >    idr = ps.getDevice("dv.PNG");
 >   } catch (ChartException e)
 >   {
 >    logger.error(e.getMessage(), e);
 >   }
 >
 >   // DEFINE THE BOUNDS AND CONVERT INTO POINTS
 >   Bounds bo = BoundsImpl.create(0, 0, 800, 600); // IN PIXELS
 >   bo.scale(72d / idr.getDisplayServer().getDpiResolution()); // CONVERTED
 >                  // TO
 >                  // POINTS
 >
 >   // BUILD THE RENDERED CHART STRUCTURE
 >   Generator gr = Generator.instance();
 >   GeneratedChartState gcs = null;
 >   try
 >   {
 >    gcs = gr.build(idr.getDisplayServer(), chart, null, bo, null);
 >   } catch (ChartException e)
 >   {
 >    logger.error(e.getMessage(), e);
 >   }
 >  ------------------------------------------------------------ ---------------------------
 >
 >
 > If I remove the STANDALONE and BIRT_HOME properties, then it says
 > something about not being able to find a plugins.xml and dv.PNG.
 >
 > Any ideas?
 > Thanks
 >
 |  |  |  |  | 
| Re: How to render a chart (standalone)? [message #87234 is a reply to message #85695] | Thu, 03 November 2005 15:15  |  | 
| Eclipse User  |  |  |  |  | Originally posted by: none.none.none 
 Magically started working after upgrading to M2.
 
 "David Michonneau" <dmichonneau@actuate.com> wrote in message
 news:dk55r1$8mp$1@news.eclipse.org...
 > If you remove STANDALONE, you need to specify BIRT_HOME for the path to
 > your plugins parent directory.
 >
 > For the exception, can you try to enable tracing on the chart engine
 > plugin, and see what exactly is the exception about in the log?
 >
 > Thanks,
 >
 > David
 |  |  |  | 
 
 
 Current Time: Fri Oct 31 10:58:52 EDT 2025 
 Powered by FUDForum . Page generated in 0.05713 seconds |