za.co.equalpay.web.utils.PDFExportUtility.java Source code

Java tutorial

Introduction

Here is the source code for za.co.equalpay.web.utils.PDFExportUtility.java

Source

/*
 * 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 za.co.equalpay.web.utils;

import java.awt.Color;
import java.io.IOException;
import java.net.MalformedURLException;

import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;

import com.lowagie.text.Chunk;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.HeaderFooter;
import com.lowagie.text.Image;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Phrase;
import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfPCell;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.draw.LineSeparator;

/**
 *
 * @author Andre
 */
public class PDFExportUtility {

    private Document document;
    private Phrase phrase;
    //  private QuotationDTO quotation;
    private String header;

    // need to move this out to a properties file!!
    // private static final String PDF_FOOTER_MESSAGE =
    // "Copyright (C) 2015 Meddev Operational Medical Development & Support";
    private static final String PDF_FOOTER_MESSAGE = "This document is prepared by and remains the property of MEDDEV cc. It is confidential and may not be copied, reproduced or distributed to any other party other than the original recipient without the written permission of the writer of this communication.";

    public PDFExportUtility(Document document, Phrase phrase, String header) {
        this.document = document;
        this.phrase = phrase;
        //this.quotation = quotation;
        this.header = header;
    }

    /**
     * Perform the standard PDF PreProcessing: <br>
     * Add Customer logo image and Phrase as header to the first page, <br>
     * Add Line Separator to the bottom of the Image <br>
     * and add the standard footer message to the PDF document<br>
     *
     * @throws MalformedURLException
     * @throws IOException
     * @throws DocumentException
     */
    public void preProcess() throws MalformedURLException, IOException, DocumentException {
        document.setMargins(50f, 50f, 10f, 20f);

        BaseFont bf_helv = BaseFont.createFont(BaseFont.HELVETICA, "Cp1252", false);
        // Font font = new Font(bf_helv, 8);

        ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext()
                .getContext();

        String fontPath = LogoPathFinder.getFontPath(servletContext, "Tahoma");
        BaseFont bf = BaseFont.createFont(fontPath, BaseFont.IDENTITY_H, true);
        Font tahoma = new Font(bf, 16, Font.BOLD);
        tahoma.setColor(Color.GRAY);

        Font fontBold = new Font(bf, 8, Font.BOLD);
        fontBold.setColor(Color.GRAY);

        Font f = new Font(bf, 8, Font.NORMAL);
        f.setColor(Color.GRAY);

        Font sf = new Font(bf, 6, Font.NORMAL);
        sf.setColor(Color.LIGHT_GRAY);

        // image.setIndentationLeft(360f);
        // PdfPCell imgCell = new PdfPCell(image, false);
        // imgCell.setHorizontalAlignment(PdfPCell.ALIGN_RIGHT);
        // imgCell.setBorder(0);
        //
        // PdfPCell emptyCell = new PdfPCell(new Phrase("TESTING...", tahoma));
        // emptyCell.setBorder(0);
        // PdfPTable footerTable = new PdfPTable(1);
        // footerTable.setWidthPercentage(100);
        //
        //
        // phrase = new Phrase(PDF_FOOTER_MESSAGE, f);
        //
        // PdfPCell cell = new PdfPCell(phrase);
        // cell.setBorder(0);
        // footerTable.addCell(cell);
        // table.setWidths(new int[] { 1, 2 });
        // table.addCell(emptyCell);
        // footerTable.addCell(emptyCell);
        // phrase.add(footerTable);
        // phrase.add(new Chunk(image, 475f, 0));
        // Phrase subPhrase = new Phrase();
        // subPhrase.add(new Phrase("\nwww.meddev.co.za\n", sf));
        // subPhrase.add(new Phrase(PDF_FOOTER_MESSAGE, f));
        // phrase.add(subPhrase);
        // phrase.add(new Chunk("www.meddev.co.za", f));
        // phrase.add(new Phrase(PDF_FOOTER_MESSAGE, f));
        // load document footer
        HeaderFooter footer = new HeaderFooter(new Phrase(PDF_FOOTER_MESSAGE, f), false);
        // HeaderFooter footer = new HeaderFooter(paragraph, false);
        // HeaderFooter footer = new HeaderFooter(phrase, false);

        footer.setAlignment(Element.ALIGN_LEFT);
        footer.setBorder(Rectangle.NO_BORDER);
        document.setFooter(footer);

        // document.open();
        //
        // ByteArrayOutputStream baos = new ByteArrayOutputStream();
        // PdfWriter writer = PdfWriter.getInstance(document, baos);
        //
        // writer.open();
        // PdfContentByte cb = writer.getDirectContent();
        // cb.addImage(image);
        // ColumnText columnText = new ColumnText(cb);
        // load the customer logo
        String logoPath = LogoPathFinder.getPath(servletContext, "meddev-logo2");

        Image image = Image.getInstance(logoPath);
        image.scaleToFit(149, 55);
        image.setIndentationLeft(360f);

        PdfPCell imageCell = new PdfPCell(image, false);
        imageCell.setHorizontalAlignment(PdfPCell.ALIGN_RIGHT);
        imageCell.setBorder(0);

        PdfPCell headerTextCell = new PdfPCell(new Phrase(header, tahoma));
        headerTextCell.setBorder(0);

        PdfPTable table = new PdfPTable(2);
        table.setWidthPercentage(100);
        table.setWidths(new int[] { 1, 2 });
        table.addCell(headerTextCell);
        table.addCell(imageCell);

        phrase = new Phrase();
        phrase.add(table);

        // load document header
        HeaderFooter header = new HeaderFooter(phrase, false);
        header.setAlignment(Element.ALIGN_CENTER);
        header.setBorder(Rectangle.NO_BORDER);

        document.setHeader(header);

        // create gray line separator
        // Chunk lineSeparator = new Chunk(new LineSeparator(1, 100, Color.GRAY,
        // Element.ALIGN_CENTER, -2));
        // document.add(lineSeparator);
        Font headerFont = new Font(bf_helv, 9);
        // write the header lines for this statement
        phrase = new Phrase(12, "\n", headerFont);
        phrase.add("\n\n");

        // open the pdf document for editing
        document.open();
        document.setPageSize(PageSize.A4);

        // Meddev Information Block
        table = new PdfPTable(4);
        table.setWidthPercentage(100);

        // table.setWidths(new int[] { 25, 25, 30, 20 });
        Phrase phrase1 = new Phrase();
        phrase1.add(new Phrase("MED DEV cc", fontBold));
        phrase1.add(new Phrase("\nUNIT 10, THE CORNER", f));
        phrase1.add(new Phrase("\nc/o Theuns & Hilde Ave", f));
        phrase1.add(new Phrase("\nHennopspark, 0157", f));
        phrase1.add(new Phrase("\nTel: +27 (0) 12 653 3063", f));
        phrase1.add(new Phrase("\nReg No: 2006/166603/23", f));
        phrase1.add(new Phrase("\n", f));

        Phrase phrase2 = new Phrase();
        phrase2.add(new Phrase("VAT No: ", fontBold));
        phrase2.add(new Phrase("4150231498", f));
        phrase2.add(new Phrase("\nImport/Export #: ", fontBold));
        phrase2.add(new Phrase("20544748", f));
        phrase2.add(new Phrase("\n", f));

        Phrase phrase3 = new Phrase();
        phrase3.add(new Phrase("QUOTE NO ", fontBold));
        phrase3.add(new Phrase("\nDATE ", fontBold));
        phrase3.add(new Phrase("\nREFERNCE ", fontBold));
        phrase3.add(new Phrase("\nSUPPLIER CODE ", fontBold));
        phrase3.add(new Phrase("\nEXPIRY DATE ", fontBold));

        Phrase phrase4 = new Phrase();
        //        phrase4.add(new Phrase(quotation.getQuotationNumber(), f));
        //        phrase4.add(new Phrase("\n" + DateFormatter.formatMonthDate(quotation.getQuotationDate()), f));
        //        phrase4.add(new Phrase("\n" + (quotation.getClient().getReference() == null ? "-" : quotation.getClient().getReference()), f));
        //        phrase4.add(new Phrase("\nMEDDEV1", f));
        //        phrase4.add(new Phrase("\n" + DateFormatter.formatMonthDate(quotation.calculateExpiryDate()), f));

        PdfPCell cell1 = new PdfPCell(phrase1);
        cell1.setBorder(0);
        PdfPCell cell2 = new PdfPCell(phrase2);
        cell2.setBorder(0);
        PdfPCell cell3 = new PdfPCell(phrase3);
        cell3.setBorder(0);
        PdfPCell cell4 = new PdfPCell(phrase4);
        cell4.setBorder(0);

        table.addCell(cell1);
        table.addCell(cell2);
        table.addCell(cell3);
        table.addCell(cell4);

        phrase.add(table);

        // create gray line separator
        Chunk lineSeparator = new Chunk(new LineSeparator(1, 100, Color.GRAY, Element.ALIGN_CENTER, -2));
        phrase.add(lineSeparator);

        // Customer Information Block
        table = new PdfPTable(3);
        table.setWidthPercentage(100);
        table.setWidths(new int[] { 5, 2, 3 });

        //        Phrase phrase11 = new Phrase();
        //        phrase11.add(new Phrase(quotation.getClient().getCompany().toUpperCase() + "(CLIENT)", fontBold));
        //        if (quotation.getClient().getVatRegNo() != null && quotation.getClient().getVatRegNo().trim().length() > 0) {
        //            phrase11.add(new Phrase("\nCustomer VAT No: ", fontBold));
        //            phrase11.add(new Phrase(quotation.getClient().getVatRegNo(), f));
        //        }
        //        if (quotation.getClient().getResAddress1() != null && quotation.getClient().getResAddress1().trim().length() > 0) {
        //            phrase11.add(new Phrase("\n" + quotation.getClient().getResAddress1(), f));
        //        }
        //        if (quotation.getClient().getResAddress2() != null && quotation.getClient().getResAddress2().trim().length() > 0) {
        //            phrase11.add(new Phrase("\n" + quotation.getClient().getResAddress2(), f));
        //        }
        //        if (quotation.getClient().getResCity() != null && quotation.getClient().getResCity().trim().length() > 0) {
        //            phrase11.add(new Phrase("\n" + quotation.getClient().getResCity(), f));
        //        }
        //        if (quotation.getClient().getPhone() != null && quotation.getClient().getPhone().trim().length() > 0) {
        //            phrase11.add(new Phrase("\nTel: " + quotation.getClient().getPhone(), f));
        //        }

        //PdfPCell cell11 = new PdfPCell(phrase11);
        //cell11.setBorder(0);

        phrase2 = new Phrase();
        phrase2.add(new Phrase("CURRENCY: ", fontBold));
        PdfPCell cell12 = new PdfPCell(phrase2);
        cell12.setBorder(0);

        phrase3 = new Phrase();
        //phrase3.add(new Phrase(quotation.getClient().getCurrencyCode(), f));
        PdfPCell cell13 = new PdfPCell(phrase3);
        cell13.setBorder(0);

        // table.addCell(cell11);
        table.addCell(cell12);
        table.addCell(cell13);

        phrase.add(table);

        // create gray line separator
        phrase.add("\n");
        document.add(phrase);

        String footerImagePath = LogoPathFinder.getPath(servletContext, "footer-image");

        Image footerImage = Image.getInstance(footerImagePath);
        footerImage.scaleToFit(90, 50);
        footerImage.setAbsolutePosition((PageSize.A4.getWidth() - (footerImage.getScaledWidth() + 40)),
                (PageSize.A4.getHeight() - (PageSize.A4.getHeight() - (footerImage.getScaledHeight() - 10))));

        document.add(footerImage);

    }

