Funciones.TicketPDF.java Source code

Java tutorial

Introduction

Here is the source code for Funciones.TicketPDF.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 Funciones;

import Interfaz.Repartidor;
import com.itextpdf.text.BadElementException;
import com.itextpdf.text.BaseColor;
import java.io.File;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Font.FontFamily;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
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.Desktop;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.time.LocalDate;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author MauricioNTHINGs
 */
public class TicketPDF {
    File archivo;
    FileChuser dir = new FileChuser();
    String directorio;
    Font f = new Font(FontFamily.HELVETICA, 8, Font.NORMAL, BaseColor.BLACK);
    String idpedido;
    String cliente[];
    String lineas[][];
    int cantidadlineas;
    String[] totales;
    BasededatosManager bd = new BasededatosManager();
    PdfPCell vacio = new PdfPCell(new Paragraph(" "));

    public TicketPDF(String id, int idcliente, String directorio)
            throws FileNotFoundException, DocumentException, IOException {
        try {
            this.directorio = directorio;
            String nombrecliente = "";
            this.idpedido = id;
            this.cliente = llenarVector(
                    "SELECT nombre,direccion,telefono FROM clientes WHERE idclientes='" + idcliente + "';");
            //TODO 
            ResultSet consultanumdetalle = bd
                    .consultar("SELECT cantidad FROM pedidos WHERE idpedidos='" + id + "'");
            while (consultanumdetalle.next()) {
                this.cantidadlineas = consultanumdetalle.getInt("cantidad");
            }
            ResultSet consultadetalle1 = bd.consultar(
                    "SELECT P.nombre FROM pizzas P, detalleventas D WHERE D.pizzas_idpizzas=P.idpizzas AND D.pedidos_idpedidos='"
                            + id + "'");
            lineas = new String[cantidadlineas][2];
            String[] linea1 = new String[cantidadlineas];
            String[] linea2 = new String[cantidadlineas];
            int z = 0;
            while (consultadetalle1.next()) {
                linea1[z] = consultadetalle1.getString(1);
                z++;
            }
            ResultSet consultadetalle2 = bd.consultar(
                    "SELECT P.precio FROM pizzas P, detalleventas D WHERE D.pizzas_idpizzas=P.idpizzas AND D.pedidos_idpedidos='"
                            + id + "'");
            z = 0;
            while (consultadetalle2.next()) {
                linea2[z] = consultadetalle2.getString(1);
                z++;
            }
            System.out.println(cantidadlineas);
            for (int a = 0; a < linea1.length; a++) {
                System.out.println(a);
                System.out.println(linea1[a]);
                System.out.println(linea2[a]);
                lineas[a][0] = linea1[a];
                lineas[a][1] = linea2[a];
                System.out.println(lineas[a][0] + " " + lineas[a][1]);
            }
            this.totales = llenarVector(
                    "SELECT total,iva,totalneto FROM pedidos WHERE idpedidos='" + idpedido + "';");
            this.archivo = new File(directorio);
            Document documento = new Document(PageSize.A6);
            FileOutputStream ficheroPdf = new FileOutputStream(archivo);
            PdfWriter.getInstance(documento, ficheroPdf).setInitialLeading(20);
            documento.setMargins(0, 0, 1, 0);
            documento.open();
            documento.add(tablaHeader());
            documento.add(tablaCliente());
            documento.add(tablaLineas());
            documento.add(tablaFooter());
            documento.close();
            FileInputStream pdf = new FileInputStream(archivo);
            int len = (int) archivo.length();
            String query = ("UPDATE pedidos SET ticket=? WHERE idpedidos='" + idpedido + "';");
            BasededatosManager bd = new BasededatosManager();
            PreparedStatement pstmt = bd.getConexion("chulospizza").prepareStatement(query);
            //method to insert a stream of bytes
            pstmt.setBinaryStream(1, pdf);
            pstmt.executeUpdate();
            ejecutarPDF();
        } catch (SQLException ex) {
            Logger.getLogger(PedidoPDF.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    String[] llenarVector(String sql) {
        String[] fila = null;
        try {
            ResultSet consulta = bd.consultar(sql);
            ResultSetMetaData rsmd = consulta.getMetaData();
            int columnas = rsmd.getColumnCount();
            fila = new String[columnas];
            while (consulta.next()) {
                for (int a = 0; a < fila.length; a++) {
                    fila[a] = consulta.getString(a + 1);
                }
            }
        } catch (SQLException ex) {
            Logger.getLogger(PedidoPDF.class.getName()).log(Level.SEVERE, null, ex);
        }
        return fila;
    }

    PdfPTable tablaCliente() {
        PdfPTable tablacliente = new PdfPTable(2);
        tablacliente.setTotalWidth(500);
        PdfPCell celdanombrecliente = new PdfPCell(new Paragraph("Nombre Del Cliente: " + cliente[0]));
        tablacliente.addCell(celdanombrecliente);
        PdfPCell celdavendedor = new PdfPCell(new Paragraph("Vendedor: APP"));
        tablacliente.addCell(celdavendedor);
        PdfPCell celdadireccion = new PdfPCell(new Paragraph("Direccion: " + cliente[1]));
        celdadireccion.setColspan(2);
        tablacliente.addCell(celdadireccion);
        ;
        vacio.setColspan(2);
        vacio.setBorder(Rectangle.BOTTOM | Rectangle.TOP);
        tablacliente.addCell(vacio);
        return tablacliente;
    }

    PdfPTable tablaLineas() {
        PdfPTable tablalineas = new PdfPTable(2);
        PdfPCell celdanombrepizza = new PdfPCell(new Paragraph("Nombre Pizza", f));
        tablalineas.addCell(celdanombrepizza);
        PdfPCell celdapreciopizza = new PdfPCell(new Paragraph("Precio", f));
        tablalineas.addCell(celdapreciopizza);
        for (int a = 0; a < cantidadlineas; a++) {
            for (int b = 0; b < 2; b++) {
                PdfPCell celda = new PdfPCell(new Paragraph(lineas[a][b], f));
                tablalineas.addCell(celda);
            }
        }
        vacio.setColspan(2);
        vacio.setBorder(Rectangle.BOTTOM | Rectangle.TOP);
        tablalineas.addCell(vacio);
        return tablalineas;
    }

    PdfPTable tablaFooter() {
        PdfPTable tablafooter = new PdfPTable(2);
        PdfPTable cantidades = new PdfPTable(2);

        PdfPCell celdasubtotal = new PdfPCell(new Paragraph("Subtotal", f));
        cantidades.addCell(celdasubtotal);
        PdfPCell subtotalcantidad = new PdfPCell(new Paragraph("$" + totales[0], f));
        cantidades.addCell(subtotalcantidad);
        PdfPCell celdaiva = new PdfPCell(new Paragraph("I.V.A.", f));
        cantidades.addCell(celdaiva);
        PdfPCell ivacantidad = new PdfPCell(new Paragraph("$" + totales[1], f));
        cantidades.addCell(ivacantidad);
        PdfPCell celdatotal = new PdfPCell(new Paragraph("Total", f));
        cantidades.addCell(celdatotal);
        PdfPCell totalcantidad = new PdfPCell(new Paragraph("$" + totales[2], f));
        cantidades.addCell(totalcantidad);
        PdfPCell celdacantidades = new PdfPCell(cantidades);
        vacio = new PdfPCell(new Paragraph("!Que tenga un buen da!"));
        vacio.setColspan(1);
        vacio.setBorder(Rectangle.RIGHT | Rectangle.TOP | Rectangle.LEFT | Rectangle.BOTTOM);
        tablafooter.addCell(vacio);
        tablafooter.addCell(celdacantidades);
        return tablafooter;
    }

    PdfPTable tablaHeader() throws IOException, BadElementException {
        PdfPTable tablaheader = new PdfPTable(4);
        tablaheader.setTotalWidth(600);
        BasededatosManager bd = new BasededatosManager();
        try {
            ResultSet consulta = bd.consultar("SELECT logoempresa FROM configuracion");
            byte[] arreglo = null;
            while (consulta.next()) {
                arreglo = consulta.getBytes("logoempresa");
            }
            Image logo = Image.getInstance(arreglo);
            logo.scalePercent(15);
            PdfPCell celdalogo = new PdfPCell(logo);
            celdalogo.setBorderColor(BaseColor.WHITE);
            celdalogo.setColspan(4);
            celdalogo.setHorizontalAlignment(Element.ALIGN_CENTER);
            tablaheader.addCell(celdalogo);
        } catch (SQLException ex) {
            Logger.getLogger(PedidoPDF.class.getName()).log(Level.SEVERE, null, ex);
        }
        Font a = new Font(FontFamily.HELVETICA, 18, Font.BOLD, BaseColor.BLACK);
        PdfPCell celdatitulo = new PdfPCell(new Paragraph("PEDIDO PIZZAS", a));
        celdatitulo.setColspan(2);
        celdatitulo.setBorderColor(BaseColor.WHITE);
        tablaheader.addCell(celdatitulo);
        PdfPCell celdafecha = new PdfPCell(new Paragraph("Fecha: " + LocalDate.now(), f));
        celdafecha.setBorderColor(BaseColor.WHITE);
        tablaheader.addCell(celdafecha);
        PdfPCell celdapedido = new PdfPCell(new Paragraph("N Pedido: " + idpedido, f));
        celdapedido.setBorderColor(BaseColor.WHITE);
        tablaheader.addCell(celdapedido);
        vacio.setColspan(4);
        vacio.setBorder(Rectangle.BOTTOM);
        tablaheader.addCell(vacio);
        return tablaheader;
    }

    public void ejecutarPDF() {
        String d = "";
        try {

            if ("/".equals(directorio.substring(0, 1))) {
                Runtime.getRuntime().exec("evince " + directorio);
            }
            if (":".equals(directorio.substring(1, 2))) {
                char signo = (char) 92;
                String[] arreglo = directorio.split("\\\\");
                for (int a = 0; a < arreglo.length; a++) {
                    d = d + arreglo[a] + "\\\\\\\\";
                }
                Desktop.getDesktop().open(new File(d));
            }
        } catch (IOException ex) {
            Logger.getLogger(Repartidor.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static void main(String a[]) {
        try {
            FileChuser dir = new FileChuser();
            String direc = dir.obtenerDirectorio("compra.pdf");
            TicketPDF ticket = new TicketPDF("4", 8, direc);
        } catch (DocumentException ex) {
            Logger.getLogger(TicketPDF.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(TicketPDF.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}