com.cs.sis.controller.gerador.GeradorPDF.java Source code

Java tutorial

Introduction

Here is the source code for com.cs.sis.controller.gerador.GeradorPDF.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 com.cs.sis.controller.gerador;

import com.cs.sis.model.financeiro.ItemDeVenda;
import com.cs.sis.model.financeiro.Venda;
import com.cs.sis.util.Arquivo;
import com.cs.sis.util.OperacaoStringUtil;
import com.cs.ui.img.IMG;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.ExceptionConverter;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.ColumnText;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfPageEvent;
import com.itextpdf.text.pdf.PdfPageEventHelper;
import com.itextpdf.text.pdf.PdfTemplate;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 *
 * @author Lettiery
 */
public class GeradorPDF {

    private Arquivo a;

    public GeradorPDF() {
        a = new Arquivo();
    }

    public String gerarPdfRelatorioEstoqueProdutos(boolean valoresNegativos, File destino) {
        Document doc = new Document();
        try {
            String path = a.getRelatorio().getCanonicalPath() + destino.getName();
            PdfWriter.getInstance(doc, new FileOutputStream(path));
            doc.open();
            //String subTitulo = "Estoque Verificado no dia "
            //        + new SimpleDateFormat("dd/MM/yyyy HH:mm").format(Calendar.getInstance().getTime());

            String subTitulo = "Balano Geral de Estoque do perodo 01/12/2017  31/12/2017";
            inserirHead(doc,
                    "Mercadinho Popular\n" + "Edvaneide Torres Vilar de Carvalho\n" + "CNPJ: 07.643.907/0001-18",
                    subTitulo);

            PdfPTable table = getTableEstoqueProdutos(valoresNegativos);

            doc.add(table);

            doc.close();
            Arquivo.copyFile(new File(path), destino);
            return destino.getAbsolutePath();
        } catch (DocumentException | IOException e) {
            e.printStackTrace();
            return "";
        }
    }

    public String gerarPdfRelatorioEstoqueProdutos(boolean valoresNegativos, boolean pararLista,
            Calendar dataInicio, Calendar dataFim, List<String> codigos_retirados, double total_requisitado,
            File destino) {
        Document doc = new Document();
        try {
            String path = a.getRelatorio().getCanonicalPath() + destino.getName();
            PdfWriter instance = PdfWriter.getInstance(doc, new FileOutputStream(path));
            doc.open();

            //String subTitulo = "Estoque Verificado no dia "
            //        + new SimpleDateFormat("dd/MM/yyyy HH:mm").format(Calendar.getInstance().getTime());

            String data = "";
            try {
                data += OperacaoStringUtil.formatDataValor(dataInicio) + "  "
                        + OperacaoStringUtil.formatDataValor(dataFim);
            } catch (NullPointerException e) {
                data += ("01/01/" + (Calendar.getInstance().get(Calendar.YEAR) - 1)) + "  ";
                data += ("31/12/" + (Calendar.getInstance().get(Calendar.YEAR) - 1));
            }

            String subTitulo = "Balano Geral de Estoque do perodo " + data; //" 01/12/2017  31/12/2017";
            inserirHead(doc,
                    "Mercadinho Popular\n" + "Edvaneide Torres Vilar de Carvalho\n" + "CNPJ: 07.643.907/0001-18",
                    subTitulo);

            PdfPTable table = getTableEstoqueProdutos(valoresNegativos, pararLista, codigos_retirados,
                    total_requisitado);

            doc.add(table);

            doc.close();
            Arquivo.copyFile(new File(path), destino);
            return destino.getAbsolutePath();
        } catch (DocumentException | IOException e) {
            e.printStackTrace();
            return "";
        }
    }

