API para generar PDF

Esta API realizada en Java le permitirá generar representaciones impresas(PDF) de sus CFDI´s a través de XML´s y diseños elaborados en XSL.
Los archivos PDF se pueden generar por tres distintos métodos.

  • Genérico
  • Conector
  • Personalizado

Además la API contiene utilerías para convertir imágenes a Base64 desde un String que contenga la ruta de la misma o tambien desde un objeto File.
así de esta manera se pueden agregar imágenes a los PDF´s.

Descargar

Parámetros

Parámetro Descripción
overwritePdf
(boolean)
Indica si sobre escribirá archivos PDF existentes.
true = sobre escribir, false = no sobre escribir, el valor por default es false.
filePdf
(File)
Este objeto se crea con la ruta de donde se guardara el PDF generado.
fileXml
(File)
Este objeto se crea con la ruta del CFDI, el archivo debe tener un encoding UTF-8 valido para la correcta generación del PDF.
xml
(xml)
Cadena de texto del CFDI, la cadena debe tener un encoding UTF-8 valido para la correcta generacón del PDF.
document
(org.w3c.dom.Document)
Este parámetro es generado a partir del CFDI.
xsl
(String)
Contiene la ruta del archivo XSL con el diseño PDF, en caso de
referenciar otras XSL's deben de estar referenciadas de manera relativa.
isCancelled
(boolean)
Indica si el documento debe reflejar la leyenda de cancelado.
pathImage
(String)
Cadena de texto que debe contener la ruta de imagen a utilizar.
fileImage
(File)
Este objeto se crea con la ruta de imagen a utilizar.
parameters
(Map)
Colección de parámetros extras útiles para la generación del PDF.

Constructores

El constructor por default no sobrescribirá el PDF ya existente, en su lugar guarda otro con un numero consecutivo, por ejemplo: mi_archivo.pdf mi_archivo(1).pdf

public UtilPDF ();

Mientras que el otro constructor permite indicar si se sobrescribira el PDF existente.

public UtilPDF (boolean overwritePdf);

//Constructor por default, no sobrescribe PDF existente.
public UtilPDF();

//Constructor que indica si sobreescribe o no el PDF existente.
public UtilPDF(true);
                                        

Métodos para generar PDF

Generar PDF Genéricos

Método para generar un PDF con diseño genérico, el archivo resultante tendrá como destino la ubicación del XML.

public UtilPDF.generateGenericPdf (
File xml,
boolean isCancelled
);

Se genera un PDF genérico indicando la ruta del destino.

public UtilPDF.generateGenericPdf (
File pdf,
File xml,
boolean isCancelled
);
//Las rutas proporcionadas deben ser unicamente absolutas, no relativas.
File pdf = new File("C:\\Users\\user\\Downloads\\mi_archivo_pdf.pdf");
File xml = new File("C:\\Users\\user\\Downloads\\mi_archivo_xml.xml");

//El pdf se guardara en donde mismo que el xml.
pdfCreator.generateGenericPdf(xml, true);

//pdf = ruta donde se guardara el pdf.
//xml = ruta donde se encuentra el archivo.
//boolean = indica si es cancelado o no.
pdfCreator.generateGenericPdf(pdf, xml, false);
                                        

Generar PDF de Conector

Uso únicamente para usuarios con Conector Forsedi v33.

Método que genera un PDF con un diseño personalizado.

public UtilPDF.generateConectorPdf (
File pdf,
File xml,
String xsl,
String pathImage,
boolean isCancelled,
Map parameters
);
dirXml = "C:\\Users\\user\\Desktop\\PDFS\\310BEB20-336B-4E16-9B64-0F1A06561031.xml";
File xml = new File(dirXml);
String pdfPath = parent.getAbsolutePath() + "/" + file.getName().replace(".xml", "_x.pdf");
File pdf = new File(pdfPath);
//Genera pdf personalizado con archivos propios del conector
utilPDF.generateConectorPdf(
    pdf,
    xml,
    "C:/Conectores/Conectores2017/ConectorGenerico/Conector_CFDI33/ConfigurationFiles_CFD/XSL/disenio_cfdi33.xsl",
    "C:/Conectores/Conectores2017/ConectorGenerico/Conector_CFDI33/ConfigurationFiles_CFD/XSL/disenio_nomina.xsl",
    "C:/Conectores/Conectores2017/ConectorGenerico/Conector_CFDI33/ConfigurationFiles_CFD/Images/LogoFormas.jpg",
    false,
    new HashMap<>()
);
                                        

Generar PDF personalizado

Método que genera un PDF con un diseño adecuado a las necesidades del usuario.

public UtilPDF.generatePdf (
File pdf,
String xml,
org.w3c.dom.Document document,
boolean isCancelled,
Map parameters
);
String dirXml = "C:\\Users\\user\\Desktop\\PDFS\\310BEB20-336B-4E16-9B64-0F1A06561031.xml";
File file = new File(dirXml);
File parent = file.getParentFile();
String pdfPath = parent.getAbsolutePath() + "/" + file.getName().replace(".xml", "_x.pdf");
Document document = UtilXml.stringToDom(dirXml);
File pdf = new File(pdfPath);
        
