Dear All,

I am working on a project that generates a lot of JFreecharts on fly and put 
them in a PDF report.

I wrote a preloader, loader and source, and for unknown reason, the chart only 
shows the coordinates, legends, etc, but NO DATA curves. See the attachment.

I feel confused, any help or suggestions will be highly appreciated.

Thanks
Jing

/**
* Created by IntelliJ IDEA. User: lij40 Date: 9/1/11 Time: 11:04 AM To change
* this template use File | Settings | File Templates.
*/
public class ChartPreloader extends AbstractImagePreloader implements
                                                           SVGConstants
{
    /** Logger instance */
    private static Log log = LogFactory.getLog(ChartPreloader.class);

    /** {@inheritDoc} */
    public ImageInfo preloadImage(String uri, Source src, ImageContext context)
            throws IOException
    {
        return (src instanceof JFreeChartSource) ?
            getImage(uri, (JFreeChartSource) src, context) : null;
    }

      private ImageInfo getImage(String uri, final JFreeChartSource src, 
ImageContext context)
    {
        ImageInfo info = new ImageInfo(uri, ImageLoaderFactoryOnFly.MIME_TYPE);
        ImageSize size = new ImageSize();
        size.setSizeInPixels((int)src.getWidth(), (int)src.getHeight());
        //Set the resolution to that of the FOUserAgent
        size.setResolution(context.getSourceResolution());
        size.calcSizeFromPixels();
        info.setSize(size);

        Graphics2DImagePainter painter = new Graphics2DImagePainter()
        {

            public Dimension getImageSize()
            {
                return new Dimension((int)src.getWidth(), (int)src.getHeight());
            }


            public void paint(Graphics2D g2d, Rectangle2D area)
            {
                src.getChart().draw(g2d, area, null, null);
            }
        };

        //The whole image had to be loaded to determine the image size, so keep 
that information
        info.getCustomObjects()
            .put(ImageInfo.ORIGINAL_IMAGE, new ImageGraphics2D(info, painter));

        return info;
}
}


public class JFreeChartSource implements Source
{
   //public static final int CHART_SIZE = 133;
    public static final int CHART_SIZE = 250;

    private String systemId;

    private final JFreeChart chart;

    private final double width;

    private final double height;


    public JFreeChartSource(String systemId, JFreeChart chart, double width, 
double height)
    {
        this.systemId = systemId;
        this.chart = chart;
        this.width = width;
        this.height = height;
    }


    @Override public void setSystemId(String systemId)
    {
        this.systemId = systemId;
    }


    @Override public String getSystemId()
    {
        return systemId;
    }


    public JFreeChart getChart()
    {
        return chart;
    }


    public double getWidth()
    {
        return width;
    }


    public double getHeight()
    {
        return height;
    }
}

public class ChartHandler implements ResponseGenerator
{
    @Override public boolean canHandleUriForSource(
        Query query, Properties parameters, String uri)
    {
         return uri.contains("chart");
    }

// test case generating a Sin(x) vs Cos(x) chart
    @Override public Source getSourceResponse(
        Query query, Properties parameters, String queryText)
    {
        XYSeries dataset = new XYSeries("series0");

               for (int i = -10; i < 10; i++)
               {
                   dataset.add(i, Math.cos(i / 10.0));
               }


               XYSeries series = new XYSeries("Average Weight");
               series.add(20.0, 20.0);
               series.add(40.0, 25.0);
               series.add(55.0, 50.0);
               series.add(70.0, 65.0);
               XYDataset xyDataset = new XYSeriesCollection(series);

        JFreeChart chart = ChartFactory.createXYLineChart("Sin(x) vs X", "x", 
"Cos(X)",
                   /*new XYSeriesCollection(dataset)*/xyDataset,
                   PlotOrientation.VERTICAL, false, false, false);

               XYPlot plot = (XYPlot) chart.getPlot();

               /*      plot.setBackgroundPaint(new Color(0, 0, 0, 100));// 
Color.decode("0xF5F5F5"));

                       plot.setDomainGridlinesVisible(true);
                       plot.setRangeGridlinesVisible(true);
                       plot.setRangeGridlinePaint(Color.black);
                       plot.setDomainGridlinePaint(Color.black);

               */
               plot.setNoDataMessage("No Information.");
               // change the auto tick unit selection to integer units only...
               NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
               
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
               chart.setBackgroundPaint(Color.white);
               plot.getRenderer().setSeriesToolTipGenerator(0,
                   new StandardXYToolTipGenerator("{0}: ({1}, {2})",
                       new DecimalFormat("00"), new DecimalFormat("0.00")));



        return  new JFreeChartSource(queryText,chart, 400, 400);
    }
}



________________________________
Sample disclaimer text

Attachment: chart.pdf
Description: chart.pdf

---------------------------------------------------------------------
To unsubscribe, e-mail: fop-users-unsubscr...@xmlgraphics.apache.org
For additional commands, e-mail: fop-users-h...@xmlgraphics.apache.org

Reply via email to