    public void postProcess() throws MalformedURLException, IOException, DocumentException {
        // document.open();
        //
        // ByteArrayOutputStream baos = new ByteArrayOutputStream();
        // PdfWriter writer = PdfWriter.getInstance(document, baos);
        //
        // writer.open();
        // PdfContentByte cb = writer.getDirectContent();
        // cb.addImage(image);

        ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext()
                .getContext();

        String fontPath = LogoPathFinder.getFontPath(servletContext, "Tahoma");
        BaseFont bf = BaseFont.createFont(fontPath, BaseFont.IDENTITY_H, true);
        Font tahoma = new Font(bf, 16, Font.BOLDITALIC);
        tahoma.setColor(Color.GRAY);

        Font boldFont8 = new Font(bf, 8, Font.BOLD, Color.GRAY);
        Font normalFont8 = new Font(bf, 8, Font.NORMAL, Color.GRAY);

        Font boldFont10 = new Font(bf, 10, Font.BOLDITALIC, Color.GRAY);
        Font normalFont10 = new Font(bf, 10, Font.ITALIC, Color.GRAY);

        phrase = new Phrase();
        phrase.add(new Phrase("Exclusive Distributors of ", normalFont10));
        phrase.add(new Phrase("SAM Medical, CONTERRA, TACMED Solutions ", boldFont10));
        phrase.add(new Phrase("and ", normalFont10));
        phrase.add(new Phrase("NARP ", boldFont10));
        phrase.add(new Phrase("in South Africa.", normalFont10));

        Paragraph paragraph = new Paragraph(phrase);
        paragraph.setAlignment(Paragraph.ALIGN_CENTER);

        document.add(paragraph);

        PdfPTable table = new PdfPTable(1);
        table.setWidthPercentage(100);

        // Terms & Conditions
        phrase = new Phrase();
        phrase.add(new Phrase("\n\n\n"));
        phrase.add(new Phrase("Terms and Conditions: ", boldFont8));
        phrase.add(new Phrase("\n"));
        phrase.add(new Phrase(
                "\n1.    Full Payment in Advance, unless arranged otherwise. Orders will only be processed once payment reflects in our Bank Account.",
                normalFont8));
        phrase.add(new Phrase("\n2.    Prices are net.", normalFont8));
        phrase.add(new Phrase("\n3.    Delivery will be ex stock, alternatively 4  6 weeks from date of order.",
                normalFont8));
        phrase.add(
                new Phrase("\n4.    Shipping Lead Time will depend on clients mode of Transport.", normalFont8));
        phrase.add(new Phrase("\n5.    Prices and Supply of Goods are Subject to availability of stock.",
                normalFont8));
        phrase.add(new Phrase("\n6.    Prices are subject to exchange rate and brand.", normalFont8));
        phrase.add(new Phrase("\n7.    Quotation is valid for 30 Days", boldFont8));
        phrase.add(new Phrase(
                "\n8.    All capital equipment carries a one year guarantee against defective material and workmanship",
                normalFont8));
        phrase.add(new Phrase("\n9.    E & OA accepted.", normalFont8));
        phrase.add(new Phrase("\n10.  Excluding Postage, Packaging or Freight Forwarding to relevant Country.",
                normalFont8));

        PdfPCell cell = new PdfPCell(phrase);
        cell.setBorder(0);
        table.addCell(cell);

        document.add(table);
    }

    public Document getDocument() {
        return document;
    }

    public void setDocument(Document document) {
        this.document = document;
    }

    public Phrase getPhrase() {
        return phrase;
    }

    public void setPhrase(Phrase phrase) {
        this.phrase = phrase;
    }

    //    public QuotationDTO getQuotation() {
    //        return quotation;
    //    }
    //
    //    public void setQuotation(QuotationDTO quotation) {
    //        this.quotation = quotation;
    //    }

    public String getHeader() {
        return header;
    }

    public void setHeader(String header) {
        this.header = header;
    }

}