    public String gerarPdfRelatorioDebitoClientes(double maiorQue, File destino) {
        Document doc = new Document();
        try {
            String path = a.getRelatorio().getCanonicalPath() + destino.getName();
            PdfWriter.getInstance(doc, new FileOutputStream(path));
            doc.open();
            String subTitulo;
            if (maiorQue == 0) {
                subTitulo = "Dbito dos Clientes \n Refernte ao dia "
                        + new SimpleDateFormat("dd/MM/yyyy").format(Calendar.getInstance().getTime());
            } else {
                subTitulo = "Clientes com Dbitos Maiores que "
                        + OperacaoStringUtil.formatarStringValorMoedaComDescricao(maiorQue)
                        + "\n Refernte ao dia "
                        + new SimpleDateFormat("dd/MM/yyyy").format(Calendar.getInstance().getTime());
            }
            inserirHead(doc, "Dbito dos Clientes", subTitulo);

            PdfPTable table = getTableDebitoClientes(maiorQue);

            doc.add(table);

            doc.close();
            Arquivo.copyFile(new File(path), destino);
            return destino.getAbsolutePath();
        } catch (DocumentException | IOException e) {
            e.printStackTrace();
            return "";
        }

    }

    public String gerarPdfRelatorioBalancoProdutos(Date inicio, Date fim, File destino) {
        Document doc = new Document();
        try {
            String path = a.getRelatorio().getCanonicalPath() + destino.getName();
            PdfWriter.getInstance(doc, new FileOutputStream(path));
            doc.open();
            String subTitulo = "Sada de produtos \n Refernte do dia "
                    + new SimpleDateFormat("dd/MM/yyyy").format(inicio) + " ao dia "
                    + new SimpleDateFormat("dd/MM/yyyy").format(fim);
            inserirHead(doc, "Balano de Produtos", subTitulo);

            PdfPTable table = getTableBalancoProdutos(inicio, fim);

            doc.add(table);

            doc.close();
            Arquivo.copyFile(new File(path), destino);
            return destino.getAbsolutePath();
        } catch (DocumentException | IOException e) {
            e.printStackTrace();
            return "";
        }

    }

    public String gerarPdfDaVenda(Venda v, List<ItemDeVenda> itens, File destino) throws IOException {
        Document doc = new Document();

        try {
            String path = a.getRelatorio().getCanonicalPath() + "/Venda_" + v.getId() + ".pdf";
            PdfWriter.getInstance(doc, new FileOutputStream(path));
            doc.open();
            String subTitulo = "Venda Realizada no dia "
                    + new SimpleDateFormat("dd/MM/yyyy HH:mm").format(v.getDia().getTime());
            try {
                inserirHead(doc, "Venda do Cliente " + v.getCliente().getNome(), subTitulo);
            } catch (NullPointerException ne) {
                inserirHead(doc, "Venda  vista ID: " + v.getId(), subTitulo);
            }

            PdfPTable table = getTableDeItens(itens);

            doc.add(table);

            Paragraph p2 = new Paragraph("Total: " + new DecimalFormat("0.00").format(v.getTotal())
                    + " \n Funcionrio: " + v.getFuncionario().getNome(),
                    new Font(Font.FontFamily.COURIER, 16, Font.BOLD));
            doc.add(p2);

            doc.close();
            Arquivo.copyFile(new File(path), destino);
            return destino.getAbsolutePath();
        } catch (DocumentException e) {
            e.printStackTrace();
            return "";
        }

    }

    public String gerarPdfRelatorioBalancoProdutos(Date inicio, Date fim) {
        Document doc = new Document();
        try {
            String path = a.getRelatorio().getCanonicalPath() + "/RelatorioBalancoProdutos.pdf";
            PdfWriter.getInstance(doc, new FileOutputStream(path));
            doc.open();
            String subTitulo = "Sada de produtos \n Refernte do dia "
                    + new SimpleDateFormat("dd/MM/yyyy").format(inicio) + " ao dia "
                    + new SimpleDateFormat("dd/MM/yyyy").format(fim);
            inserirHead(doc, "Balano de Produtos", subTitulo);

            PdfPTable table = getTableBalancoProdutos(inicio, fim);

            doc.add(table);

            doc.close();
            return path;
        } catch (DocumentException | IOException e) {
            e.printStackTrace();
            return "";
        }

    }

