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

Java tutorial

Introduction

Here is the source code for nwk.com.br.documents.ProdutoMaisVendidoPdf.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.Date;
import java.util.List;
import nwk.com.br.dao.ProdutoDAO;
import nwk.com.br.model.Orcamento;
import nwk.com.br.model.Produto;

public class ProdutoMaisVendidoPdf {
    Produto produto = new Produto();
    ProdutoDAO produtodao = new ProdutoDAO();

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

    public void getProdutoMaisVendido() throws Exception {
        Document doc = null;
        OutputStream os = null;

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

            //cria a stream de sada
            os = new FileOutputStream("C:\\PoolOrc\\Consultas\\ProdutoMaisVendido.pdf");

            //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("PRODUTO MAIS VENDIDO", f);
            orc.setAlignment(Element.ALIGN_CENTER);

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

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

            doc.add(cabecalho());//adiciona o cabecalho com informaes da empresa
            doc.add(new Paragraph(" "));
            doc.add(new Paragraph(" "));
            doc.add(orc);//esreve oramento
            doc.add(new Paragraph(" "));
            doc.add(getProduto());//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("C:\\PoolOrc\\Consultas\\ProdutoMaisVendido.pdf");
            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");
    }

    //Adiciona o cabecalho do orcamento
    private PdfPTable cabecalho() 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(dia).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 dos produtos
    private PdfPTable getProduto() throws Exception {
        PdfPTable produtoMaisVendido = new PdfPTable(new float[] { 0.1f/*id*/, 0.65f/*nome*/, 0.25f/*soma*/ });
        produtoMaisVendido.setWidthPercentage(100.0f);//seta o tamanho da tabela em relaao ao documento
        produtoMaisVendido.getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT);
        produtoMaisVendido.getDefaultCell().setBorder(0);

        //Adiciona os nomes das colunas
        PdfPCell codProduto = new PdfPCell(new Paragraph("Cod"));
        PdfPCell descProduto = new PdfPCell(new Paragraph("Descrio"));
        PdfPCell qtdProduto = new PdfPCell(new Paragraph("Quantidade"));

        produtoMaisVendido.addCell(codProduto);
        produtoMaisVendido.addCell(descProduto);
        produtoMaisVendido.addCell(qtdProduto);

        //Adiciona as informaes do cliente na tabela
        int qtdCli = 0;
        for (Produto produto : produtodao.getProdutoeMaisVendido()) {
            produtoMaisVendido.addCell(produto.getId());
            produtoMaisVendido.addCell(produto.getDescricao());
            produtoMaisVendido.addCell(produto.getQuantidade());

            if (qtdCli == 19) {
                break;
            } else {
                qtdCli++;
            }
        }

        return produtoMaisVendido;
    }

    //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: " + orcamento.getTotal(),fontTotal));
        
        //alinha a celula total a esquerda
        total.setHorizontalAlignment(Element.ALIGN_RIGHT);
        
        spc.setColspan(3);
        
        total.setBorder(0);
        spc.setBorder(0);
        
        dPagamento.addCell(new Paragraph("Forma de Pagamento: " + orcamento.getFormaPagamento(),f));
        dPagamento.addCell(new Paragraph("Desconto: " + 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;
    }*/
}