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.
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.
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. |
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);
Método para generar un PDF con diseño genérico,
el archivo resultante tendrá como destino la ubicación del XML.
Se genera un PDF genérico indicando la ruta del destino.
//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);
Método que genera un PDF con un diseño personalizado.
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<>()
);
Método que genera un PDF con un diseño adecuado a las necesidades del usuario.
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<>()
);
Herramientas que le permitirá generar imagenes en base64, así como tambíen codigos CBB/QR los cuales los podra agregar al PDF personalizado.
//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”);
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);
//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);
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.
Este método genera un PDF genérico pasando como segundo parámetro la ruta del XML del CFDI.
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\"}}"