/* * $Id$ * * This code is part of the 'iText Tutorial'. * You can find the complete tutorial at the following address: * http://itextdocs.lowagie.com/tutorial/ * * This code is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * itext-questions@lists.sourceforge.net */ package com.lowagie.examples.directcontent.graphics2D; import java.awt.Graphics2D; import java.awt.geom.Rectangle2D; import java.io.FileNotFoundException; import java.io.FileOutputStream; import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.category.DefaultCategoryDataset; import org.jfree.data.general.DefaultPieDataset; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; import com.lowagie.text.Document; import com.lowagie.text.DocumentException; import com.lowagie.text.Rectangle; import com.lowagie.text.pdf.DefaultFontMapper; import com.lowagie.text.pdf.PdfContentByte; import com.lowagie.text.pdf.PdfTemplate; import com.lowagie.text.pdf.PdfWriter; /** * JFreeChart example. */ public class JFreeChartExample { /** * Creates some PDFs with JFreeCharts. * @param args no arguments needed */ public static void main(String[] args) { System.out.println("JFreeChart example"); /** the following line is a workaround for JDK 1.5 (fix by Adriaan Joubert) */ org.jfree.text.TextUtilities.setUseDrawRotatedStringWorkaround(false); convertToPdf(getBarChart(), 400, 600, "barchart.pdf"); convertToPdf(getPieChart(), 400, 600, "piechart.pdf"); convertToPdf(getXYChart(), 400, 600, "xychart.pdf"); } /** * Converts a JFreeChart to PDF syntax. * @param filename the name of the PDF file * @param chart the JFreeChart * @param width the width of the resulting PDF * @param height the height of the resulting PDF */ public static void convertToPdf(JFreeChart chart, int width, int height, String filename) { // step 1 Document document = new Document(new Rectangle(width, height)); try { // step 2 PdfWriter writer; writer = PdfWriter.getInstance(document, new FileOutputStream(filename)); // step 3 document.open(); // step 4 PdfContentByte cb = writer.getDirectContent(); PdfTemplate tp = cb.createTemplate(width, height); Graphics2D g2d = tp.createGraphics(width, height, new DefaultFontMapper()); Rectangle2D r2d = new Rectangle2D.Double(0, 0, width, height); chart.draw(g2d, r2d); g2d.dispose(); tp.sanityCheck(); cb.addTemplate(tp, 0, 0); cb.sanityCheck(); } catch(DocumentException de) { de.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } // step 5 document.close(); } /** * Gets an example barchart. * @return a barchart */ public static JFreeChart getBarChart() { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.setValue(40, "hits/hour", "index.html"); dataset.setValue(20, "hits/hour", "download.html"); dataset.setValue(15, "hits/hour", "faq.html"); dataset.setValue(8, "hits/hour", "links.html"); dataset.setValue(31, "hits/hour", "docs.html"); return ChartFactory.createBarChart("Popularity of iText pages", "Page", "hits/hour", dataset, PlotOrientation.VERTICAL, false, true, false); } /** * Gets an example piechart. * @return a piechart */ public static JFreeChart getPieChart() { DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue("iText", 60); dataset.setValue("cinema.lowagie.com", 10); dataset.setValue("tutorial", 30); return ChartFactory.createPieChart( "Website popularity", dataset, true, true, false); } /** * Gets an example XY chart * @return an XY chart */ public static JFreeChart getXYChart() { XYSeries series = new XYSeries("XYGraph"); series.add(1, 5); series.add(2, 7); series.add(3, 3); series.add(4, 5); series.add(5, 4); series.add(6, 5); XYSeriesCollection dataset = new XYSeriesCollection(); dataset.addSeries(series); return ChartFactory.createXYLineChart( "XY Chart", "X-axis", "Y-axis", dataset, PlotOrientation.VERTICAL, true, true, false); } }