Real Virtual

Manual - Demo C#


Introducción

El Demo C# es un pequeño sistema que permite realizar las pruebas necesarias para aprender a cómo timbrar un CFDI con la DLL RVFCDI33.
Para efectos prácticos, nos referiremos a la DLL RVFDI33 simplemente como "DLL" a lo largo de este manual.

Este sistema está compuesto de 3 secciones: Encabezado, Menú de Opciones y Resultados. En este manual se explicarán a detalle las secciones mencionadas y aprenderás todo lo necesario para poder timbrar y cancelar un CFDI, así como obtener su XML y PDF.

De forma general, en este Demo podrás seleccionar cualquiera de los CFDI prestablecidos para timbrarlo. Cada CFDI prestablecido corresponde a un ejemplo de llenado para una Factura Normal, un complemento de Pagos, una Carta Porte, un Recibo de Nómina y muchos más. Una vez que el CFDI ha sido timbrado aparecerá en pantalla el XML timbrado, así como la respuesta de nuestro servicio de timbrado.

Además, podrás guardar en tu computadora el XML timbrado. También, podrás consultar el estatus del CFDI en el SAT y proceder a su cancelación. Si lo deseas, también podrás enviar el PDF y XML por correo electrónico con una previa configuración que realices y también podrás guardar el PDF en tu computadora.

Seguramente te preguntarás cómo funciona todo a nivel código fuente en C#. Hemos dedicado una sección al final de este manual para ello, ya que consideramos que es importante comprender primero cómo funciona el sistema externamente antes de adentrarse en su código interno.

En términos generales, el código fuente del Demo consiste en lo siguiente:

Cuando se procede a timbrar un CFDI internamente se utilizan diversos métodos de la DLL para ingresar todos los datos de un CFDI. Posteriormente, se realiza la creación del XML utilizando el Certificado de Sello Digital, Llave Privada y Contraseña del Emisor. Por úlitmo, se procede a timbrar el XML y obtenemos la respuesta final del servicio.

Este Demo está configurado para funcionar en Ambiente de Pruebas con el RFC Emisor de pruebas. Una vez que hayas comprendido el Demo y su código fuente, podrás integrar el timbrado de CFDI y otras funciones en tu proyecto, permitiendo su operación en el Ambiente Productivo, es decir, en un entorno de timbrado real.

Deseamos que tu experiencia con este demo sea muy agradable.


Pantalla General

Al iniciar el Demo se visualiza la siguiente pantalla general.




El Demo está dividido en tres secciones:


- Encabezado
Esta sección ubicada en la parte superior contiene información sobre la configuración interna del sistema para llevar a cabo los procesos de timbrado y cancelación, entre otros.


- Menú de Opciones
Esta sección ubicada al lado izquierdo permite timbrar un CFDI, guardar el XML, consultar el estatus del CFDI en el SAT, cancelar el CFDI, guardar el PDF y enviar por correo el XML y PDF.


- Resultados
Esta sección ubicada al lado derecho sirve para mostrar el XML resultante y otros datos del CFDI.


Encabezado

En esta sección se puede visualizar información relacionada con la configuración interna del sistema para llevar a cabo los procesos de timbrado, cancelación y generación de PDF, entre otros.
La información que podemos encontrar corresponde a los siguientes apartados:


Certificados del Emisor
Se muestran las rutas de ubicación en la carpeta del sistema en donde se encuentran los archivos del Certificado de Sello Digital, Llave Privada y Contraseña del RFC Emisor del ambiente de pruebas.




Usuario de Timbrado
Se muestran el Usuario y Clave de timbrado correspondiente al RFC de pruebas. Esta información existe registrada en nuestra base de datos.
Cuando se registra un cliente para timbrar con nuestro servicio, obtiene su Usuario y Clave de timbrado, mismos que deberá utilizar para poder timbrar en producción.



Nota: Una vez comprendido el funcionamiento del Demo, puedes experimentar estableciendo tus propios archivos de Certificado de Sello Digital, Llave Privada y Clave de un RFC Emisor para timbrar en producción en conjunto con el Usuario y Clave de timbrado correspondiente.


URL Servicio de Timbrado
Se muestra la URL del servicios web de Timbrado utilizado por la DLL para timbrar un CFDI a partir de un XML.



Nota: Esta información no se debe editar.


Archivo XSLT para crear Cadena Original de CFDI
Aquí se muestra por defecto que el XSLT a utilizar para la creación de la cadena original de un CFDI será el que ya está incluído en la DLL.
Sin embargo, puedes elegir utilizar el XSLT local que se encuentra ubicado en la carpeta "XSLT" del Demo.