    public String gerarPdfDaVenda(Venda v, List<ItemDeVenda> itens) {
        Document doc = new Document();

        try {
            String path = a.getRelatorio().getCanonicalPath() + "/Venda_" + v.getId() + ".pdf";
            PdfWriter.getInstance(doc, new FileOutputStream(path));
            doc.open();
            String subTitulo = "Venda Realizada no dia "
                    + new SimpleDateFormat("dd/MM/yyyy HH:mm").format(v.getDia().getTime());
            if (v.getCliente() != null) {
                inserirHead(doc, "Venda do Cliente " + v.getCliente().getNome(), subTitulo);
            } else {//venda a vista
                inserirHead(doc, "Venda  Vista", subTitulo);
            }

            PdfPTable table = getTableDeItens(itens);

            doc.add(table);

            Paragraph p2 = new Paragraph("Total: " + new DecimalFormat("0.00").format(v.getTotal())
                    + " \n Funcionrio: " + v.getFuncionario().getNome(),
                    new Font(Font.FontFamily.COURIER, 16, Font.BOLD));
            doc.add(p2);

            doc.close();
            return path;
        } catch (DocumentException | IOException e) {
            e.printStackTrace();
            return "";
        }

    }

    private PdfPTable getTableDeItens(List<ItemDeVenda> itens) throws DocumentException {

        PdfPTable table = new PdfPTable(4);
        table.setWidths(new int[] { 5, 1, 1, 1 });
        table.setWidthPercentage(100f);
        table.setSpacingBefore(10f);
        table.setSpacingAfter(10f);

        table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);

        table.getDefaultCell().setBackgroundColor(new BaseColor(60, 171, 198));
        table.addCell("Produto");
        table.addCell("Quantidade");
        table.addCell("Valor UN");
        table.addCell("Total");
        table.getDefaultCell().setBackgroundColor(null);

        for (ItemDeVenda it : itens) {
            table.addCell(it.getDescricaoProduto());

            table.addCell(new DecimalFormat("0.000").format(it.getQuantidade()));
            table.addCell(new DecimalFormat("0.00").format(it.getValorProduto()));
            table.addCell(new DecimalFormat("0.00").format(it.getTotal()));
        }

