SDK para PHP

Conversión CFDI a PDF

El SDK de PHP para la conversión de CFDI a PDF te permite procesar comprobantes de cualquier tipo, ya sean de Ingreso, Egreso, Traslado, Nómina o Pago, tanto de las versiones CFDI 4.0 como de la CFDI 3.3. Además, te ofrece control total sobre la personalización del diseño del PDF.

Instalación

  composer require redocmx/client-php
  

Conversión

A continuación, se presenta un ejemplo práctico de cómo utilizar redocmx para convertir un CFDI a PDF de manera instantánea.

  <?php
require_once('vendor/autoload.php');

use Redocmx\RedocmxClient;

# Inicializa Redoc con tu API key
$redoc = new RedocmxClient('api_key');

# Cargar la ruta del XML del CFDI.
$cfdi = $redoc->cfdi()->fromFile('./cfdi.xml');

try {

  # Convertir el CFDI a PDF.
  $pdf = $cfdi->toPdf();

  # Guardar el PDF del CFDI en el sistema de archivos.
  file_put_contents('./resultado.pdf', $pdf->toBuffer());

} catch (Exception $e) {
  echo "Se produjo un error durante la conversión: " . $e->getMessage();
}

  

Personalización del PDF

Para personalizar el PDF generado a partir de tu CFDI, puedes utilizar la addenda de Redoc, diseñada específicamente para ofrecer una experiencia de uso sencilla y rápida. Consiste en un XML de estructura predefinida que te permite personalizar el resultado de tu PDF de manera eficiente y directa.

  <?php
require_once('vendor/autoload.php');

use Redocmx\RedocmxClient;

# Inicializa Redoc con tu API key
$redoc = new RedocmxClient('api_key');

# Cargar la ruta del XML de la Addenda de Redoc.
$addenda = $redoc->addenda()->fromFile('./addenda.xml');

# Cargar la ruta del XML del CFDI.
$cfdi = $redoc->cfdi()->fromFile('./cfdi.xml');

# Aplica addenda al CFDI.
$cfdi->setAddenda($addenda);

try {

  # Convertir el CFDI a PDF.
  $pdf = $cfdi->toPdf();

  # Guardar el PDF del CFDI en el sistema de archivos.
  file_put_contents('./resultado.pdf', $pdf->toBuffer());
  
} catch (Exception $e) {
  echo "Se produjo un error durante la conversión: " . $e->getMessage();
}

  

Ejemplo para personalizar CFDI a PDF


Avanzado

Para personalizar la conversión de CFDI a PDF, se utiliza una addenda de Redoc en XML con PHP. Cada solicitud de conversión usa una addenda para personalizar el PDF (ajustes como logo e idioma entre muchos otros más). El resultado es un documento PDF almacenado, personalizado según las especificaciones del cliente.

  <?php
require_once('vendor/autoload.php');

use Redocmx\RedocmxClient;

/*
  Datos de ejemplo de las solicitudes, tu puedes definirlos y usar los que quieras.
*/
$requests = array(
  array("client_id" => "123", "cfdi_path" => "./cfdi-123.xml", "language" => "es"),
  array("client_id" => "456", "cfdi_path" => "./cfdi-456.xml", "language" => "en")
);

/*
  Inicializa la instancia de Redoc con la clave API.
  
  Recomendación:  
  
  Para evitar colocar directamente la clave en tu código,
  puedes definirla en la variable de entorno REDOC_API_KEY 
  y usar new RedocmxClient() sin parámetros.
*/
$redoc = new RedocmxClient("api_key");

/*
  Carga una addenda de Redoc desde un archivo XML. 
  Esta addenda es reutilizable para todas las conversiones de CFDI a PDF.
*/
$addenda = $redoc->addenda()->fromFile("./addenda.xml");

