ec.edu.uce.erp.web.common.util.CustomPDFExporter.java Source code

Java tutorial

Introduction

Here is the source code for ec.edu.uce.erp.web.common.util.CustomPDFExporter.java

Source

/**
 * 
 */
package ec.edu.uce.erp.web.common.util;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Map;

import javax.el.MethodExpression;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;

import org.primefaces.component.api.DynamicColumn;
import org.primefaces.component.api.UIColumn;
import org.primefaces.component.datatable.DataTable;
import org.primefaces.component.export.PDFExporter;

import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.FontFactory;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfPCell;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfWriter;

import ec.edu.uce.erp.common.util.ConstantesReporte;

/**
 * @author
 * 
 */
public class CustomPDFExporter extends PDFExporter {

    private Map<String, String> mapValuesPDF;

    private static Font titleFont = new Font(Font.TIMES_ROMAN, 14, Font.BOLD);
    //   private static Font redFont = new Font(Font.TIMES_ROMAN, 12, Font.NORMAL, Color.RED);
    //   private static Font smallBold = new Font(Font.TIMES_ROMAN, 12, Font.BOLD);

    public CustomPDFExporter(Map<String, String> mapValuesPDF) {
        this.mapValuesPDF = mapValuesPDF;
    }

    @Override
    protected void addColumnFacets(DataTable table, PdfPTable pdfTable, ColumnType columnType) {

        for (UIColumn col : table.getColumns()) {
            if (!col.isRendered()) {
                continue;
            }
            if (col instanceof DynamicColumn) {
                ((DynamicColumn) col).applyModel();
            }
            if (col.isExportable()) {
                addHeaderValue(pdfTable, col.getFacet(columnType.facet()),
                        FontFactory.getFont(FontFactory.TIMES, "iso-8859-1", Font.DEFAULTSIZE, Font.BOLD));
            }
        }
    }

    protected void addHeaderValue(PdfPTable pdfTable, UIComponent component, Font font) {

        String value = component == null ? "" : exportValue(FacesContext.getCurrentInstance(), component);
        PdfPCell cell = new PdfPCell(new Paragraph(value, font));
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
        pdfTable.addCell(cell);

    }

    @Override
    public void export(FacesContext context, DataTable table, String filename, boolean pageOnly,
            boolean selectionOnly, String encodingType, MethodExpression preProcessor,
            MethodExpression postProcessor) throws IOException {

        try {
            Document document = new Document();
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            PdfWriter.getInstance(document, baos);

            if (!document.isOpen()) {
                document.open();
            }

            //         addMetaData(document);
            addTitlePage(document);

            document.add(exportPDFTable(context, table, pageOnly, selectionOnly, encodingType));

            document.close();

            writePDFToResponse(context.getExternalContext(), baos, filename);

        } catch (DocumentException e) {
            throw new IOException(e.getMessage());
        }
    }

    //    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 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(mapValuesPDF.get(ConstantesReporte.TITULO), titleFont));

        addEmptyLine(preface, 1);
        //      // Will create: Report generated by: _name, _date
        //      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);
    }

    private static void addEmptyLine(Paragraph paragraph, int number) {
        for (int i = 0; i < number; i++) {
            paragraph.add(new Paragraph(" "));
        }
    }

    /**
     * @return the mapValuesPDF
     */
    public Map<String, String> getMapValuesPDF() {
        return mapValuesPDF;
    }

    /**
     * @param mapValuesPDF the mapValuesPDF to set
     */
    public void setMapValuesPDF(Map<String, String> mapValuesPDF) {
        this.mapValuesPDF = mapValuesPDF;
    }

}