nwk.com.br.documents.OrcamentoPdf.java Source code

Java tutorial

Introduction

Here is the source code for nwk.com.br.documents.OrcamentoPdf.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 nwk.com.br.documents;

/**
 *
 * @author Richard Matheus
 */
import com.itextpdf.text.Chunk;
import java.io.FileOutputStream;
import java.io.OutputStream;
import com.itextpdf.text.Document;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import java.awt.Color;
import java.awt.Desktop;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.List;
import nwk.com.br.dao.ClienteDAO;
import nwk.com.br.dao.OrcamentoDAO;
import nwk.com.br.model.Cliente;
import nwk.com.br.model.Orcamento;
import nwk.com.br.model.Produto;

public class OrcamentoPdf {
    OrcamentoDAO orcamentodao = new OrcamentoDAO();
    Orcamento orcamento = new Orcamento();
    Cliente cliente = new Cliente();
    ClienteDAO clientedao = new ClienteDAO();

    SimpleDateFormat formatDate = new SimpleDateFormat("dd/MM/yyyy");
    Font f = new Font(Font.FontFamily.TIMES_ROMAN, 12);

    public void gerarPdf(Orcamento orcamento) throws Exception {
        Document doc = null;
        OutputStream os = null;
        cliente = clientedao.select(orcamento.getIdCliente());

        try {
            //cria o documento tamanho A4, margens de 2,54cm
            doc = new Document(PageSize.A4, 35, 35, 35, 35);

            //cria a stream de sada
            String caminho = "C:\\PoolOrc\\OrcPdf\\ORC" + orcamento.getId() + " " + cliente.getNome() + ".pdf";
            os = new FileOutputStream(caminho);

            //associa a stream de sada ao 
            PdfWriter.getInstance(doc, os);

            //abre o documento
            doc.open();

            //Definindo a font coamily.COURIER, 20, Font.BOLD);mo Courier, tamanho 20 em negrito
            //Font f = new Font(Font.FontFamily.TIMES_ROMAN, 20, Font.BOLD);
            Paragraph orc = new Paragraph("ORAMENTO", f);
            orc.setAlignment(Element.ALIGN_CENTER);

            /*AREA DE TESTES**************************************************/

            /*AREA DE TESTES**************************************************/

            doc.add(numPed(orcamento));//adiciona numero do pedido
            doc.add(new Paragraph(" "));
            doc.add(cabecalho(orcamento));//adiciona o cabecalho com informaes da empresa
            doc.add(new Paragraph(" "));
            doc.add(new Paragraph(" "));
            doc.add(dadosCliente(orcamento));//adiciona os dados do cliente
            doc.add(new Paragraph(" "));
            doc.add(orc);//esreve oramento
            doc.add(new Paragraph(" "));
            doc.add(dadosProdutos(orcamento));//adiciona os produtos
            //doc.add(new Paragraph(" "));
            doc.add(new Paragraph(
                    "______________________________________________________________________________"));
            //doc.add(new Paragraph(" "));
            doc.add(dadosPagamento(orcamento));//adiciona os dados de valores e forma de pagamento
            doc.add(new Paragraph(" "));
            doc.add(new Paragraph(" "));
            doc.add(new Paragraph(" "));
            doc.add(dadosRodape(orcamento));//adiciona o rodape ao oramento

            //abrindo o arquivo
            File arquivo = new File(caminho);
            Desktop.getDesktop().open(arquivo);
        } finally {
            if (doc != null) {
                //fechamento do documento
                doc.close();
            }
            if (os != null) {
                //fechamento da stream de sada
                os.close();
            }
        }
        System.out.println("done");
    }

    //Pega o Id do oramento
    private Paragraph numPed(Orcamento orcamento) throws Exception {
        //cria uma linha com o numero do pedido
        Paragraph cod = new Paragraph("Oramento: " + orcamento.getId(), f);
        cod.setAlignment(Element.ALIGN_RIGHT);
        return cod;
    }

