phpcfdi / cfditopdf
Create a generic PDF file from a CFDI 3.3 & 4.0 (CLI included)
Installs: 27 385
Dependents: 1
Suggesters: 0
Security: 0
Stars: 36
Watchers: 4
Forks: 23
Open Issues: 2
Requires
- php: >=7.3
- eclipxe/cfdiutils: ^2.29
- league/plates: ^3.5
- phpcfdi/cfdi-cleaner: ^1.3.3
- spipu/html2pdf: ^5.2.8
Requires (Dev)
- phpunit/phpunit: ^9.5
README
Create a generic PDF file from a CFDI 3.3 & 4.0
In some cases you just simply need a PDF file from a Mexican CFDI (Comprobante Fiscal Digital por Internet). This tool help you to create a generic one. You can also use it to build your own and pretty formats.
Installation
Use composer, so please run
composer require phpcfdi/cfditopdf
Basic usage from CLI
$ bin/cfditopdf [options] <cfdi-file> [<pdf-file>]
-h, --help Show this help
-V, --version Show command version
-d, --dirty Do not try to clean up the cfdi file
-f, --fonts-dir Path where TCPDF fonts are located
-l, --resource-location Use this path to store the xml resources locally,
if none then it will always download xlst resources
cfdi-file Path of the XML file (input file)
pdf-file Path of the PDF file (output file) if none then it will remove
".xml" extension and suffix ".pdf" extension
Basic usage as a PHP library
<?php declare(strict_types=1); $cfdifile = 'datafiles/cfdi.xml'; $xml = file_get_contents($cfdifile); // clean cfdi $xml = \PhpCfdi\CfdiCleaner\Cleaner::staticClean($xml); // 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, 'output.pdf');
To change the way data is translated from CfdiData
to HTML you could provide a specialized translator to
Html2PdfBuilder
when the object is constructed.
In the following example is using the default HTML translator that uses Plates, only changing the directory where templates are located and the template name. The expected result must be compatible with Html2Pdf.
<?php declare(strict_types=1); $htmlTranslator = new \PhpCfdi\CfdiToPdf\Builders\HtmlTranslators\PlatesHtmlTranslator( 'directory_where_templates_are_located', 'main_template_name' ); $converter = new \PhpCfdi\CfdiToPdf\Converter( new \PhpCfdi\CfdiToPdf\Builders\Html2PdfBuilder($htmlTranslator) );
PHP Support
This library is compatible with at least the oldest PHP Supported Version with active support. Please, try to use PHP full potential.
We adhere to Semantic Versioning. We will not introduce any compatibility backwards change on major versions.
Internal classes (using @internal
annotation) are not part of this agreement
as they must only exist inside this project. Do not use them in your project.
Contributing
Contributions are welcome! Please read CONTRIBUTING for details and don't forget to take a look in the TODO and CHANGELOG files.
Copyright and License
The phpcfdi/cfditopdf
library is copyright © PHPCFDI
and licensed for use under the MIT License (MIT). Please see LICENSE for more information.