La diferencia entre ambas opciones consiste en que para la primera opción, se utiliza el XSLT incluído en la DLL e internamente dicho archivo XLST consume a otros archivos XSLT correspondientes a los diversos complementos que existen para el CFDI. La conexión con esos archivos se realiza mediante URL de internet para asegurar que siempre se consultarán los archivos XSLT actualizados por parte del SAT.

Por otro lado, si eliges utilizar el XSLT local significa que se utilizará un archivo XSLT ubicado en la carpeta "XSLT" interna del Demo y éste archivo consume de igual manera a otros archivos XSLT mediante rutas que se dirigen a la subcarpeta "Complementos" en donde también se encuentran los XSLT de cada complemento que existen para el CFDI.

Nota: Te recomendamos siempre utilizar el XSLT incluído en la DLL. En cambio, si deseas tener un control total de los archivos XSLT, entonces selecciona la opción para usar el XSLT que se encuentra dentro del Demo.

Nota: Si decides utilizar los archivos XSLT ubicados dentro del Demo, te darás cuenta de que puedes incluso definir una ruta diferente en donde tengas ubicada una copia de la carpeta "XSLT" y su contenido obtenida del Demo. De esta forma, le estarías indicando a la DLL que utilice tus XSLT mediante la ruta que establezcas para crear la cadena original del CFDI.


Menú de Opciones

En esta sección se encuentran todas las operaciones que se pueden realizar con el Demo para el timbrado de CFDI y su gestión posterior.



A continuación, se explica a detalle cada una de las operaciones que se pueden realizar en esta sección.


Generar XML
Permite generar el XML de un CFDI. Puedes seleccionar la versión disponible del CFDI y establecer una fecha de emisión diferente a la que aparece por defecto. Por último, selecciona un ejemplo de un tipo de CFDI (Factura Normal, Pagos, Carta Porte, etc.) para timbrarlo. Si únicamente deseas generar el XML pero no timbrarlo, entonces desmarca la casilla "Timbrar al generar el XML".

Nota: Encontrarás todos los tipos de CFDI y sus complementos que tenemos disponibles para realizar las pruebas de timbrado. Si exploras el código fuente del Demo podrás encontrar a detalle cómo se llenan el CFDI mediante la creación de un Layout para su posterior conversión a XML y proceder al timbrado del mismo.


Guardar
Permite guardar en tu computadora el XML generado previamente.

Nota: Cuando generas un XML aparecerá en la sección Resultados ubicada en el lado derecho del Demo.


Timbrar XML
Permite timbrar un XML no timbrado.

Nota: Cuando timbras un CFDI aparecerá el XML resultante en la sección Resultados ubicada en el lado derecho del Demo.


Estatus SAT
Permite consultar el estatus de un CFDI timbrado en el SAT para saber si está vigente o cancelado.

Nota: No existe ambiente de pruebas para esta función, por lo que únicamente funcionará cuando estés en modo productivo.


Cancelar
Permite cancelar un CFDI timbrado.

Nota: No existe ambiente de pruebas para esta función, por lo que únicamente funcionará cuando estés en modo productivo.


Enviar Correo
Permite enviar por correo electrónico los archivos XML y PDF de un CFDI timbrado.
Los archivos XML y PDF deben ser creados y guardados previamente para poder adjuntarlos en el envío de correo.

Nota: Es necesario que edites el código fuente del Demo en EnvioCorreo.cs para que establezcas la configuración SMTP y C# pueda conectarse con el proveedor de correo electrónico que utilizarás. Este código fuente es un ejemplo genérico de C#, por lo que en caso de algún error con el envío de correo o falla de dicho servicio queda fuera de nuestro alcance una solución. Por ello, te recomendamos documentarte acerca de la configuración SMTP que debes utilizar y asegurarte de que establezcas la configuración correcta para tener éxito en el envío de correo.


Generar PDF
Permite crear el archivo PDF de un CFDI timbrado para guardarlo en tu computadora.



Es posible seleccionar el formato del PDF correspondiente al tipo de CFDI que fue timbrado. Por defecto, está seleccionado el formato de una Factura Electrónica, mismo que abarca otros tipos de CFDI con complementos. Sin embargo, existen CFDI con complementos que tienen su formato para poder visualizar todos los datos de dichos complementos.

Además, puedes utilizar un logotipo diferente al establecido por defecto para que aparezca en el PDF.


