com.exam.server.ConvertPDF.java Source code

Java tutorial

Introduction

Here is the source code for com.exam.server.ConvertPDF.java

Source

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:: ");
    }
}