pdfCreator.generatePdf(
        pdf,
        dirXml,
        document,
        "C:/Conectores/Conectores2017/ConectorGenerico/Conector_CFDI33/ConfigurationFiles_CFD/XSL/disenio_nomina.xsl",
        false,
        new HashMap<>()
);
                                        

Utilerías

Herramientas que le permitirá generar imagenes en base64, así como tambíen codigos CBB/QR los cuales los podra agregar al PDF personalizado.

Generar imagen en base64

Generar imagen en formato base64 desde un objeto File.

public UtilPDF.encodeImage (File image);

Tambien se puede generar el formato base64 desde la ruta absoluta de la imagen.

public UtilPDF.encodeImage (String pathImage);
//Ruta absoluta de la imagen.
String pathImage = "C:\\Users\\user\\Desktop\\Images\\mi_imagen.png";
File image = new File(pathImage);

//Genera base64 desde el objeto File
String base64_imagen = UtilPDF.encodeImage(image);

//Genera base64 desde un String con la ruta absoluta.
String base64_imagen = UtilPDF.encodeImage(pathImage);

//Forma agregar las imagenes al objeto parameters
parameters.put("IMG_LOGO_EMPRESA", base64_imagen”);
                                        

Generar CBB/QR (Código de Barras Bidimensional)

Se puede generar los codigos QR y CBB en formato PNG utilizando la clase com.forsedi.pdf.util.UtilCBB.

Cada uno de los siguientes métodos permite generar el código CBB/QR.

public UtilCBB.generateCbbBase64 (org.w3c.dom.Document document);

public UtilCBB.generateCbbBase64 (
Document image,
int width,
int height
);
public UtilCBB.generateCbbBase64 (
Document image,
int width,
int height,
String cbbPath
);
//Ruta absoluta del XML.
String dirXml = "C:\\Users\\user\\Desktop\\PDFS\\310BEB20-336B-4E16-9B64-0F1A06561031.xml";

//Uso del metodo generateCbbBase64 unicamente con el atributo document.
Document document = UtilXml.stringToDom(dirXml);
UtilCBB.generateCbbBase64(document);   

//width, height son las medidas que tendra el codigo cbb/qr.
UtilCBB.generateCbbBase64(document, 350, 350);

//pathCbb, el atributo en donde se guardara el codigo
String pathCbb = "C:\\Users\\user\\Desktop\\cbb\\mi_cbb.png";
UtilCBB.generateCbbFile(document,350, 350, pathCbb);
                                        

Ejecucion por consola

por medio de la consola de comandos puede ser uso de los distintos métodos, únicamente se requiere poner el método que se desea usar y los parámetros que ocupara el método a usar.

Método genérico

Este método genera un PDF genérico pasando como segundo parámetro la ruta del XML del CFDI.

java -Dfile.encoding=UTF-8 -jar "target/api_pdf_forsedi-1.1-run.jar" generic "C:/Users/user/Desktop/XML/310BEB20-336B-4E16-9B64-0F1A06561031.xml"
                                        

Método JSON

Método que permite generar un PDF personalizado pasando como segundo parámetro un JSON con los parámetros necesarios para personalizar el PDF, el único atributo requerido es el CFDI_PATH que es la ruta del archivo XML del CFDI, los demá pueden ser opcionales.

Atributo Descripción
override_pdf
boolean
(Opcional)
Condicional para indicar si sobrescribirá el PDF existente
Por default es false.
is_cancelled
boolean
(Opcional)
Condicional que indica si el XML se encuentra cancelado.
Por default es false.
cfdi_path
String
(Requerido)
Campo requerido que contiene la ruta del XML del CFDI.
pdf_path
String
(Opcional)
Campo opcional que permite una ruta donde sera el destino del PDF.
Por default tomara la misma ruta que cfdi_path
xsl_path
String (Opcional)
Atributo opcional que puede tener la ruta del XSL con diseño propio del usuario.
Por default contiene un diseño genérico.
parameters
Map
(Opcional)
Objeto opcional que permite agregar campos adicionales para el diseño personalizado.
{ // The name of the attributes may or may not be enclosed in quotes
    "override_pdf": "", // opcional | default : false
    "is_cancelled": "", // opcional | default : false
    "cfdi_path": "", // required
    "pdf_path": "", // opcional | default : same as cfdi_path
    "xsl_path": "", // opcional | default : generic design
    "parameters": { // opcional | parameter name  and value
		"telefono": "",
		"email": "",
		"otro": ""
            },
}



java -Dfile.encoding=UTF-8 -jar "target/api_pdf_forsedi-1.1-run.jar" json "{is_cancelled: true, cfdi_path: \"C:/Users/user/Desktop/PDFS/carta_porte.xml\", \"pdf_path\": \"C:/Users/user/Desktop/PDFS/carta_porte_xxx.pdf\", override_pdf: true, images: { IMG_LOGO: \"C:/Users/user/Desktop/Images/Logo.png\"}}"