Resultados

En esta sección se encuentran dos pestañas. La primera contiene un recuadro en donde se muestra el XML de un nuevo CFDI timbrado. La segunda permite visualizar información relevante de un nuevo CFDI timbrado, así como el código QR del mismo.

Las siguientes imágenes muestran la apariencia de estas pestañas después de timbrar un CFDI.





A continuación, se explica cada pestaña de esta sección.


XML
Permite visualizar el XML de un nuevo CFDI timbrado.

Nota: Para efectos de visualizacion en este recuadro incluímos código generado con ChatGPT para mostrar con colores los datos que componen un XML. Por tal motivo, cualquier posible error con dicho código queda fuera de nuestro alcance una solución.


Datos Timbre
Permite visualizar información relevante de un nuevo CFDI timbrado. De igual manera, se muestran los códigos QR del CFDI y del complemento Carta Porte en caso de haber timbrado este tipo de CFDI.


Funcionamiento Interno

Comenzaremos explicando el funcionamiento interno del Demo detallando todas las carpetas y archivos que contiene. Algunos de estos archivos fueron generados automáticamente por Visual Studio durante el proceso de compilación, por lo que no hablaremos de ellos. Posteriormente, explicaremos el flujo de los procesos de timbrado y todas las funcionalidades del sistema a nivel código fuente de forma general. Para profundizar a detalle podrás ver el código fuente directamente explorando los archivos del sistema.

A continuación, se muestra el principio general de comunicación de las funciones del sistema para llevar a cabo las operaciones de timbrado, cancelación, generación de PDF y demás.

Demo C# <---> DLL


Como se puede observar, cualquier acción que se ejecute desde el Demo realizará una llamada a la DLL quien devolverá un resultado de éxito o error.


Estructura de archivos


El Demo está compuesto por diferentes carpetas y archivos. Algunos de estos archivos fueron generados automáticamente por Visual Studio durante el proceso de compilación, por lo que no hablaremos de ellos y nos enfocaremos en los que forman parte de tu objetivo de principal interés que es la integración del timbrado y otras operaciones en tu proyecto.




Archivo - DemoRVCFD33.exe
Es el archivo ejecutable del Demo.




Archivo - RVCFDI33.dll
Es el archivo de la DLL. Este archivo debe existir en tu proyecto para poder integrar el timbrado y demás características.




Archivo - Gma.QrCodeNet.Encoding.dll
DLL de código abierto que se utiliza para generar códigos QR en aplicaciones .NET. Este archivo debe existir en tu proyecto para que la DLL RVCFDI33 pueda generar el código QR del CFDI.




Archivo - CSD_Pruebas_CFDI_XIA190128J61.cer
Es el archivo del Certificado de Sello Digital del RFC Emisor XIA190128J61 del ambiente de pruebas.




Archivo - CSD_Pruebas_CFDI_XIA190128J61.key
Es el archivo de la Llave Privada correspondiente al Certificado de Sello Digital del RFC Emisor XIA190128J61 del ambiente de pruebas.




Carpeta - Logo
Esta carpeta contiene el archivo de imagen que aparece como logotipo en la pantalla general y que también se utiliza como logotipo por defecto del formato PDF de un CFDI.




Carpeta - OrigenDatos
Esta carpeta contiene dos archivos que consisten en la estructura de base de datos de la información que puede existir en un XML de un CFDI y son utilizados por la DLL para crear el formato PDF.
Cuando se genera el PDF de un CFDI, la DLL lee toda la información del XML y la carga en las bases de datos.
Después, la DLL utiliza un archivo de formato PDF quien a su vez utiliza las bases de datos mencionadas para cargar la información en el PDF.



La DLL requiere que esta carpeta y su contenido esté ubicada en el disco local C para poder generar el PDF de un CFDI.
Siempre que se ejecuta el Demo se verifica que esta carpeta exista en el disco local C. Si no existe, entonces automáticamente se realiza una copia en el destino mencionado.
Recuerda que debes considerar que en el disco local C siempre exista esta carpeta y su contenido en la computadora donde se vaya a ejecutar tu sistema o proyecto que estés desarrollando.


Carpeta - PDF
Esta carpeta contiene los archivos de formatos de PDF disponibles para los diferentes tipos de CFDI.
Cuando se genera el PDF de un CFDI, internamente en el código fuente se le proporciona a la DLL la ruta del formato PDF a utilizar.




