Welcome to my blog! Feel free to post comments.
- Andrew


Visit Coldfusion Community


<< July, 2005 >>
SMTWTFS
12
3456789
10111213141516
17181920212223
24252627282930
31
Search Blog

Categories
Archives
RSS


Powered by
BlogCFM v1.14

Using JFreeChart with ColdFusion
22 July 2005

This was originally posted in Christian Cantrell's blog.

Well, your post just helped me figure out a long time nagging problem. I have been working on a CF wrapper for JFreeChart to generate on-the-fly charts, and have been stumped with corrupted output, until I saw your fix about the double getResponse() method calls. With that change, all works great!

For those who don't understand WHY you might need to do this, here is sampe code that creates a bar chart on-the-fly (no caching on the file system) and outputs directly to the browser a JPEG image (or a PNG with incredible quality!):

<!--- first generate some data --->
barDataset = CreateObject("java", "org.jfree.data.category.DefaultCategoryDataset");
Randomize(numberformat(timeformat(now(),"ss")));
rval = int(randrange(1,500));
barDataset.setValue(numberformat(rval), "2001", "Q1");
rval = int(randrange(1,500));
barDataset.setValue(numberformat(rval), "2001", "Q2");
rval = int(randrange(1,500));
barDataset.setValue(numberformat(rval), "2001", "Q3");
rval = int(randrange(1,500));
barDataset.setValue(numberformat(rval), "2001", "Q4");
rval = int(randrange(1,500));
barDataset.setValue(numberformat(rval), "2002", "Q1");
rval = int(randrange(1,500));
barDataset.setValue(numberformat(rval), "2002", "Q2");
rval = int(randrange(1,500));
barDataset.setValue(numberformat(rval), "2002", "Q3");
rval = int(randrange(1,500)); barDataset.setValue(numberformat(rval), "2002", "Q4");

<!--- create the chart objects --->
chart = CreateObject("java", "org.jfree.chart.JFreeChart");
chartfactory = CreateObject("java", "org.jfree.chart.ChartFactory");
chartorient = CreateObject("java", "org.jfree.chart.plot.PlotOrientation");
chartutil = CreateObject("java", "org.jfree.chart.ChartUtilities");

<!--- create our chart --->
chart = chartfactory.createBarChart3D ("Sample Bar Chart", "Category", "Value", barDataset, chartorient.VERTICAL, true, true, true);

<!--- MAGICALLY get the correct response object... --->
response = getPageContext().getResponse().getResponse();
response.setContentType("image/jpeg");

<!--- write chart directly to output stream --->
chartutil.writeChartAsJPEG(response.getOutputStream(),
   100, // jpeg quality 0-100
   chart, // chart object
   500, // width
   300); // height

response.flush();
response.close();

If anybody else needs help with the above code, email me.

cheers

Posted by aschwabe at 12:00 AM | Link | 1 comment