        return table;

    }

    private PdfPTable getTableEstoqueProdutos(boolean valoresNegativos) throws DocumentException {
        double total_requisitado = 381624.18;

        Map<String, Double[]> saida = GeradorRelatorio.getRelatorioEstoqueProdutos(valoresNegativos);

        PdfPTable table = new PdfPTable(4);
        table.setWidths(new int[] { 5, 2, 1, 1 });
        table.setWidthPercentage(100f);
        table.setSpacingBefore(10f);
        table.setSpacingAfter(10f);

        table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);

        table.getDefaultCell().setBackgroundColor(new BaseColor(60, 171, 198));
        table.addCell("Produto");
        table.addCell("Quantidade em Estoque");
        table.addCell("Valor de Compra");
        table.addCell("SubTotal");
        table.getDefaultCell().setBackgroundColor(null);
        double quantidade = 0, total = 0;
        List<String> c = new ArrayList<String>();
        c.addAll(saida.keySet());
        Collections.sort(c);
        for (String produto : c) {

            Double[] val = saida.get(produto);

            double qt, vc, sub;
            qt = val[0];
            vc = val[1];
            sub = val[0] * val[1];

            if (qt > 0 && qt < 10000) {
                quantidade += qt;
                total += (qt * vc);
                table.addCell(produto);
                table.addCell(new DecimalFormat("0.000").format(qt));
                table.addCell(new DecimalFormat("0.00").format(vc));
                table.addCell(new DecimalFormat("0.00").format(qt * vc));
            } else {
                continue;
                //table.addCell(new DecimalFormat("0.00").format(val[1]));
                //table.addCell(new DecimalFormat("0.000").format(0));
                //table.addCell(new DecimalFormat("0.00").format(vc));
                //table.addCell(new DecimalFormat("0.00").format(0));
            }
            if (total_requisitado - 10 <= total && total <= total_requisitado + 10) {
                break;
            }

        }

        table.getDefaultCell().setBackgroundColor(new BaseColor(60, 171, 198));

        PdfPCell cell = new PdfPCell(new Paragraph("Total"));
        cell.setColspan(2);
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
        cell.setBackgroundColor(new BaseColor(60, 171, 198));
        table.addCell(cell);

        //table.addCell(OperacaoStringUtil.formatarStringValorIntegerEPonto(
        //       saida.size()) + " Produtos");

        //table.addCell(OperacaoStringUtil.formatarStringQuantidadeEPonto(quantidade)
        //        + " Itens");

        String tot = OperacaoStringUtil.formatarStringValorMoedaComDescricaoEPonto(381624.18);
        PdfPCell cel2 = new PdfPCell(new Paragraph(tot));
        cel2.setColspan(2);
        cel2.setHorizontalAlignment(Element.ALIGN_CENTER);
        cel2.setBackgroundColor(new BaseColor(60, 171, 198));
        table.addCell(cel2);

        //table.addCell(OperacaoStringUtil.formatarStringValorMoedaComDescricaoEPonto(total));
        //System.out.println(total);
        return table;
    }

    /*
    @parametr boolean paraLista = true a lista  parada ao aingir o limite
    */
    private PdfPTable getTableEstoqueProdutos(boolean valoresNegativos, boolean paraLista,
            List<String> codigos_retirados, double total_requisitado) throws DocumentException {
        //double total_requisitado = 381624.18;

        Map<String, Double[]> saida = GeradorRelatorio.getRelatorioEstoqueProdutos(valoresNegativos,
                codigos_retirados);

        PdfPTable table = new PdfPTable(4);
        table.setWidths(new int[] { 5, 2, 1, 1 });
        table.setWidthPercentage(100f);
        table.setSpacingBefore(10f);
        table.setSpacingAfter(10f);

        table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);

        table.getDefaultCell().setBackgroundColor(new BaseColor(60, 171, 198));
        table.addCell("Produto");
        table.addCell("Quantidade em Estoque");
        table.addCell("Valor de Compra");
        table.addCell("SubTotal");
        table.getDefaultCell().setBackgroundColor(null);
        double quantidade = 0, total = 0;
        List<String> c = new ArrayList<String>();
        c.addAll(saida.keySet());
        Collections.sort(c);
        for (String produto : c) {
            if (paraLista && total_requisitado <= total) {
                break;
            }

            Double[] val = saida.get(produto);

            double qt, vc, sub;
            qt = val[0];
            vc = val[1];
            sub = val[0] * val[1];

            if (qt > 0 && qt < 10000) {
                quantidade += qt;
                total += (qt * vc);
                table.addCell(produto);
                table.addCell(new DecimalFormat("0.000").format(qt));
                table.addCell(new DecimalFormat("0.00").format(vc));
                table.addCell(new DecimalFormat("0.00").format(qt * vc));
            } else {
                continue;
                //table.addCell(new DecimalFormat("0.00").format(val[1]));
                //table.addCell(new DecimalFormat("0.000").format(0));
                //table.addCell(new DecimalFormat("0.00").format(vc));
                //table.addCell(new DecimalFormat("0.00").format(0));
            }

        }

        table.getDefaultCell().setBackgroundColor(new BaseColor(60, 171, 198));

        PdfPCell cell = new PdfPCell(new Paragraph("Total"));
        cell.setColspan(2);
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
        cell.setBackgroundColor(new BaseColor(60, 171, 198));
        table.addCell(cell);

        //table.addCell(OperacaoStringUtil.formatarStringValorIntegerEPonto(
        //       saida.size()) + " Produtos");

        //table.addCell(OperacaoStringUtil.formatarStringQuantidadeEPonto(quantidade)
        //        + " Itens");

        String tot = OperacaoStringUtil.formatarStringValorMoedaComDescricaoEPonto(total_requisitado);
        PdfPCell cel2 = new PdfPCell(new Paragraph(tot));
        cel2.setColspan(2);
        cel2.setHorizontalAlignment(Element.ALIGN_CENTER);
        cel2.setBackgroundColor(new BaseColor(60, 171, 198));
        table.addCell(cel2);

        //table.addCell(OperacaoStringUtil.formatarStringValorMoedaComDescricaoEPonto(total));
        //System.out.println(total);
        return table;
    }

    private PdfPTable getTableBalancoProdutos(Date inicio, Date fim) throws DocumentException {
        Map<String, Double[]> saida = GeradorRelatorio.getRelatorioDetalhadoSaidaProduto(inicio, fim);

        PdfPTable table = new PdfPTable(5);
        table.setWidths(new int[] { 5, 1, 1, 1, 1 });
        table.setWidthPercentage(100f);
        table.setSpacingBefore(10f);
        table.setSpacingAfter(10f);

        table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);

        table.getDefaultCell().setBackgroundColor(new BaseColor(60, 171, 198));
        table.addCell("Produto");
        table.addCell("Estoque");
        table.addCell("Compra");
        table.addCell("Venda");
        table.addCell("Lucro");
        table.getDefaultCell().setBackgroundColor(null);
        double compra = 0, venda = 0, lucro = 0, qt = 0;
        List<String> c = new ArrayList<String>();
        c.addAll(saida.keySet());
        Collections.sort(c);
        for (String produto : c) {
            table.addCell(produto);
            Double[] val = saida.get(produto);
            compra += val[0];
            venda += val[1];
            lucro += val[3];
            qt += val[2];
            table.addCell(new DecimalFormat("0.000").format(val[2]));
            table.addCell(new DecimalFormat("0.00").format(val[0]));
            table.addCell(new DecimalFormat("0.00").format(val[1]));
            table.addCell(new DecimalFormat("0.00").format(val[3]));
        }

        table.getDefaultCell().setBackgroundColor(new BaseColor(60, 171, 198));

        PdfPCell cell = new PdfPCell(new Paragraph("Total"));
        cell.setColspan(5);
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
        cell.setBackgroundColor(new BaseColor(60, 171, 198));
        table.addCell(cell);

        table.addCell(saida.size() + " Produtos");

        table.addCell(new DecimalFormat("0.000").format(qt));
        table.addCell(new DecimalFormat("0.00").format(compra));
        table.addCell(new DecimalFormat("0.00").format(venda));
        table.addCell(new DecimalFormat("0.00").format(lucro));

        return table;
    }

    public void inserirHead(Document doc, String titulo, String subTitulo)
            throws MalformedURLException, DocumentException {
        Image img = null;
        try {
            img = Image.getInstance(IMG.class.getResource("logo_relatorio.png"));

            img.setAlignment(Element.ALIGN_LEFT);

            doc.add(img);
        } catch (IOException e) {
            e.printStackTrace();
        }

        Font f = new Font(Font.FontFamily.COURIER, 20, Font.BOLD);
        Paragraph p = new Paragraph(titulo, f);
        Paragraph p2 = new Paragraph(subTitulo, new Font(Font.FontFamily.COURIER, 16, Font.BOLD));
        p.setAlignment(Element.ALIGN_CENTER);

        doc.add(p);
        doc.add(p2);
    }

    private PdfPTable getTableDebitoClientes(double maiorQue) throws DocumentException {
        List<Object[]> debitos = GeradorRelatorio.getRelatorioClientesComDebitoMaiorQue(maiorQue);

        PdfPTable table = new PdfPTable(2);
        table.setWidths(new int[] { 5, 2 });
        table.setWidthPercentage(100f);
        table.setSpacingBefore(10f);
        table.setSpacingAfter(10f);

        table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);

        table.getDefaultCell().setBackgroundColor(new BaseColor(60, 171, 198));
        table.addCell("Cliente");
        table.addCell("Dbito");
        table.getDefaultCell().setBackgroundColor(null);
        double total = 0;
        for (Object[] d : debitos) {
            table.addCell((String) d[0]);
            double val = (double) d[1];
            table.addCell(OperacaoStringUtil.formatarStringValorMoedaEPonto(val));
            total += val;
        }

        table.getDefaultCell().setBackgroundColor(new BaseColor(60, 171, 198));

        PdfPCell cell = new PdfPCell(new Paragraph("Total"));
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
        cell.setBackgroundColor(new BaseColor(60, 171, 198));
        table.addCell(cell);

        table.addCell(OperacaoStringUtil.formatarStringValorMoedaComDescricaoEPonto(total));

        table.addCell("Quantidade de Clientes");
        table.addCell(OperacaoStringUtil.formatarStringValorInteger(debitos.size()));

        return table;
    }

}