Carpeta - XSLT
Esta carpeta contiene la carpeta Complementos y el archivo cadenaoriginal_4_0.xslt para la creación de la cadena original de un CFDI. Dentro de este archivo, se pueden observar conexiones con la carpeta Complementos que a su vez contiene más archivos XSLT correspondientes a los diferentes complementos para CFDI.



Recordemos que por defecto el Demo utiliza los archivos XSLT que ya están incluídos en la DLL, por lo que esta carpeta y su contenido no son utilizados. Sin embargo, si el usuario lo requiere puede indicar en la interfaz gráfica que se utilicen los archivos XSLT de esta carpeta.

Esta característica es importante para tu proyecto en caso de que desees tener el control total de los archivos XLST. Para ello, tendrás que copiar la carpeta XSLT y su contenido en tu servidor e indicarle a a la DLL la URL de internet para poder acceder a ellos. O bien, puedes utilizar una ruta de ubicación en el disco duro, todo depende de las necesidades de tu proyecto.


Timbrar CFDI


El proceso de timbrado de un CFDI al inicio puede resultar algo complejo, pero se vuelve sencillo una vez que se ha revisado el código fuente a detalle. En términos generales, al pulsar el botón Generar XML con la casilla "Timbrar al generar el XML" marcada en la interfaz gráfica se ejecuta un proceso interno que se encargará de revisar qué ejemplo de CFDI fue seleccionado para realizar el llenado del mismo a través de los métodos de creación del CFDI de la DLL. Una vez establecida la información del CFDI, se genera el XML y se procede a timbrarlo. Entonces, la DLL consume internamente el servicio web de Timbrado para completar el proceso y recibe una respuesta de éxito o error. Por último, se muestra el XML timbrado o no en la sección de Resultados.

Si la casilla "Timbrar al generar el XML" no está marcada y se pulsa el botón Generar XML, entonces únicamente se generará el XML sin timbrar y aparecerá en la sección de Resultados para que puedas guardarlo como archivo en tu computadora y timbrarlo después con el botón Timbrar XML.


Llenado del CFDI
Lo primero que hace el proceso tras pulsar el botón Generar XML es crear el objeto de la DLL. Después, establece la ruta del certificado de Sello Digital y procede a verificar qué tipo de CFDI se seleccionó y se realiza el llenado del mismo en la DLL de la siguiente manera. Para este ejemplo, supondremos que seleccionamos timbrar un CFDI de tipo Factura Normal.



Como pudimos observar, se llaman a diferentes métodos de la DLL para ingresar los datos del CFDI. Es importante considerar que existe un orden en que los nodos del CFDI se deben ir estableciendo en la DLL, por ejemplo no es posible establecer el Emisor antes que el Receptor.

En el caso de los nodos de los Conceptos y sus Impuestos, pueden repetirse en orden cuantas veces sean necesarias conforme a la guía de llenado de CFDI del SAT.


Generación del XML
Una vez finalizado el llenado el CFDI, procedemos a verificar si se estableció que se utilice el archivo XSLT local dentro de la carpeta XSLT del Demo. Recuerda que aquí también puedes establecer la ruta o URL de la ubicación de tu copia de la carpeta XSLT.



Después, se realiza la generación del XML enviando la ruta de la Llave Privada y la Contraseña de la misma. Recuerda que previamente ya se había establecido el Certificado de Sello Digital.

Si la creación del XML no tuvo éxito, entonces se muestra un mensaje de error y se termina el proceso.

Si la creación del XML tuvo éxito, entonces se procede a recuperar el XML sin timbrar y lo mostramos en la interfaz gráfica en la pestaña "XML" de la sección de Resultados.


Timbrado del XML
Una vez que tenemos el XML sin timbrar en Base64, se procede al timbrado del mismo. Podemos observar a continuación que se verifica que esté marcada la casilla "Timbrar al generar el XML" para entonces llamar al método TimbrarCfdi de la DLL enviando como parámetros el Usuario y Clave de timbrado, la URL del servicio web de Timbrado y un valor boleando para definir si se va a timbrar en ambiente productivo o no. (False = Ambiente de pruebas, True = Ambiente productivo).

Si la casilla "Timbrar al generar el XML" no está marcada y se pulsa el botón Generar XML, entonces únicamente se generará el XML sin timbrar y aparecerá en la sección de Resultados para que puedas guardarlo como archivo en tu computadora y timbrarlo después con el botón Timbrar XML.



Si el timbrado tuvo éxito, entonces lo mostramos en la interfaz gráfica en la pestaña "XML" de la sección de Resultados. Por úlitmo y de forma opcional, obtenemos algunos datos y generamos el código QR del CFDI para mostrarlos en la sección de Resultados en la pestaña "Datos CFDI".