    //Adiciona o cabecalho do orcamento
    private PdfPTable cabecalho(Orcamento orcamento) throws Exception {

        //Cria Uma nova tabela com tres colunas, onde cada uma ocupa 20%, 20% e 60% do tamanho delas
        PdfPTable cabecalho = new PdfPTable(new float[] { 0.3f, 0.4f, 0.3f });
        cabecalho.setWidthPercentage(100.0f);//seta o tamanho da tabela em relaao ao documento
        cabecalho.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
        cabecalho.getDefaultCell().setBorder(0);

        //Instancia a imagem da logo da empresa
        Image img = Image.getInstance("logoorc.png");//instancia a imagem
        img.setAlignment(Element.ALIGN_CENTER);//alinha a imagem no centro

        //Cria uma linha da tabela que pegara 3 linhas com a logo nela
        PdfPCell logo = new PdfPCell(img);
        logo.setBorder(0);
        logo.setRowspan(3);

        //adiciona a logo a tabela
        cabecalho.addCell(logo);

        //adiciona informaes da empresa a tabela
        cabecalho.addCell(new Phrase(new Chunk("Sos da Piscina", f)));
        cabecalho.addCell(new Phrase(new Chunk(formatDate.format(orcamento.getDhOrcamento()).toString(), f)));
        cabecalho.addCell(new Phrase(new Chunk("Avenida Rebouas, 1440 - Centro", f)));
        cabecalho.addCell(new Phrase(new Chunk("Sumar/SP - 13170-140", f)));
        cabecalho.addCell(new Phrase(new Chunk("contato@sosdapiscina.com.br", f)));
        cabecalho.addCell(new Phrase(new Chunk("www.sosdapiscina.com.br", f)));
        cabecalho.addCell(new Phrase(new Chunk("", f)));

        return cabecalho;
    }

    //Adiciona os dados do cliente do orcamento
    private PdfPTable dadosCliente(Orcamento orcamento) throws Exception {
        cliente = clientedao.select(orcamento.getIdCliente());

        PdfPTable dadosCliente = new PdfPTable(new float[] { 0.35f, 0.35f, 0.3f });
        dadosCliente.setWidthPercentage(90.0f);//seta o tamanho da tabela em relaao ao documento
        dadosCliente.getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT);//alinha os dados a esquerda
        dadosCliente.getDefaultCell().setBorder(0);//retira a borda

        //Cria uma cedula da tabela que pegara tres colunas
        PdfPCell nomeCli = new PdfPCell(new Paragraph("Nome: " + cliente.getNome(), f));
        nomeCli.setColspan(3);
        nomeCli.setHorizontalAlignment(Element.ALIGN_LEFT);
        nomeCli.setBorder(0);
        dadosCliente.addCell(nomeCli);

        //formatao do celular e do telefone
        String celular = new String();
        String telefone = new String();
        celular = "(" + cliente.getCelular().substring(0, 2) + ") " + cliente.getCelular().substring(2);
        telefone = "(" + cliente.getTelefone().substring(0, 2) + ") " + cliente.getCelular().substring(2);

        //adciona os demais dados do cliente a tabela
        dadosCliente.addCell("E-mail: " + cliente.getEmail());
        dadosCliente.addCell("Telefone: " + telefone);
        dadosCliente.addCell("Celular: " + celular);
        dadosCliente.addCell("Rua: " + cliente.getRua() + ", " + cliente.getNumero());
        dadosCliente.addCell("Bairro: " + cliente.getBairro());
        dadosCliente.addCell("Complemento: " + cliente.getComplemento());
        dadosCliente.addCell(cliente.getCidade() + "/" + cliente.getEstado());
        dadosCliente.addCell(cliente.getCep());

