iText is a wonderful library if you want to generate PDFs in Java. It comes with a huge set of API to create/manage a PDF file. JFreeChart is a free 100% Java chart library that makes it easy for developers to display professional quality charts in their applications. It gives a wide range of API to generate charts and graphs in Java.
package com.test; import java.awt.Graphics2D; import java.awt.geom.Rectangle2D; 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 com.lowagie.text.Document; import com.lowagie.text.pdf.DefaultFontMapper; import com.lowagie.text.pdf.PdfContentByte; import com.lowagie.text.pdf.PdfTemplate; import com.lowagie.text.pdf.PdfWriter; public class PieChartDemo { public static void main(String[] args) { System.out.println("Generating PDF with Bar Chart..."); writeChartToPDF(generateBarChart(), 500, 400, "C://workspace//barchart.pdf"); System.out.println("Generated PDF with Bar Chart."); System.out.println("Generating PDF with Pie Chart..."); writeChartToPDF(generatePieChart(), 500, 400, "C://workspace//piechart.pdf"); System.out.println("Generated PDF with Pie Chart."); } // method to generate PDF with Chart public static void writeChartToPDF(JFreeChart chart, int width, int height, String fileName) { PdfWriter writer = null; Document document = new Document(); try { writer = PdfWriter.getInstance(document, new FileOutputStream( fileName)); document.open(); PdfContentByte contentByte = writer.getDirectContent(); PdfTemplate template = contentByte.createTemplate(width, height); Graphics2D graphics2d = template.createGraphics(width, height, new DefaultFontMapper()); Rectangle2D rectangle2d = new Rectangle2D.Double(0, 0, width, height); chart.draw(graphics2d, rectangle2d); graphics2d.dispose(); contentByte.addTemplate(template, 0, 0); } catch (Exception e) { e.printStackTrace(); } document.close(); } // method to generate Pie Chart public static JFreeChart generatePieChart() { DefaultPieDataset dataSet = new DefaultPieDataset(); dataSet.setValue("China", 19.64); dataSet.setValue("India", 17.3); dataSet.setValue("United States", 4.54); dataSet.setValue("Indonesia", 3.4); dataSet.setValue("Brazil", 2.83); dataSet.setValue("Pakistan", 2.48); dataSet.setValue("Bangladesh", 2.38); JFreeChart chart = ChartFactory.createPieChart( "World Population by countries", dataSet, true, true, false); return chart; } // method to generate Bar Chart public static JFreeChart generateBarChart() { DefaultCategoryDataset dataSet = new DefaultCategoryDataset(); dataSet.setValue(791, "Population", "1750 AD"); dataSet.setValue(978, "Population", "1800 AD"); dataSet.setValue(1262, "Population", "1850 AD"); dataSet.setValue(1650, "Population", "1900 AD"); dataSet.setValue(2519, "Population", "1950 AD"); dataSet.setValue(6070, "Population", "2000 AD"); JFreeChart chart = ChartFactory.createBarChart( "World Population growth", "Year", "Population in millions", dataSet, PlotOrientation.VERTICAL, false, true, false); return chart; } }