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
Actualizamoscomposer update
Instalamos de composer el paquete que convierte el xml PDFcomposer 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
Publicar un comentario