PDFGraph.java [src/java/reports] Revision:   Date:
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package reports;

import java.io.File;
import java.io.IOException;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtils;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

/**
 * Create a graph that later can be linked into the HTML template which then will get inserted in
 * the PDF.
 *
 * @author Yuanyuan.Ji
 */
public class PDFGraph {

  /**
   * generate JPEG graph image by data for X axis and data for Y axis.
   *
   * @param Xdata : data for X axis.
   * @param Ydata : data for Y axis.
   * @param imagePath : the output image generated by this function.
   * @param title : the title of the graph.
   * @throws IOException error writing image to file
   */
  public static void generateJPEGByXY(double[] Xdata, double[] Ydata, String imagePath, String title) throws IOException {
    // create dataset
    XYSeries series1 = new XYSeries(title);

    for (int i = 0; i < Xdata.length && i < Ydata.length; i++) {
      series1.add(Xdata[i], Ydata[i]);
    }

    XYSeriesCollection dataset = new XYSeriesCollection();
    dataset.addSeries(series1);

    // create the chart
    JFreeChart chart = ChartFactory.createXYLineChart(
            title, // chart title
            "Distance(ft)", // x axis label
            title, // y axis label
            dataset, // data
            PlotOrientation.VERTICAL,
            true, // include legend
            true, // tooltips
            false // urls
    );

    int width = 400;
    /* Width of the image */  // If we want zoom in (curent unit/2), we can increase width to 500. But increase width to 400 will not zoom in.
    int height = 300;
    /* Height of the image */
    File lineChart = new File(imagePath);
    ChartUtils.saveChartAsJPEG(lineChart, chart, width, height);
  }
}