Si la creación del XML no tuvo éxito, entonces se muestra un mensaje de error y como resultado tendremos el XML no timbrado visible en la pestaña "XML" de la sección de Resultados.


Guardar XML


El proceso de guardado del XML es muy pequeño. Se requiere haber timbrado un CFDI para poder guardar el XML.

Lo primero que hace el proceso tras pulsar el botón Guardar es verificar si se ha timbrado un CFDI validando si hay un XML timbrado o no en la pestaña "XML" de la sección de Resultados. Después, procede a preguntar al usuario en dónde desea guardar el archivo XML mostrando un nombre predefinido para el archivo dependiendo del tipo de CFDI seleccionado. Por úlitmo, realiza el guardado del archivo obteniendo el XML de la sección de Resultados.




Timbrar XML


Este proceso sirve para timbrar un archivo XML no timbrado existente en tu computadora.

A continuación, podemos observar que se permite al usuario seleccionar el archivo XML a timbrar. Después, se crea un objeto de la DLL para llamar al método TimbrarCfdiArchivo enviando como parámetros la ruta del XML, el Usuario y Clave de timbrado, la URL del servicio web de timbrado, la ruta de destino donde se guardará el XML timbrado y un valor boleano para definir si se va a timbrar en ambiente productivo o no. (False = Ambiente de pruebas, True = Ambiente productivo). Por último, se muestra el mensaje de éxito o error en pantalla.




Estatus SAT


El proceso de consulta del estatus en el SAT de un CFDI es pequeño. En términos generales, este proceso lee un archivo XML previamente timbrado para obtener la información con la que se realizará una consulta al servicio web de Timbrado a través de la DLL y así conocer su estatus en el SAT.

A continuación, podemos observar que se permite al usuario seleccionar el archivo XML timbrado. Después, se obtiene información del XML y se valida si está timbrado o no. Si está timbrado, entonces se procede a crear un objeto de la DLL para llamar al método ConsultarEstatusCFDI enviando como parámetros el Usuario y Clave de timbrado, la URL del servicio web de Timbrado, RFC Emisor, RFC Receptor, Total del CFDI y UUID.

Si ocurrió un error se termina el proceso. Si hubo éxito, entonces se procede a verificar la respuesta de la consulta.



A continuación, se hace una evaluación con una serie de IF-ELSE para las acciones a realizar dependiendo del estatus del CFDI que recibimos. En este caso, vamos a continuar el flujo del código en el supuesto de que el estatus del CFDI sea Cancelado.



Dentro de esta condición, podemos observar que de manera opcional está la consulta del Acuse de Cancelación del CFDI cuyo estatus en el SAT es Cancelado. Para ello se realiza el consumo a un servicio web de consultas a través de la DLL con el método Consultar_Acuse_cancelado_UUID enviando como parámetros el UUID del CFDI, Usuario y Clave de timbrado y el RFC Emisor. Por último, se recibe la respuesta y con ella se procede a permitir al usuario seleccionar la ubicación de destino en donde se guardará el archivo XML de Acuse de Cancelación.

Nota: No existe ambiente de pruebas para la consulta de estatus de un CFDI en el SAT porque los CFDI timbrados en ambiente de pruebas no existen en el SAT, por lo que no es posible realizar una consulta de estatus. Una vez que nuestro servicio web recibe los datos del CFDI para la consulta del estatus, se realiza internamente el consumo de un servicio web del SAT quien nos devuelve como respuesta el resultado de la consulta.



Cancelar CFDI


El proceso de cancelación de un CFDI al inicio puede resultar algo complejo, pero se vuelve sencillo una vez que se ha revisado el código fuente a detalle. En términos generales, se lee el archivo XML de un CFDI timbrado para obtener la información con la que se creará un archivo XML de Solicitud de Cancelación a través de la DLL y realizar el proceso de cancelación. Por último, si hubo éxito en el proceso de cancelación, la DLL devuelve el XML de Acuse de Cancelación del CFDI.

Lo primero que hace el proceso de cancelación es permitir al usuario seleccionar el archivo XML de un CFDI timbrado para leerlo y obtener su información.



A continuación, se crea un objeto de la DLL y se define la ruta en donde se guardará el archivo XML de Solicitud de Cancelación que se va a generar. También, se definen datos propios de la cancelación como el Motivo y el Folio Sustitución.