        return dadosCliente;
    }

    //Adiciona os dados dos produtos
    private PdfPTable dadosProdutos(Orcamento orcamento) throws Exception {
        PdfPTable produtosOrc = new PdfPTable(new float[] { 0.1f/*cod*/, 0.45f/*descri*/, 0.1f/*qtd*/,
                0.2f/*valuni*/, 0.15f/*descon*/, 0.2f/*total*/ });
        produtosOrc.setWidthPercentage(100.0f);//seta o tamanho da tabela em relaao ao documento
        produtosOrc.getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT);
        produtosOrc.getDefaultCell().setBorder(0);

        //Adiciona os nomes das colunas
        PdfPCell codProd = new PdfPCell(new Paragraph("Cod"));
        PdfPCell descProd = new PdfPCell(new Paragraph("Descrio"));
        PdfPCell qtdProd = new PdfPCell(new Paragraph("Qtd"));
        PdfPCell valProd = new PdfPCell(new Paragraph("Valor Unitario"));
        PdfPCell desProd = new PdfPCell(new Paragraph("Desconto"));
        PdfPCell totalProd = new PdfPCell(new Paragraph("Total"));

        produtosOrc.addCell(codProd);
        produtosOrc.addCell(descProd);
        produtosOrc.addCell(qtdProd);
        produtosOrc.addCell(valProd);
        produtosOrc.addCell(desProd);
        produtosOrc.addCell(totalProd);

        //Adiciona as informaes dos produtos na tabela
        for (Produto produto : orcamentodao.getTodosProdutosOrcamento(orcamento)) {
            produtosOrc.addCell(produto.getId());
            produtosOrc.addCell(produto.getDescricao());
            produtosOrc.addCell(produto.getQuantidade());
            produtosOrc.addCell("R$ " + produto.getValorVenda());
            produtosOrc.addCell("R$ " + produto.getDesconto());
            produtosOrc.addCell("R$ " + produto.getTotal());
        }

        return produtosOrc;
    }

    //Adiciona os dados de valores
    private PdfPTable dadosPagamento(Orcamento orcamento) throws Exception {
        Font fontTotal = new Font(Font.FontFamily.TIMES_ROMAN, 16);

        PdfPTable dPagamento = new PdfPTable(new float[] { 0.5f, 0.2f, 0.3f });
        dPagamento.setWidthPercentage(100.0f);//seta o tamanho da tabela em relaao ao documento
        dPagamento.getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT);
        dPagamento.getDefaultCell().setBorder(0);

        //celula com espao em branco e com o Total
        PdfPCell spc = new PdfPCell(new Paragraph(" "));
        PdfPCell total = new PdfPCell(new Paragraph("TOTAL: R$" + orcamento.getTotal(), fontTotal));

        //alinha a celula total a esquerda
        total.setHorizontalAlignment(Element.ALIGN_RIGHT);

        spc.setColspan(3);

        total.setBorder(0);
        spc.setBorder(0);

        if (orcamento.getFormaPagamento().equals("0")) {
            dPagamento.addCell(new Paragraph("Forma de Pagamento: A vista - Dinheiro", f));
        } else if (orcamento.getFormaPagamento().equals("1")) {
            dPagamento.addCell(new Paragraph("Forma de Pagamento: A vista - Carto", f));
        } else if (orcamento.getFormaPagamento().equals("2")) {
            dPagamento.addCell(new Paragraph("Forma de Pagamento: Parcelado", f));
        }

        dPagamento.addCell(new Paragraph("Desconto: R$" + orcamento.getDesconto(), f));
        dPagamento.addCell(total);

        return dPagamento;
    }

    //Adiciona o rodape
    private PdfPTable dadosRodape(Orcamento orcamento) throws Exception {
        //tabela que pega com 100% do tamanho do arquivo, alinhada no centro com tres colunas e sem bordas
        PdfPTable rodape = new PdfPTable(new float[] { 0.5f, 0.2f, 0.3f });
        rodape.setWidthPercentage(100.0f);//seta o tamanho da tabela em relaao ao documento
        rodape.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
        rodape.getDefaultCell().setBorder(0);

        PdfPCell obs = new PdfPCell(new Paragraph("\n\n Observaes:\n" + orcamento.getObservacoes(), f));
        PdfPCell ass = new PdfPCell(new Paragraph("\n\n_________________________\nAssinatura", f));

        Font fonteAviso = new Font(Font.FontFamily.TIMES_ROMAN, 14, Font.BOLDITALIC);

        PdfPCell spc = new PdfPCell(new Paragraph(" "));
        PdfPCell aviso = new PdfPCell(new Paragraph(
                "AGRADEEMOS A PREFERNCIA\nORAMENTO VALIDO SOMENTE PARA O DIA DE SUA CRIAO!", fonteAviso));

        aviso.setHorizontalAlignment(Element.ALIGN_CENTER);
        obs.setHorizontalAlignment(Element.ALIGN_LEFT);
        ass.setHorizontalAlignment(Element.ALIGN_CENTER);

        obs.setBorder(0);
        ass.setBorder(0);
        spc.setBorder(0);
        aviso.setBorder(0);

        spc.setColspan(3);
        aviso.setColspan(3);

        rodape.addCell(obs);
        rodape.addCell(new Paragraph(" "));
        rodape.addCell(ass);
        rodape.addCell(spc);
        rodape.addCell(spc);
        rodape.addCell(spc);
        rodape.addCell(spc);
        rodape.addCell(aviso);
        //rodape.setExtendLastRow(true);

        //cria uma nova celula que recebe a tabela anterior
        PdfPCell otherCell = new PdfPCell(rodape);
        otherCell.setBorder(0);
        otherCell.setVerticalAlignment(Element.ALIGN_BOTTOM);
        otherCell.setHorizontalAlignment(Element.ALIGN_CENTER);

        //cria uma nova tabela que recebe a celula otherCell
        PdfPTable rodape2 = new PdfPTable(new float[] { 1.0f });
        rodape2.setWidthPercentage(100.0f);//seta o tamanho da tabela em relaao ao documento

        rodape2.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
        rodape2.getDefaultCell().setBorder(0);

        //estende a tabela at o fim da pagina, como o alinhamento horizontal dela  bottom, ela fica toda no rodape
        rodape2.addCell(otherCell);
        rodape2.setExtendLastRow(true);

        return rodape2;
    }
}