Java tutorial
package com.exam.server; import java.awt.Graphics2D; import java.awt.geom.Rectangle2D; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.Date; 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.exam.client.dto.DeviceDTO; import com.lowagie.text.Anchor; import com.lowagie.text.BadElementException; import com.lowagie.text.Chapter; import com.lowagie.text.Document; import com.lowagie.text.DocumentException; import com.lowagie.text.Element; import com.lowagie.text.Font; import com.lowagie.text.List; import com.lowagie.text.ListItem; import com.lowagie.text.Paragraph; import com.lowagie.text.Phrase; import com.lowagie.text.Section; import com.lowagie.text.pdf.DefaultFontMapper; import com.lowagie.text.pdf.PdfContentByte; import com.lowagie.text.pdf.PdfPCell; import com.lowagie.text.pdf.PdfPTable; import com.lowagie.text.pdf.PdfTemplate; import com.lowagie.text.pdf.PdfWriter; public class ConvertPDF { private static String FILE = "C:/Users/ADMIN/Desktop/UserReport.pdf"; private static Font catFont = new Font(Font.TIMES_ROMAN, 18, Font.BOLD); private static Font redFont = new Font(Font.TIMES_ROMAN, 12, Font.NORMAL); private static Font subFont = new Font(Font.TIMES_ROMAN, 16, Font.BOLD); private static Font smallBold = new Font(Font.TIMES_ROMAN, 12, Font.BOLD); public ConvertPDF(ArrayList<DeviceDTO> input) { try { Document document = new Document(); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(FILE)); System.out.println("opening document " + FILE); document.open(); addMetaData(document); addTitlePage(document); addContent(document, input); addPieChart(generatePieChart(input), 500, 400, writer); document.close(); System.out.println("closing document " + FILE); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { try { ArrayList<DeviceDTO> input = new ArrayList<DeviceDTO>(); Document document = new Document(); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(FILE)); System.out.println("opening document " + FILE); document.open(); addMetaData(document); addTitlePage(document); addContent(document, input); addPieChart(generatePieChart(input), 500, 400, writer); document.close(); System.out.println("closing document " + FILE); } catch (Exception e) { e.printStackTrace(); } } // iText allows to add metadata to the PDF which can be viewed in your Adobe // Reader // under File -> Properties private static void addMetaData(Document document) { document.addTitle("My first PDF"); document.addSubject("Using iText"); document.addKeywords("Java, PDF, iText"); document.addAuthor("Lars Vogel"); document.addCreator("Lars Vogel"); } private static void addTitlePage(Document document) throws DocumentException { Paragraph preface = new Paragraph(); // We add one empty line addEmptyLine(preface, 1); // Lets write a big header preface.add(new Paragraph("Title of the document", catFont)); addEmptyLine(preface, 1); // Will create: Report generated by: _name, _date preface.add(new Paragraph("Report generated by: Ashutosh , " + new Date(), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ smallBold)); // preface.add(new Paragraph( // "Report generated by: " + System.getProperty("user.name","") + ", " + new Date(), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ // smallBold)); addEmptyLine(preface, 3); preface.add(new Paragraph("This document describes something which is very important ", smallBold)); addEmptyLine(preface, 8); preface.add(new Paragraph( "This document is a preliminary version and not subject to your license agreement or any other agreement with vogella.com ;-).", redFont)); document.add(preface); // Start a new page document.newPage(); } private static void addContent(Document document, ArrayList<DeviceDTO> input) throws DocumentException { Anchor anchor = new Anchor("", catFont); anchor.setName("User Report"); // Second parameter is the number of the chapter Chapter catPart = new Chapter(new Paragraph(anchor), 1); Paragraph subPara = new Paragraph("", subFont); Section subCatPart = catPart.addSection(subPara); // subCatPart.add(new Paragraph("Hello")); // subPara = new Paragraph("Subcategory 2", subFont); // subCatPart = catPart.addSection(subPara); // subCatPart.add(new Paragraph("Paragraph 1")); // subCatPart.add(new Paragraph("Paragraph 2")); // subCatPart.add(new Paragraph("Paragraph 3")); // add a list // createList(subCatPart); // Paragraph paragraph = new Paragraph(); // addEmptyLine(paragraph, 5); // subCatPart.add(paragraph); // add a table createTable(subCatPart, input); // now add all this to the document document.add(catPart); // Next section // anchor = new Anchor("Second Chapter", catFont); // anchor.setName("Second Chapter"); // Second parameter is the number of the chapter // catPart = new Chapter(new Paragraph(anchor), 1); // subPara = new Paragraph("Subcategory", subFont); // subCatPart = catPart.addSection(subPara); // subCatPart.add(new Paragraph("This is a very important message")); // now add all this to the document // document.add(catPart); document.newPage(); } private static void createTable(Section subCatPart, ArrayList<DeviceDTO> input) throws BadElementException { // PdfPTable table = new PdfPTable(input.size()+1); PdfPTable table = new PdfPTable(6); System.out.println("size::" + input.size()); // t.setBorderColor(BaseColor.GRAY); // t.setPadding(4); // t.setSpacing(4); // t.setBorderWidth(1); PdfPCell c1 = new PdfPCell(new Phrase("Part2 Id")); c1.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(c1); c1 = new PdfPCell(new Phrase("Id Company")); c1.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(c1); c1 = new PdfPCell(new Phrase("Address")); c1.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(c1); c1 = new PdfPCell(new Phrase("Data1")); c1.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(c1); c1 = new PdfPCell(new Phrase("Time1")); c1.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(c1); c1 = new PdfPCell(new Phrase("Time2")); c1.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(c1); table.setHeaderRows(1); for (int i = 0; i < input.size(); i++) { table.addCell("" + input.get(i).getPart2Id()); table.addCell("" + input.get(i).getIdCompany()); table.addCell(input.get(i).getAddress1()); table.addCell(input.get(i).getData1()); table.addCell(input.get(i).getTime1()); table.addCell(input.get(i).getTime2()); } subCatPart.add(table); } private static void createList(Section subCatPart) { List list = new List(true, false, 10); list.add(new ListItem("First point")); list.add(new ListItem("Second point")); list.add(new ListItem("Third point")); subCatPart.add(list); } private static void addEmptyLine(Paragraph paragraph, int number) { for (int i = 0; i < number; i++) { paragraph.add(new Paragraph(" ")); } } public static JFreeChart generatePieChart(ArrayList<DeviceDTO> input) { int shutdownCount = 0; int inspectedCount = 0; int earlyCount = 0; int uninspectedCount = 0; int duplicateCount = 0; int lateCount = 0; int unscheduledCount = 0; int downloadedCount = 0; for (DeviceDTO deviceDTO : input) { if (deviceDTO.getData1() != null && deviceDTO.getData1().equalsIgnoreCase("SHUTDOWN_EVENT")) { shutdownCount++; } if (deviceDTO.getData1() != null && deviceDTO.getData1().equalsIgnoreCase("INSPECTED")) { inspectedCount++; } if (deviceDTO.getData1() != null && deviceDTO.getData1().equalsIgnoreCase("EARLY")) { earlyCount++; } if (deviceDTO.getData1() != null && deviceDTO.getData1().equalsIgnoreCase("UNINSPECTED")) { uninspectedCount++; } if (deviceDTO.getData1() != null && deviceDTO.getData1().equalsIgnoreCase("DUPLICATE")) { duplicateCount++; } if (deviceDTO.getData1() != null && deviceDTO.getData1().equalsIgnoreCase("LATE")) { lateCount++; } if (deviceDTO.getData1() != null && deviceDTO.getData1().equalsIgnoreCase("UNSCHEDULED")) { unscheduledCount++; } if (deviceDTO.getData1() != null && deviceDTO.getData1().equalsIgnoreCase("DOWNLOADED")) { downloadedCount++; } } DefaultPieDataset dataSet = new DefaultPieDataset(); dataSet.setValue("SHUTDOWN_EVENT", shutdownCount); dataSet.setValue("INSPECTED", inspectedCount); dataSet.setValue("EARLY", earlyCount); dataSet.setValue("UNINSPECTED", uninspectedCount); dataSet.setValue("DUPLICATE", duplicateCount); dataSet.setValue("LATE", lateCount); dataSet.setValue("UNSCHEDULED", unscheduledCount); dataSet.setValue("DOWNLOADED", downloadedCount); JFreeChart chart = ChartFactory.createPieChart("Device break up on basis of data1:", dataSet, true, true, false); return 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; } /*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(); }*/ public static void addPieChart(JFreeChart chart, int width, int height, PdfWriter writer) { // PdfWriter writer = null; // Document document = new Document(); try { // writer = PdfWriter.getInstance(document, new FileOutputStream( // fileName)); System.out.println("writing pie chart document "); // 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(); } System.out.println("writing done:: "); } }