Después, se utiliza el método crearXMLCancelacionArchivo enviando como parámetros la ruta del Certificado de Sello Digital, la Llave Privada y su Contraseña, el UUID del CFDI, la ruta de guardado del XML de Solicitud de Cancelación, el Motivo y el Folio Sustitución.



Si no hubo éxito, entonces se muestra un mensaje de error y se termina el proceso.

Si hubo éxito, entonces se procede a utilizar el método enviarCancelacionArchivo enviando como parámetros la ruta donde se creó el archivo XML de Solicitud de Cancelación, el Usuario y Clave de timbrado, la URL del servicio de Timbrado y un valor boleando para definir si se va a timbrar en ambiente productivo o no. (False = Ambiente de pruebas, True = Ambiente productivo).

Por último, se muestra en pantalla un mensaje de éxito o error.

Nota: No existe ambiente de pruebas para la cancelación de CFDI porque los CFDI timbrados en ambiente de pruebas no existen en el SAT, por lo que no es posible realizar una cancelación. Sin embargo, al intentar cancelar en ambiente de pruebas obtendremos un mensaje de error que nos indica que el flujo del proceso funciona correctamente y está listo para ser utilizado en ambiente productivo. El mensaje de error mencionado consiste en la leyenda "Error al cancelar: El token debe contener 3 partes".



Enviar Correo


El proceso de envío de correo consiste en cargar los archivos PDF y XML que previamente hayas guardado para adjuntarlos en un mensaje que se envía por correo electrónico a través de la librería System.Net.Mail.

Lo primero que hace el proceso de envío de correo es abrir una nueva ventana con las siguientes líneas de código.



Veamos el diseño de la interfaz gráfica de esta ventana.



Como podemos observar, por defecto se carga automáticamente parte de la configuración SMTP suponiengo que utilizarás una cuenta de Outlook para hacer la prueba de envío. En el código fuente de la función Load del formulario, puedes encontrar las configuraciones SMTP para otros proveedores de envío de correo. Sin embargo, es recomendable que investigues por cuenta propia la configuración SMTP actualizada.

También, puedes observar que hay un botón para adjuntar los archivos que serán enviados en este mensaje. Puedes acceder a su código fuente para ver cómo es el proceso a detalle, pero básicamente consiste en agregar rutas de ubicación de los archivos XML y PDF en el campo de texto.

A continuación, vamos a ver el código fuente del botón Enviar Correo.



Como se puede observar, primero se crea un objeto de la librería System.Net.Mail y se establecen sus propiedades con la configuración SMTP y los datos del mensaje que se enviará. Después, se lee el contenido del campo de texto que contiene las rutas de ubicación de los arcihvos para adjuntarlos al mensaje.

Por último, se realiza el envío del correo y si el proceso termina por completo, entonces se muestra un mensaje de éxito. En caso contrario, se muestra un mensaje de error.


Descargar PDF


El proceso de descarga de PDF consiste en leer el archivo XML de un CFDI timbrado para que la DLL pueda procesarlo y generar el archivo PDF.

Es posible seleccionar el formato del PDF correspondiente al tipo de CFDI que fue timbrado. Por defecto, está seleccionado el formato de una Factura Electrónica, mismo que abarca otros tipos de CFDI con complementos. Sin embargo, existen CFDI con complementos que tienen su formato para poder visualizar todos los datos de dichos complementos. Además, puedes utilizar un logotipo diferente al establecido por defecto para que aparezca en el PDF.

Ahora, veamos el código fuente de este proceso.



Como podemos observar primero se establece la ruta de la carpeta que contiene los formatos PDF que la DLL puede utilizar y se hace una validación del formato PDF seleccionado desde la interfaz gráfica para completar la ruta mencionada con el nombre del archivo.

A continuación, podemos observar que se procede a permitir al usuario seleccionar el XML timbrado.
Después, se crea el objeto de la DLL y se define la variable que contendrá el logotipo leído desde la ruta de ubicación establecida desde la interfaz gráfica.



Por último, se establece la ruta de guardado del PDF y se llama al método GenerarPdf enviando como parámetros la ruta de ubicación del XML timbrado, el logotipo, un valor boleano para indicar si el CFDI está vigente o cancelado (True = Vigente, False = Cancelado), una observación, teléfono del Emisor, correo electrónico del Emisor, la ruta donde se guardará el PDF y la ruta del archivo del formato PDF a utilizar.

Si hubo éxito, entonces el archivo PDF se habrá creado y guardado.
Por último, se muestra un mensaje de éxito o error.