jm.seg.frmGeneraPdf.java Source code

Java tutorial

Introduction

Here is the source code for jm.seg.frmGeneraPdf.java

Source

/**
* @version 1.0
* @package FACTURAPYMES.
* @author Jorge Washington Mueses Cevallos.
* @copyright Copyright (C) 2010 por Jorge Mueses. Todos los derechos reservados.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL.
* FACTURAPYMES! es un software de libre distribucin, que puede ser
* copiado y distribuido bajo los trminos de la Licencia Pblica
* General GNU, de acuerdo con la publicada por la Free Software
* Foundation, versin 2 de la licencia o cualquier versin posterior.
*/

package jm.seg;

import java.io.*;

import javax.servlet.*;
import javax.servlet.http.*;

import com.lowagie.text.pdf.*;
import com.lowagie.text.*;

import java.sql.ResultSet;
import java.util.ArrayList;
import jm.web.Addons;
import jm.web.Xml;

/**
 *
 * @author Jorge
 */

public class frmGeneraPdf {

    public void GenerarFactura(String ruta_xml, String dir, String _archivoNombre) throws FileNotFoundException {
        File _archivo = null;
        Xml xml = new Xml(ruta_xml + ".xml");

        String numeroAutorizacion = xml.getValor("numeroAutorizacion");
        String fechaAutorizacion = xml.getValor("fechaAutorizacion");

        String doc = xml.getValor("comprobante");
        try {

            _archivo = new File(dir, _archivoNombre + "xml.xml");
            if (!_archivo.exists()) {
                //byte[] bytes = (res.getString(campoBytea)!=null) ? res.getBytes(campoBytea) : null;
                RandomAccessFile archivo = new RandomAccessFile(dir + _archivoNombre + "xml.xml", "rw");
                archivo.writeBytes(doc);
                archivo.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        //infoTributaria
        Xml xml2 = new Xml(ruta_xml + "xml.xml");
        String ambiente = xml2.getValor("ambiente");
        String tipoEmision = xml2.getValor("tipoEmision");
        String razonSocial = xml2.getValor("razonSocial");
        String nombreComercial = xml2.getValor("nombreComercial");
        String ruc = xml2.getValor("ruc");
        String claveAcceso = xml2.getValor("claveAcceso");
        String codDoc = xml2.getValor("codDoc");
        String numFac = xml2.getValor("estab") + "-" + xml2.getValor("ptoEmi") + "-" + xml2.getValor("secuencial");
        String dirMatriz = xml2.getValor("dirMatriz");

        String EMAIL = "";
        String DIRECCION = "";
        String ARCOTEL = "";

        int limiteAdi = xml2.getNumNodos("campoAdicional");
        try {
            //Campos Adicionales
            for (int i = 0; i < limiteAdi; i++) {
                if (xml2.getAtributo("campoAdicional", i, "nombre").toUpperCase().compareTo("EMAIL") == 0) {
                    EMAIL = xml2.getValor("campoAdicional", i);
                }
                if (xml2.getAtributo("campoAdicional", i, "nombre").toUpperCase().compareTo("DIRECCION") == 0) {
                    DIRECCION = xml2.getValor("campoAdicional", i);
                }
                if (xml2.getAtributo("campoAdicional", i, "nombre").toUpperCase().compareTo("ARCOTEL") == 0) {
                    ARCOTEL = xml2.getValor("campoAdicional", i);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        if (ambiente.compareTo("1") == 0) {
            ambiente = "Pruebas";
        }
        if (ambiente.compareTo("2") == 0) {
            ambiente = "Produccin";
        }
        if (tipoEmision.compareTo("1") == 0) {
            tipoEmision = "Normal";
        }
        if (tipoEmision.compareTo("2") == 0) {
            tipoEmision = "Contingencia";
        }

        if (codDoc.compareTo("01") == 0) {
            //infoFactura
            String fechaEmision = xml2.getValor("fechaEmision");
            String dirEstablecimiento = xml2.getValor("dirEstablecimiento");
            String contribuyenteEspecial = xml2.getValor("contribuyenteEspecial");
            String obligadoContabilidad = xml2.getValor("obligadoContabilidad");
            String razonSocialComprador = xml2.getValor("razonSocialComprador");
            String identificacionComprador = xml2.getValor("identificacionComprador");
            String totalSinImpuestos = xml2.getValor("totalSinImpuestos");
            String totalDescuento = xml2.getValor("totalDescuento");
            String codigoPorcentaje = xml2.getValor("codigoPorcentaje");//0% 0 >>12% 2>>mo objeto de impuesto 6>>Excento al iva 7
            String baseImponible = xml2.getValor("baseImponible"); //Depende del codigo porcentaje
            String valor = xml2.getValor("valor");// va en el Iva 12%
            String importeTotal = xml2.getValor("importeTotal");//Sumatoria de todo

            //detalles
            int limite = xml2.getNumNodos("detalle");
            String[][] array = new String[limite][6];
            for (int i = 0; i < limite; i++) {
                array[i][0] = xml2.getValor("codigoPrincipal");
                array[i][1] = xml2.getValor("descripcion");
                array[i][2] = xml2.getValor("cantidad");
                array[i][3] = xml2.getValor("precioUnitario");
                array[i][4] = xml2.getValor("descuento");
                array[i][5] = xml2.getValor("precioTotalSinImpuesto");
            }

            /* inicio PDF */
            Document pdf = new Document(PageSize.A4);// paso 1
            pdf.setMargins(-35, -45, 40, 10); /*Izquierda, derecha, tope, pie */

            try {
                PdfWriter writer = PdfWriter.getInstance(pdf, new FileOutputStream(dir + claveAcceso + ".pdf"));
                pdf.open();

                //pdf.open(); // paso 3
                // Para enviar a la impresora automticamente.
                //writer.addJavaScript("this.print(false);", false);

                /* todo el cuerpo del doc es el paso 4 */
                //PdfPTable tbl_titulo = new PdfPTable(1);
                PdfPTable tbl_titulo = new PdfPTable(new float[] { 49f, 2f, 49f });
                PdfPTable tbl_1 = new PdfPTable(new float[] { 37f, 63f });
                PdfPTable tbl_2 = new PdfPTable(1);
                //titulos izquierda
                tbl_1.addCell(Addons.setLogo(dir + "logo.jpg", 250, 83, Element.ALIGN_CENTER));//ancho,alto
                tbl_1.addCell(
                        Addons.setCeldaPDF(" ", Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_LEFT, 0, 5, 2));
                tbl_1.addCell(Addons.setCeldaPDF(razonSocial + " '" + nombreComercial + "' ", Font.STRIKETHRU, 10,
                        Font.NORMAL, Element.ALIGN_CENTER, 0, 8, 2));
                tbl_1.addCell(Addons.setCeldaPDF("Direccin Matriz: ", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5, 0));
                tbl_1.addCell(Addons.setCeldaPDF(dirMatriz, Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_LEFT, 0,
                        5, 0));
                tbl_1.addCell(Addons.setCeldaPDF("Direccin Sucursal: ", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5, 0));
                tbl_1.addCell(Addons.setCeldaPDF(dirEstablecimiento, Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5, 0));
                tbl_1.addCell(Addons.setCeldaPDF("Contribuyente Especial Nro. " + contribuyenteEspecial,
                        Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_LEFT, 0, 5, 2));
                tbl_1.addCell(Addons.setCeldaPDF("OBLIGADO A LLEVAR CONTABILIDAD: " + obligadoContabilidad,
                        Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_LEFT, 0, 5, 2));

                //Titulos derecha
                tbl_2.addCell(Addons.setCeldaPDF("R.U.C: " + ruc, Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setCeldaPDF("F A C T U R A ", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setCeldaPDF("No. " + numFac, Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setCeldaPDF("NMERO DE AUTORIZACIN", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setCeldaPDF(numeroAutorizacion, Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setCeldaPDF("FECHA Y HORA DE AUTORIZACION", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setCeldaPDF(fechaAutorizacion, Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setCeldaPDF("AMBIENTE: " + ambiente, Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setCeldaPDF("EMISIN:  " + tipoEmision, Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setCeldaPDF("CLAVE DE ACCESO", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setBarCode(this.getBarcode(writer, claveAcceso)));//ancho,alto

                tbl_titulo.addCell(Addons.setCeldaPDF(tbl_1, 0, 1));
                tbl_titulo.addCell(Addons.setCeldaPDF(" ", Font.TIMES_ROMAN, 1, Font.NORMAL, 0, 0));
                tbl_titulo.addCell(Addons.setCeldaPDF(tbl_2, 0, 1));
                tbl_titulo.addCell(Addons.setFilaBlanco(3, 20));
                pdf.add(tbl_titulo);

                //Informacion Cliente
                PdfPTable tbl_info = new PdfPTable(1);
                PdfPTable tbl_info1 = new PdfPTable(new float[] { 32f, 43f, 25f });
                tbl_info1.addCell(Addons.setCeldaPDF("Razn Social / Nombres y Apellidos: ", Font.STRIKETHRU, 10,
                        Font.NORMAL, Element.ALIGN_LEFT, 0, 8));
                tbl_info1.addCell(Addons.setCeldaPDF(razonSocialComprador, Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 8));
                tbl_info1.addCell(Addons.setCeldaPDF("RUC/CI: " + identificacionComprador, Font.STRIKETHRU, 10,
                        Font.NORMAL, Element.ALIGN_LEFT, 0, 8));
                tbl_info1.addCell(Addons.setCeldaPDF("Fecha de emisin:    " + fechaEmision, Font.STRIKETHRU, 10,
                        Font.NORMAL, Element.ALIGN_LEFT, 0, 8, 1));
                tbl_info1.addCell(Addons.setCeldaPDF("DIRECCION: " + DIRECCION, Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 8, 2));
                tbl_info.addCell(Addons.setCeldaPDF(tbl_info1, 0, 1));
                tbl_info.addCell(Addons.setFilaBlanco(3, 20));
                pdf.add(tbl_info);

                //Detalles
                PdfPTable tbl_det = new PdfPTable(1);
                PdfPTable tbl_det1 = new PdfPTable(new float[] { 10f, 10f, 50f, 10f, 10f, 10f });

                tbl_det1.addCell(Addons.setCeldaPDF("Cod. Principal", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_CENTER, 1, 5));
                tbl_det1.addCell(
                        Addons.setCeldaPDF("Cant.", Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_CENTER, 1, 5));
                tbl_det1.addCell(Addons.setCeldaPDF("Descripcin", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_CENTER, 1, 5));
                tbl_det1.addCell(Addons.setCeldaPDF("Precio Unitario", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_CENTER, 1, 5));
                tbl_det1.addCell(
                        Addons.setCeldaPDF("Desc.", Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_CENTER, 1, 5));
                tbl_det1.addCell(
                        Addons.setCeldaPDF("Total", Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_CENTER, 1, 5));
                for (int i = 0; i < limite; i++) {
                    tbl_det1.addCell(Addons.setCeldaPDF(array[i][0], Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_LEFT, 1, 5));
                    tbl_det1.addCell(Addons.setCeldaPDF(array[i][2], Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_LEFT, 1, 5));
                    tbl_det1.addCell(Addons.setCeldaPDF(array[i][1], Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_LEFT, 1, 5));
                    tbl_det1.addCell(Addons.setCeldaPDF(array[i][3], Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 1, 5));
                    tbl_det1.addCell(Addons.setCeldaPDF(array[i][4], Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 1, 5));
                    tbl_det1.addCell(Addons.setCeldaPDF(array[i][5], Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 1, 5));
                }
                tbl_det.addCell(Addons.setCeldaPDF(tbl_det1, 0, 1));
                tbl_det.addCell(Addons.setFilaBlanco(6, 20));
                pdf.add(tbl_det);

                //Informacion Adicional
                PdfPTable tbl_info_ad = new PdfPTable(new float[] { 40f, 10f, 50f });
                PdfPTable tbl_info_ad1 = new PdfPTable(new float[] { 30f, 70f });
                PdfPTable tbl_info_ad2 = new PdfPTable(new float[] { 70f, 30f });
                //titulos izquierda
                tbl_info_ad1.addCell(Addons.setCeldaPDF("Informacin Adicional", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_CENTER, 0, 5, 2));
                tbl_info_ad1.addCell(Addons.setCeldaPDF("Contacto: ", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 8, 0));
                tbl_info_ad1.addCell(Addons.setCeldaPDF("062609177 / 062610330", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 8, 0));
                tbl_info_ad1.addCell(Addons.setCeldaPDF("Email: ", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 8, 0));
                tbl_info_ad1.addCell(
                        Addons.setCeldaPDF(EMAIL, Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_LEFT, 0, 8, 0));
                tbl_info_ad1.addCell(Addons.setCeldaPDF("Sitio Web:", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 8, 0));
                tbl_info_ad1.addCell(Addons.setCeldaPDF("www.saitel.ec", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 8, 0));
                tbl_info_ad1.addCell(
                        Addons.setCeldaPDF(ARCOTEL, Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_LEFT, 0, 8, 2));

                //Titulos derecha
                if (codigoPorcentaje.compareTo("0") == 0) {
                    tbl_info_ad2.addCell(Addons.setCeldaPDF("SUBTOTAL 12% ", Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_LEFT, 0, 5, 2));
                    tbl_info_ad2.addCell(Addons.setCeldaPDF("0.00", Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 0, 5, 2));

                    tbl_info_ad2.addCell(Addons.setCeldaPDF("SUBTOTAL 0% ", Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_CENTER, 0, 8, 0));
                    tbl_info_ad2.addCell(Addons.setCeldaPDF(baseImponible, Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 0, 5, 2));

                    tbl_info_ad2.addCell(Addons.setCeldaPDF("SUBTOTAL No objeto de IVA", Font.STRIKETHRU, 10,
                            Font.NORMAL, Element.ALIGN_CENTER, 0, 8, 0));
                    tbl_info_ad2.addCell(Addons.setCeldaPDF("0.00", Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 0, 5, 2));

                    tbl_info_ad2.addCell(Addons.setCeldaPDF("SUBTOTAL SIN IMPUESTOS", Font.STRIKETHRU, 10,
                            Font.NORMAL, Element.ALIGN_CENTER, 0, 8, 0));
                    tbl_info_ad2.addCell(Addons.setCeldaPDF(totalSinImpuestos, Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 0, 5, 2));

                    tbl_info_ad2.addCell(Addons.setCeldaPDF("SUBTOTAL Exento de IVA", Font.STRIKETHRU, 10,
                            Font.NORMAL, Element.ALIGN_CENTER, 0, 8, 0));
                    tbl_info_ad2.addCell(Addons.setCeldaPDF(valor, Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 0, 5, 2));

                    tbl_info_ad2.addCell(Addons.setCeldaPDF("DESCUENTO", Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_CENTER, 0, 8, 0));
                    tbl_info_ad2.addCell(Addons.setCeldaPDF(totalDescuento, Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 0, 5, 2));

                    tbl_info_ad2.addCell(Addons.setCeldaPDF("IVA 12%", Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_CENTER, 0, 8, 0));
                    tbl_info_ad2.addCell(Addons.setCeldaPDF("0.00", Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 0, 5, 2));
                }

                if (codigoPorcentaje.compareTo("2") == 0) {
                    tbl_info_ad2.addCell(Addons.setCeldaPDF("SUBTOTAL 12% ", Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_LEFT, 1, 5));
                    tbl_info_ad2.addCell(Addons.setCeldaPDF(baseImponible, Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 1, 5));

                    tbl_info_ad2.addCell(Addons.setCeldaPDF("SUBTOTAL 0% ", Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_LEFT, 1, 5));
                    tbl_info_ad2.addCell(Addons.setCeldaPDF("0.00", Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 1, 5));

                    tbl_info_ad2.addCell(Addons.setCeldaPDF("SUBTOTAL No objeto de IVA", Font.STRIKETHRU, 10,
                            Font.NORMAL, Element.ALIGN_LEFT, 1, 5));
                    tbl_info_ad2.addCell(Addons.setCeldaPDF("0.00", Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 1, 5));

                    tbl_info_ad2.addCell(Addons.setCeldaPDF("SUBTOTAL SIN IMPUESTOS", Font.STRIKETHRU, 10,
                            Font.NORMAL, Element.ALIGN_LEFT, 1, 5));
                    tbl_info_ad2.addCell(Addons.setCeldaPDF(totalSinImpuestos, Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 1, 5));

                    tbl_info_ad2.addCell(Addons.setCeldaPDF("SUBTOTAL Exento de IVA", Font.STRIKETHRU, 10,
                            Font.NORMAL, Element.ALIGN_LEFT, 1, 5));
                    tbl_info_ad2.addCell(Addons.setCeldaPDF("0.00", Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 1, 5));

                    tbl_info_ad2.addCell(Addons.setCeldaPDF("DESCUENTO", Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_LEFT, 1, 5));
                    tbl_info_ad2.addCell(Addons.setCeldaPDF(totalDescuento, Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 1, 5));

                    tbl_info_ad2.addCell(Addons.setCeldaPDF("IVA 12%", Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_LEFT, 1, 5));
                    tbl_info_ad2.addCell(
                            Addons.setCeldaPDF(valor, Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_RIGHT, 1, 5));
                }

                tbl_info_ad2.addCell(Addons.setCeldaPDF("VALOR TOTAL", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 1, 5));
                tbl_info_ad2.addCell(Addons.setCeldaPDF(Addons.redondear(importeTotal), Font.STRIKETHRU, 10,
                        Font.NORMAL, Element.ALIGN_RIGHT, 1, 5));

                tbl_info_ad.addCell(Addons.setCeldaPDF(tbl_info_ad1, 0, 1));
                tbl_info_ad.addCell(Addons.setCeldaPDF(" ", Font.TIMES_ROMAN, 1, Font.NORMAL, 0, 0));
                tbl_info_ad.addCell(Addons.setCeldaPDF(tbl_info_ad2, 0, 1));
                pdf.add(tbl_info_ad);

            } catch (IllegalStateException ie) {
                ie.printStackTrace();
            } catch (DocumentException e) {
                e.printStackTrace();
            } finally {
            }
            pdf.close(); // paso 5
            /* fin PDF */
        }

        //Nota de credito
        if (codDoc.compareTo("04") == 0) {
            //infoFactura
            String fechaEmision = xml2.getValor("fechaEmision");
            String dirEstablecimiento = xml2.getValor("dirEstablecimiento");
            String razonSocialComprador = xml2.getValor("razonSocialComprador");
            String identificacionComprador = xml2.getValor("identificacionComprador");
            String contribuyenteEspecial = xml2.getValor("contribuyenteEspecial");
            String obligadoContabilidad = xml2.getValor("obligadoContabilidad");
            String codDocModificado = xml2.getValor("codDocModificado");
            String numDocModificado = xml2.getValor("numDocModificado");
            String fechaEmisionDocSustento = xml2.getValor("fechaEmisionDocSustento");
            String motivo = xml2.getValor("motivo");
            String totalSinImpuestos = xml2.getValor("totalSinImpuestos");

            if (codDocModificado.compareTo("01") == 0) {
                codDocModificado = "FACTURA";
            }
            if (codDocModificado.compareTo("04") == 0) {
                codDocModificado = "NOTA DE CRDITO";
            }
            if (codDocModificado.compareTo("05") == 0) {
                codDocModificado = "NOTA DE DBITO";
            }
            if (codDocModificado.compareTo("06") == 0) {
                codDocModificado = "GU?A DE REMISION";
            }
            if (codDocModificado.compareTo("07") == 0) {
                codDocModificado = "COMPROBANTE DE RETENCIN";
            }

            String codigoPorcentaje = xml2.getValor("codigoPorcentaje");//0% 0 >>12% 2>>mo objeto de impuesto 6>>Excento al iva 7
            String baseImponible = xml2.getValor("baseImponible"); //Depende del codigo porcentaje
            String valor = xml2.getValor("valor");// va en el Iva 12%

            //detalles
            int limite = xml2.getNumNodos("detalle");
            String[][] array = new String[limite][6];
            for (int i = 0; i < limite; i++) {
                array[i][0] = xml2.getValor("codigoPrincipal");
                array[i][1] = xml2.getValor("descripcion");
                array[i][2] = xml2.getValor("cantidad");
                array[i][3] = xml2.getValor("precioUnitario");
                array[i][4] = xml2.getValor("descuento");
                array[i][5] = xml2.getValor("precioTotalSinImpuesto");
            }

            /* inicio PDF */
            Document pdf = new Document(PageSize.A4);// paso 1
            pdf.setMargins(-35, -45, 40, 10); /*Izquierda, derecha, tope, pie */

            try {
                PdfWriter writer = PdfWriter.getInstance(pdf, new FileOutputStream(dir + claveAcceso + ".pdf"));
                pdf.open();

                //pdf.open(); // paso 3
                // Para enviar a la impresora automticamente.
                //writer.addJavaScript("this.print(false);", false);

                /* todo el cuerpo del doc es el paso 4 */
                //PdfPTable tbl_titulo = new PdfPTable(1);
                PdfPTable tbl_titulo = new PdfPTable(new float[] { 49f, 2f, 49f });
                PdfPTable tbl_1 = new PdfPTable(new float[] { 37f, 63f });
                PdfPTable tbl_2 = new PdfPTable(1);
                //titulos izquierda
                tbl_1.addCell(Addons.setLogo(dir + "logo.jpg", 250, 83, Element.ALIGN_CENTER));//ancho,alto
                tbl_1.addCell(
                        Addons.setCeldaPDF(" ", Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_LEFT, 0, 5, 2));
                tbl_1.addCell(Addons.setCeldaPDF(razonSocial + " '" + nombreComercial + "' ", Font.STRIKETHRU, 10,
                        Font.NORMAL, Element.ALIGN_CENTER, 0, 8, 2));
                tbl_1.addCell(Addons.setCeldaPDF("Direccin Matriz: ", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5, 0));
                tbl_1.addCell(Addons.setCeldaPDF(dirMatriz, Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_LEFT, 0,
                        5, 0));
                tbl_1.addCell(Addons.setCeldaPDF("Direccin Sucursal: ", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5, 0));
                tbl_1.addCell(Addons.setCeldaPDF(dirEstablecimiento, Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5, 0));
                tbl_1.addCell(Addons.setCeldaPDF("Contribuyente Especial Nro. " + contribuyenteEspecial,
                        Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_LEFT, 0, 5, 2));
                tbl_1.addCell(Addons.setCeldaPDF("OBLIGADO A LLEVAR CONTABILIDAD: " + obligadoContabilidad,
                        Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_LEFT, 0, 5, 2));

                //Titulos derecha
                tbl_2.addCell(Addons.setCeldaPDF("R.U.C: " + ruc, Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setCeldaPDF("F A C T U R A ", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setCeldaPDF("No. " + numFac, Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setCeldaPDF("NMERO DE AUTORIZACIN", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setCeldaPDF(numeroAutorizacion, Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setCeldaPDF("FECHA Y HORA DE AUTORIZACIN", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setCeldaPDF(fechaAutorizacion, Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setCeldaPDF("AMBIENTE: " + ambiente, Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setCeldaPDF("EMISIN:  " + tipoEmision, Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setCeldaPDF("CLAVE DE ACCESO", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setBarCode(this.getBarcode(writer, claveAcceso)));//ancho,alto

                tbl_titulo.addCell(Addons.setCeldaPDF(tbl_1, 0, 1));
                tbl_titulo.addCell(Addons.setCeldaPDF(" ", Font.TIMES_ROMAN, 1, Font.NORMAL, 0, 0));
                tbl_titulo.addCell(Addons.setCeldaPDF(tbl_2, 0, 1));
                tbl_titulo.addCell(Addons.setFilaBlanco(3, 20));
                pdf.add(tbl_titulo);

                //Informacion Cliente
                PdfPTable tbl_info = new PdfPTable(1);
                PdfPTable tbl_info1 = new PdfPTable(new float[] { 32f, 43f, 25f });
                tbl_info1.addCell(Addons.setCeldaPDF("Razn Social / Nombres y Apellidos: ", Font.STRIKETHRU, 10,
                        Font.NORMAL, Element.ALIGN_LEFT, 0, 5));
                tbl_info1.addCell(Addons.setCeldaPDF(razonSocialComprador, Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_info1.addCell(Addons.setCeldaPDF("RUC/CI: " + identificacionComprador, Font.STRIKETHRU, 10,
                        Font.NORMAL, Element.ALIGN_LEFT, 0, 5));
                tbl_info1.addCell(Addons.setCeldaPDF("Fecha de emisin:" + fechaEmision, Font.STRIKETHRU, 10,
                        Font.NORMAL, Element.ALIGN_LEFT, 0, 5, 3));

                tbl_info1.addCell(Addons.setCeldaPDF(
                        "-------------------------------------------------------------------------------------------------------------",
                        Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_CENTER, 0, 5, 3));
                tbl_info1.addCell(Addons.setCeldaPDF("Comprobante que se Modifica:", Font.STRIKETHRU, 10,
                        Font.NORMAL, Element.ALIGN_LEFT, 0, 5));
                tbl_info1.addCell(Addons.setCeldaPDF(codDocModificado + ": " + numDocModificado, Font.STRIKETHRU,
                        10, Font.NORMAL, Element.ALIGN_LEFT, 0, 5, 2));
                tbl_info1.addCell(Addons.setCeldaPDF("Fecha emisin (Comprobante a Modificar)", Font.STRIKETHRU,
                        10, Font.NORMAL, Element.ALIGN_LEFT, 0, 5));
                tbl_info1.addCell(Addons.setCeldaPDF(fechaEmisionDocSustento, Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5, 2));
                tbl_info1.addCell(Addons.setCeldaPDF("Razn de Modificacin: ", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_info1.addCell(
                        Addons.setCeldaPDF(motivo, Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_LEFT, 0, 5, 2));
                tbl_info.addCell(Addons.setCeldaPDF(tbl_info1, 0, 1));
                tbl_info.addCell(Addons.setFilaBlanco(3, 20));
                pdf.add(tbl_info);

                //Detalles
                PdfPTable tbl_det = new PdfPTable(1);
                PdfPTable tbl_det1 = new PdfPTable(new float[] { 10f, 10f, 50f, 10f, 10f, 10f });

                tbl_det1.addCell(Addons.setCeldaPDF("Cod. Principal", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_CENTER, 1, 5));
                tbl_det1.addCell(
                        Addons.setCeldaPDF("Cant.", Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_CENTER, 1, 5));
                tbl_det1.addCell(Addons.setCeldaPDF("Descripcin", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_CENTER, 1, 5));
                tbl_det1.addCell(Addons.setCeldaPDF("Precio Unitario", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_CENTER, 1, 5));
                tbl_det1.addCell(
                        Addons.setCeldaPDF("Desc.", Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_CENTER, 1, 5));
                tbl_det1.addCell(
                        Addons.setCeldaPDF("Total", Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_CENTER, 1, 5));
                for (int i = 0; i < limite; i++) {
                    tbl_det1.addCell(Addons.setCeldaPDF(array[i][0], Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_LEFT, 1, 5));
                    tbl_det1.addCell(Addons.setCeldaPDF(array[i][2], Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_LEFT, 1, 5));
                    tbl_det1.addCell(Addons.setCeldaPDF(array[i][1], Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_LEFT, 1, 5));
                    tbl_det1.addCell(Addons.setCeldaPDF(array[i][3], Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 1, 5));
                    tbl_det1.addCell(Addons.setCeldaPDF(array[i][4], Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 1, 5));
                    tbl_det1.addCell(Addons.setCeldaPDF(array[i][5], Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 1, 5));
                }
                tbl_det.addCell(Addons.setCeldaPDF(tbl_det1, 0, 1));
                tbl_det.addCell(Addons.setFilaBlanco(6, 20));
                pdf.add(tbl_det);

                //Informacion Adicional
                PdfPTable tbl_info_ad = new PdfPTable(new float[] { 40f, 10f, 50f });
                PdfPTable tbl_info_ad1 = new PdfPTable(new float[] { 30f, 70f });
                PdfPTable tbl_info_ad2 = new PdfPTable(new float[] { 70f, 30f });
                //titulos izquierda
                tbl_info_ad1.addCell(Addons.setCeldaPDF("Informacin Adicional", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_CENTER, 0, 5, 2));
                tbl_info_ad1.addCell(Addons.setCeldaPDF("Contacto: ", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 8, 0));
                tbl_info_ad1.addCell(Addons.setCeldaPDF("062609177 / 062610330", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 8, 0));
                tbl_info_ad1.addCell(Addons.setCeldaPDF("Email: ", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 8, 0));
                tbl_info_ad1.addCell(
                        Addons.setCeldaPDF(EMAIL, Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_LEFT, 0, 8, 0));
                tbl_info_ad1.addCell(Addons.setCeldaPDF("Sitio Web:", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 8, 0));
                tbl_info_ad1.addCell(Addons.setCeldaPDF("www.saitel.ec", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 8, 0));
                tbl_info_ad1.addCell(
                        Addons.setCeldaPDF(ARCOTEL, Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_LEFT, 0, 8, 2));

                //Titulos derecha
                if (codigoPorcentaje.compareTo("0") == 0) {
                    tbl_info_ad2.addCell(Addons.setCeldaPDF("SUBTOTAL 12% ", Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_LEFT, 0, 5, 2));
                    tbl_info_ad2.addCell(Addons.setCeldaPDF("0.00", Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 0, 5, 2));

                    tbl_info_ad2.addCell(Addons.setCeldaPDF("SUBTOTAL 0% ", Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_CENTER, 0, 8, 0));
                    tbl_info_ad2.addCell(Addons.setCeldaPDF(baseImponible, Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 0, 5, 2));

                    tbl_info_ad2.addCell(Addons.setCeldaPDF("SUBTOTAL No objeto de IVA", Font.STRIKETHRU, 10,
                            Font.NORMAL, Element.ALIGN_CENTER, 0, 8, 0));
                    tbl_info_ad2.addCell(Addons.setCeldaPDF("0.00", Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 0, 5, 2));

                    tbl_info_ad2.addCell(Addons.setCeldaPDF("SUBTOTAL SIN IMPUESTOS", Font.STRIKETHRU, 10,
                            Font.NORMAL, Element.ALIGN_CENTER, 0, 8, 0));
                    tbl_info_ad2.addCell(Addons.setCeldaPDF(totalSinImpuestos, Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 0, 5, 2));

                    tbl_info_ad2.addCell(Addons.setCeldaPDF("SUBTOTAL Exento de IVA", Font.STRIKETHRU, 10,
                            Font.NORMAL, Element.ALIGN_CENTER, 0, 8, 0));
                    tbl_info_ad2.addCell(Addons.setCeldaPDF(valor, Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 0, 5, 2));

                    tbl_info_ad2.addCell(Addons.setCeldaPDF("IVA 12%", Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_CENTER, 0, 8, 0));
                    tbl_info_ad2.addCell(Addons.setCeldaPDF("0.00", Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 0, 5, 2));
                }

                else {
                    tbl_info_ad2.addCell(Addons.setCeldaPDF("SUBTOTAL 12% ", Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_LEFT, 1, 5));
                    tbl_info_ad2.addCell(Addons.setCeldaPDF(baseImponible, Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 1, 5));

                    tbl_info_ad2.addCell(Addons.setCeldaPDF("SUBTOTAL 0% ", Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_LEFT, 1, 5));
                    tbl_info_ad2.addCell(Addons.setCeldaPDF("0.00", Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 1, 5));

                    tbl_info_ad2.addCell(Addons.setCeldaPDF("SUBTOTAL No objeto de IVA", Font.STRIKETHRU, 10,
                            Font.NORMAL, Element.ALIGN_LEFT, 1, 5));
                    tbl_info_ad2.addCell(Addons.setCeldaPDF("0.00", Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 1, 5));

                    tbl_info_ad2.addCell(Addons.setCeldaPDF("SUBTOTAL SIN IMPUESTOS", Font.STRIKETHRU, 10,
                            Font.NORMAL, Element.ALIGN_LEFT, 1, 5));
                    tbl_info_ad2.addCell(Addons.setCeldaPDF(totalSinImpuestos, Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 1, 5));

                    tbl_info_ad2.addCell(Addons.setCeldaPDF("SUBTOTAL Exento de IVA", Font.STRIKETHRU, 10,
                            Font.NORMAL, Element.ALIGN_LEFT, 1, 5));
                    tbl_info_ad2.addCell(Addons.setCeldaPDF("0.00", Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_RIGHT, 1, 5));

                    tbl_info_ad2.addCell(Addons.setCeldaPDF("IVA 12%", Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_LEFT, 1, 5));
                    tbl_info_ad2.addCell(
                            Addons.setCeldaPDF(valor, Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_RIGHT, 1, 5));
                }

                tbl_info_ad.addCell(Addons.setCeldaPDF(tbl_info_ad1, 0, 1));
                tbl_info_ad.addCell(Addons.setCeldaPDF(" ", Font.TIMES_ROMAN, 1, Font.NORMAL, 0, 0));
                tbl_info_ad.addCell(Addons.setCeldaPDF(tbl_info_ad2, 0, 1));
                pdf.add(tbl_info_ad);

            } catch (IllegalStateException ie) {
                ie.printStackTrace();
            } catch (DocumentException e) {
                e.printStackTrace();
            } finally {
            }
            pdf.close(); // paso 5
            /* fin PDF */
        }

        //Comprobante de retencion
        if (codDoc.compareTo("07") == 0) {
            //infoCompRetencion
            String fechaEmision = xml2.getValor("fechaEmision");
            String dirEstablecimiento = xml2.getValor("dirEstablecimiento");
            String contribuyenteEspecial = xml2.getValor("contribuyenteEspecial");
            String obligadoContabilidad = xml2.getValor("obligadoContabilidad");
            String tipoIdentificacionSujetoRetenido = xml2.getValor("tipoIdentificacionSujetoRetenido");
            String razonSocialSujetoRetenido = xml2.getValor("razonSocialSujetoRetenido");
            String identificacionSujetoRetenido = xml2.getValor("identificacionSujetoRetenido");
            String periodoFiscal = xml2.getValor("periodoFiscal");

            //detalles
            int limite = xml2.getNumNodos("impuesto");
            String[][] array = new String[limite][7];
            for (int i = 0; i < limite; i++) {
                array[i][0] = xml2.getValor("codigo", i);
                array[i][1] = xml2.getValor("codigoRetencion", i);
                array[i][2] = xml2.getValor("baseImponible", i);
                array[i][3] = xml2.getValor("porcentajeRetener", i);
                array[i][4] = xml2.getValor("valorRetenido", i);
                array[i][5] = xml2.getValor("codDocSustento", i);
                array[i][6] = xml2.getValor("numDocSustento", i);
            }

            /* inicio PDF */
            Document pdf = new Document(PageSize.A4);// paso 1
            pdf.setMargins(-35, -45, 40, 10); /*Izquierda, derecha, tope, pie */

            try {
                PdfWriter writer = PdfWriter.getInstance(pdf, new FileOutputStream(dir + claveAcceso + ".pdf"));
                pdf.open();

                //pdf.open(); // paso 3
                // Para enviar a la impresora automticamente.
                //writer.addJavaScript("this.print(false);", false);

                /* todo el cuerpo del doc es el paso 4 */
                //PdfPTable tbl_titulo = new PdfPTable(1);
                PdfPTable tbl_titulo = new PdfPTable(new float[] { 49f, 2f, 49f });
                PdfPTable tbl_1 = new PdfPTable(new float[] { 37f, 63f });
                PdfPTable tbl_2 = new PdfPTable(1);
                //titulos izquierda
                tbl_1.addCell(Addons.setLogo(dir + "logo.jpg", 250, 83, Element.ALIGN_CENTER));//ancho,alto
                tbl_1.addCell(
                        Addons.setCeldaPDF(" ", Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_LEFT, 0, 5, 2));
                tbl_1.addCell(Addons.setCeldaPDF(razonSocial + " '" + nombreComercial + "' ", Font.STRIKETHRU, 10,
                        Font.NORMAL, Element.ALIGN_CENTER, 0, 8, 2));
                tbl_1.addCell(Addons.setCeldaPDF("Direccin Matriz: ", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5, 0));
                tbl_1.addCell(Addons.setCeldaPDF(dirMatriz, Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_LEFT, 0,
                        5, 0));
                tbl_1.addCell(Addons.setCeldaPDF("Direccin Sucursal: ", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5, 0));
                tbl_1.addCell(Addons.setCeldaPDF(dirEstablecimiento, Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5, 0));
                tbl_1.addCell(Addons.setCeldaPDF("Contribuyente Especial Nro. " + contribuyenteEspecial,
                        Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_LEFT, 0, 5, 2));
                tbl_1.addCell(Addons.setCeldaPDF("OBLIGADO A LLEVAR CONTABILIDAD: " + obligadoContabilidad,
                        Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_LEFT, 0, 5, 2));

                //Titulos derecha
                tbl_2.addCell(Addons.setCeldaPDF("R.U.C: " + ruc, Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setCeldaPDF("COMPROBANTE DE RETENCIN", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setCeldaPDF("No. " + numFac, Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setCeldaPDF("NMERO DE AUTORIZACIN", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setCeldaPDF(numeroAutorizacion, Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setCeldaPDF("FECHA Y HORA DE AUTORIZACIN", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setCeldaPDF(fechaAutorizacion, Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setCeldaPDF("AMBIENTE: " + ambiente, Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setCeldaPDF("EMISIN:  " + tipoEmision, Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setCeldaPDF("CLAVE DE ACCESO", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 5));
                tbl_2.addCell(Addons.setBarCode(this.getBarcode(writer, claveAcceso)));//ancho,alto

                tbl_titulo.addCell(Addons.setCeldaPDF(tbl_1, 0, 1));
                tbl_titulo.addCell(Addons.setCeldaPDF(" ", Font.TIMES_ROMAN, 1, Font.NORMAL, 0, 0));
                tbl_titulo.addCell(Addons.setCeldaPDF(tbl_2, 0, 1));
                tbl_titulo.addCell(Addons.setFilaBlanco(3, 20));
                pdf.add(tbl_titulo);

                //Informacion Cliente
                PdfPTable tbl_info = new PdfPTable(1);
                PdfPTable tbl_info1 = new PdfPTable(new float[] { 32f, 43f, 25f });
                tbl_info1.addCell(Addons.setCeldaPDF("Razn Social / Nombres y Apellidos: ", Font.STRIKETHRU, 10,
                        Font.NORMAL, Element.ALIGN_LEFT, 0, 8));
                tbl_info1.addCell(Addons.setCeldaPDF(razonSocialSujetoRetenido, Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 8));
                tbl_info1.addCell(Addons.setCeldaPDF("RUC/CI: " + identificacionSujetoRetenido, Font.STRIKETHRU, 10,
                        Font.NORMAL, Element.ALIGN_LEFT, 0, 8));
                tbl_info1.addCell(Addons.setCeldaPDF("Fecha de emisin: " + fechaEmision, Font.STRIKETHRU, 10,
                        Font.NORMAL, Element.ALIGN_LEFT, 0, 8, 3));
                tbl_info.addCell(Addons.setCeldaPDF(tbl_info1, 0, 1));
                tbl_info.addCell(Addons.setFilaBlanco(3, 20));
                pdf.add(tbl_info);

                //Detalles
                PdfPTable tbl_det = new PdfPTable(1);
                PdfPTable tbl_det1 = new PdfPTable(new float[] { 14f, 18f, 12f, 10f, 13f, 10f, 13f, 10f });

                tbl_det1.addCell(Addons.setCeldaPDF("Comprobante", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 1, 5));
                tbl_det1.addCell(
                        Addons.setCeldaPDF("Nmero", Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_LEFT, 1, 5));
                tbl_det1.addCell(Addons.setCeldaPDF("Fecha Emisin", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 1, 5));
                tbl_det1.addCell(Addons.setCeldaPDF("Ejercicio Fiscal", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 1, 5));
                tbl_det1.addCell(Addons.setCeldaPDF("Base Imponible para la retencion", Font.STRIKETHRU, 8,
                        Font.NORMAL, Element.ALIGN_LEFT, 1, 5));
                tbl_det1.addCell(
                        Addons.setCeldaPDF("Impuesto", Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_LEFT, 1, 5));
                tbl_det1.addCell(Addons.setCeldaPDF("Porcentaje de Retencin", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 1, 5));
                tbl_det1.addCell(Addons.setCeldaPDF("Valor Retenido", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 1, 5));
                Double val_ret = 0.0;

                //detalles
                for (int i = 0; i < limite; i++) {
                    //Comprobante
                    if (array[i][5].compareTo("01") == 0) {
                        tbl_det1.addCell(Addons.setCeldaPDF("FACTURA", Font.STRIKETHRU, 10, Font.NORMAL,
                                Element.ALIGN_LEFT, 1, 5));
                    }
                    if (array[i][5].compareTo("04") == 0) {
                        tbl_det1.addCell(Addons.setCeldaPDF("NOTA DE CRDITO", Font.STRIKETHRU, 10, Font.NORMAL,
                                Element.ALIGN_LEFT, 1, 5));
                    }
                    if (array[i][5].compareTo("05") == 0) {
                        tbl_det1.addCell(Addons.setCeldaPDF("NOTA DE DBITO", Font.STRIKETHRU, 10, Font.NORMAL,
                                Element.ALIGN_LEFT, 1, 5));
                    }
                    if (array[i][5].compareTo("06") == 0) {
                        tbl_det1.addCell(Addons.setCeldaPDF("GU?A DE REMISION", Font.STRIKETHRU, 10, Font.NORMAL,
                                Element.ALIGN_LEFT, 1, 5));
                    }
                    if (array[i][5].compareTo("07") == 0) {
                        tbl_det1.addCell(Addons.setCeldaPDF("COMPROBANTE DE RETENCIN", Font.STRIKETHRU, 10,
                                Font.NORMAL, Element.ALIGN_LEFT, 1, 5));
                    }

                    //Nmero
                    tbl_det1.addCell(Addons.setCeldaPDF(array[i][6], Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_LEFT, 1, 5));

                    //Fecha Emisin
                    tbl_det1.addCell(Addons.setCeldaPDF(fechaEmision, Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_LEFT, 1, 5));

                    //Ejercicio Fiscal
                    tbl_det1.addCell(Addons.setCeldaPDF(periodoFiscal, Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_LEFT, 1, 5));

                    //Base Imponible para la retencion
                    tbl_det1.addCell(Addons.setCeldaPDF(array[i][2], Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_LEFT, 1, 5));

                    //Impuesto
                    if (array[i][0].compareTo("1") == 0) {
                        tbl_det1.addCell(Addons.setCeldaPDF("RENTA", Font.STRIKETHRU, 10, Font.NORMAL,
                                Element.ALIGN_LEFT, 1, 5));
                    }
                    if (array[i][0].compareTo("2") == 0) {
                        tbl_det1.addCell(Addons.setCeldaPDF("IVA", Font.STRIKETHRU, 10, Font.NORMAL,
                                Element.ALIGN_LEFT, 1, 5));
                    }
                    if (array[i][0].compareTo("6") == 0) {
                        tbl_det1.addCell(Addons.setCeldaPDF("ISD", Font.STRIKETHRU, 10, Font.NORMAL,
                                Element.ALIGN_LEFT, 1, 5));
                    }

                    //Porcentaje de Retencin
                    tbl_det1.addCell(Addons.setCeldaPDF(array[i][3], Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_LEFT, 1, 5));

                    //Valor Retenido
                    tbl_det1.addCell(Addons.setCeldaPDF(array[i][4], Font.STRIKETHRU, 10, Font.NORMAL,
                            Element.ALIGN_LEFT, 1, 5));

                    val_ret += Double.parseDouble(array[i][4]);
                }
                tbl_det1.addCell(Addons.setCeldaPDF("Valor Retenido", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_RIGHT, 1, 5, 7));
                tbl_det1.addCell(Addons.setCeldaPDF(Addons.redondear(val_ret) + "", Font.STRIKETHRU, 10,
                        Font.NORMAL, Element.ALIGN_LEFT, 1, 5, 1));
                tbl_det.addCell(Addons.setCeldaPDF(tbl_det1, 0, 1));
                tbl_det.addCell(Addons.setFilaBlanco(6, 20));
                pdf.add(tbl_det);

                //Informacion Adicional
                PdfPTable tbl_info_ad = new PdfPTable(new float[] { 40f, 10f, 50f });
                PdfPTable tbl_info_ad1 = new PdfPTable(new float[] { 30f, 70f });
                //titulos izquierda
                tbl_info_ad1.addCell(Addons.setCeldaPDF("Informacin Adicional", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_CENTER, 0, 5, 2));
                tbl_info_ad1.addCell(Addons.setCeldaPDF("Contacto: ", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 8, 0));
                tbl_info_ad1.addCell(Addons.setCeldaPDF("062609177 / 062610330", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 8, 0));
                tbl_info_ad1.addCell(Addons.setCeldaPDF("Email: ", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 8, 0));
                tbl_info_ad1.addCell(
                        Addons.setCeldaPDF(EMAIL, Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_LEFT, 0, 8, 0));
                tbl_info_ad1.addCell(Addons.setCeldaPDF("Sitio Web:", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 8, 0));
                tbl_info_ad1.addCell(Addons.setCeldaPDF("www.saitel.ec", Font.STRIKETHRU, 10, Font.NORMAL,
                        Element.ALIGN_LEFT, 0, 8, 0));
                tbl_info_ad1.addCell(
                        Addons.setCeldaPDF(ARCOTEL, Font.STRIKETHRU, 10, Font.NORMAL, Element.ALIGN_LEFT, 0, 8, 2));
                tbl_info_ad.addCell(Addons.setCeldaPDF(tbl_info_ad1, 0, 1));
                tbl_info_ad.addCell(Addons.setCeldaPDF(" ", Font.TIMES_ROMAN, 1, Font.NORMAL, 0, 0));
                tbl_info_ad.addCell(Addons.setCeldaPDF(" ", Font.TIMES_ROMAN, 1, Font.NORMAL, 0, 0));
                pdf.add(tbl_info_ad);

            } catch (IllegalStateException ie) {
                ie.printStackTrace();
            } catch (DocumentException e) {
                e.printStackTrace();
            } finally {
            }
            pdf.close(); // paso 5
            /* fin PDF */
        }

    }

    private Image getBarcode(PdfWriter pdfWriter, String codigo) {
        PdfContentByte cimg = pdfWriter.getDirectContent();
        Barcode128 code128 = new Barcode128();
        code128.setCode(codigo);
        code128.setCodeType(Barcode128.CODE128);
        code128.setTextAlignment(Element.ALIGN_CENTER);
        Image image = code128.createImageWithBarcode(cimg, null, null);
        //float scaler = ((document.getPageSize().getWidth() - document.leftMargin()  - document.rightMargin() - 0) / image.getWidth()) * 70;
        //image.scalePercent(scaler);
        //image.scaleAbsolute(90f, 35f);
        image.scalePercent(90f);
        image.setAlignment(Element.ALIGN_CENTER);
        return image;
    }

    private float getConvertCmsToPoints(float cm) {
        return cm * 28.4527559067f;
    }

    public String quitarTildes(String doc) {

        doc = doc.replaceAll("?", "A");
        doc = doc.replaceAll("", "a");
        doc = doc.replaceAll("", "E");
        doc = doc.replaceAll("", "e");
        doc = doc.replaceAll("", "O");
        doc = doc.replaceAll("", "i");
        doc = doc.replaceAll("?", "I");
        doc = doc.replaceAll("", "o");
        doc = doc.replaceAll("", "U");
        doc = doc.replaceAll("", "u");
        doc = doc.replaceAll("", "N");
        doc = doc.replaceAll("", "n");

        return doc;
    }
}