Crear un Conversor de Facturas XML Mexicanas a PDF en CodeIgniter4



En este pequeño tutorial vamos a mostrar como crear rápidamente un conversor XML a PDF de las facturas electrónicas Mexicanas

Requisitos

  • Tener instalado la versión mas reciente de Composer
  • Conocimiento básico de PHP y Programación
  • Ganas de aprender

Paso uno creamos el proyecto en CodeIgniter 4
composer create-project codeigniter4/appstarter convertidorXMLPDF
Actualizamos
composer update
Instalamos de composer el paquete que convierte el xml PDF
composer require phpcfdi/cfditopdf
creamos el archivo fileUpload.php en controladores
<?php

namespace App\Controllers;

// use App\Models\FormModel;

use CodeIgniter\Controller;

class FileUpload extends Controller

{

public function index()

{

return view('home');

}

function upload() {

helper(['form', 'url','filesystem']);

  
  
  

$xml = $this->request->getFile('file');

/* $img->move(WRITEPATH . 'uploads');

$data = [

'name' => $img->getName(),

'type' => $img->getClientMimeType()

];

$save = $db->insert($data);

print_r('File has successfully uploaded'); */

  
  

// echo $_FILES['file']['tmp_name'];

$string = file_get_contents($_FILES['file']['tmp_name']);

  

// clean cfdi

$xml = \PhpCfdi\CfdiCleaner\Cleaner::staticClean($string);

  

// create the main node structure

$comprobante = \CfdiUtils\Nodes\XmlNodeUtils::nodeFromXmlString($xml);

  

// create the CfdiData object, it contains all the required information

$cfdiData = (new \PhpCfdi\CfdiToPdf\CfdiDataBuilder())

->build($comprobante);

  

// create the converter

$converter = new \PhpCfdi\CfdiToPdf\Converter(

new \PhpCfdi\CfdiToPdf\Builders\Html2PdfBuilder()

);

  

// create the invoice as output.pdf

$converter->createPdfAs($cfdiData, WRITEPATH . 'uploads\output.pdf');

  
  

}

}
Agregamos el formulario en las vistas en este caso al archivo welcome_message.php
<form method="post" action="<?php echo base_url('FileUpload/upload');?>" enctype="multipart/form-data">

<div class="form-group">

<label>Avatar</label>

<input type="file" name="file" id="file" class="form-control">

</div>

<div class="form-group">

<button type="submit" class="btn btn-danger">Upload</button>

</div>

</form>
	
Y por último agregamos esto en las rutas
$routes->get('/', 'FileUpload::index');
$routes->match(['get', 'post'], 'FileUpload/upload', 'FileUpload::upload');
y listo pueden ver un ejemplo de como quedo en el siguiente enlace https://xml2pdf.cesarsystems.com.mx/

Comentarios

Entradas populares