/*
  Función para procesar cada solicitud de CFDI individualmente.
*/
function processCfdi($request) {
  global $redoc, $addenda;
  try {

    /*
      Carga el archivo XML del CFDI del cliente especificado en la solicitud.
    */
    $cfdi = $redoc->cfdi()->fromFile($request["cfdi_path"]);
    

    /*
      Aplica la addenda al CFDI. 

      Opcional: 
      
      Utiliza un dictionario de llave-valor para personalizas aspectos 
      como el logotipo y el idioma para distintos clientes.

      Es importante usar prefijos únicos en las claves para evitar 
      conflictos, como CUSTOM_VALUE_CLIENT_ID y CUSTOM_VALUE_LANGUAGE.
    */
    $cfdi->setAddenda($addenda, array(
      "CUSTOM_VALUE_CLIENT_ID" => $request["client_id"],
      "CUSTOM_VALUE_LANGUAGE" => $request["language"]
    ));
    
    /*
      Convierte el CFDI en PDF. 
      
      Opcional:   
      
      Si tienes estilos personalizados creados en la interfaz web de 
      Redoc, puedes referenciarlos aquí.

      Ten en cuenta que los valores específicos en la addenda pueden
      sobrescribir los ajustes de estos estilos predefinidos.
    */
    $pdf = $cfdi->toPdf(array(
      "style_pdf" => "client-" . $request["client_id"]
    ));
    
    /*
      Almacena el PDF generado.
    */
    file_put_contents("./resultado-" . $request["client_id"] . ".pdf", $pdf->toBuffer());
    
  } catch (Exception $e) {
    echo "Se produjo un error durante la conversión: " . $e->getMessage();
  }
}

foreach ($requests as $request) {
  processCfdi($request);
}

  

Métodos

Método

redoc->cfdi()->fromFile( filePath )

Instancia Cfdi
- Carga el contenido de un archivo del sistema para convertir un CFDI a PDF.
- El archivo debe ser XML válido para un CFDI.

redoc->cfdi()->fromString( xmlContent )

Instancia Cfdi
- Carga el contenido de un CFDI a partir de una cadena de texto
- La cadena de texto debe ser de un CFDI valido.

redoc->addenda()->fromFile( filePath )

Instancia Addenda
- Carga el contenido de un archivo del sistema para usar como addenda y personalizar los PDF.
- El archivo debe ser XML válido de la addenda de Redoc, ver addenda.

redoc->addenda()->fromString( xmlContent )

Instancia Addenda
- Carga el contenido de una addenda de Redoc a partir de una cadena de texto
- La cadena de texto debe ser de un XML valido de la adenda de Redoc, ver addenda.
Método Descripción
cfdi()->setAddenda( addenda ) Opcional recibe una instancia de la addenda de redoc para tener control total sobre el diseño del PDF final.
cfdi()->toPdf( PdfConversionOptions )
Retorna Instancia Pdf
Convierte el CFDI a PDF de forma síncrona y retorna una instancia de la clase Pdf
Método Descripción
pdf->toBuffer()
Retorna Buffer
Devuelve el documento PDF en formato buffer, listo para ser almacenado o enviado en una respuesta HTTP.
pdf->getTransactionId()
Retorna String - UUID
Un ID único para la solicitud de transacción al servicio de redoc.
pdf->getTotalPages()
Retorna Integer
El número total de páginas generadas para el archivo PDF.
pdf->getTotalTimeMs()
Retorna Integer
Tiempo en milisegundos que toma convertir el CFDI a PDF.
pdf->getMetadata()
Retorna Array - CfdiMetadata
Retorna un array con metadatos del CFDI convertido.

PdfConversionOptions

Opción Descripción
style_pdf
Nombre del estilo utilizado en la conversión, disponible para creación a través de la interfaz web de tu cuenta.
Es posible emplear tanto los estilos como la addenda; sin embargo, si optas por ambos, considera que la addenda puede modificar parcialmente la configuración establecida por los estilos.
Crear un estilo
email_to Próximamente...

CfdiMetadata

Opción Descripción
Próximamente... Próximamente...