Guía 25 – Generar código PDF417

David Venegas me explica que en las facturas en Chile se utiliza un código de barras de 2D PDF417 para imprimir en las facturas. El formato, el conjunto de datos y su disposición, está fijado en la normativa que tiene Chile.

Le es necesario crear este  código e incluirlo en la factura PDF que está haciendo siguiendo este ejemplo. Así pues, una vez que he hecho el ejemplo lo comparto por si fuese de interés para otros usuarios.

Objetivo

Crear imagen PNG de un código PDF417 para después utilizar dicha imagen en cualquier otro documento.

Solución técnica

Como en muchos otros casos he ido a GITHUB y he buscado una librería que satisfaga las características de código PDF417 que tenía. La librería escogida es:  https://github.com/ihabunek/pdf417-php

Podéis probar el ejemplo en: https://fhumanes.com/pdf417/

La verdad es que todo es muy sencillo porque la librería está muy bien escrita, es fácil de integrar y es muy fácil personalizarla con las características que se requiera.

La imagen la creo con este código “generate_pdf417.php

<?php
// https://github.com/ihabunek/pdf417-php,           source of Code

/* 
Occurs after record was updated  or added

$values     - array of values has been written to the database.
              To access specific field value use $values["FieldName"]
              "dict" is an alternate name for this parameter.              
$where      - WHERE clause that points to the edited record. Example: ID=19              
$oldvalues  - array with replaced field values. To access specific column value use
              $oldvalues["FieldName"]              
$keys       - array of key column values that point to the edited record. To access
              specific key column use $keys["KeyFieldName"]              
$inline     - equals to true when the Inline Edit in process, false otherwise              
$pageObject - an object of Page class representing the current page  
*/

// Load the PDF417 library classes
require_once __DIR__ . '/pdf417_0.3/autoload.php'; 

use BigFish\PDF417\PDF417;
use BigFish\PDF417\Renderers\ImageRenderer;
// use BigFish\PDF417\Renderers\SvgRenderer;

// Create a basic PDF417 code
$pdf417 = new PDF417();
$pdf417->setColumns(20); // Muy importante para campos de gran tamaño. Máximo 30
$pdf417->setSecurityLevel(5); // Muy importante fijar nivel de seguridad de código. Máximo 8

$data = $pdf417->encode($values['Text']); 

// Set advanced options
$renderer = new ImageRenderer([
  'format' => 'png',
  'color' => '#000000',
  'bgColor' => '#FFFFFF',
  'scale' => 5,
]);

$image = $renderer->render($data);

// Save it to a file
$fileName = 'PDF417_'.$values['id'].'.png';
$file = substr(__DIR__, 0, -6);  // root of file
$file = $file.'files/'.$fileName;
$image->save($file);

// Save the new file in Database
$size = filesize($file);
$fileArray = [];
$fileArray[0][name]= 'files\/'.$fileName;
$fileArray[0][usrName]= $fileName;
$fileArray[0][size]= $size;
$fileArray[0][type]= 'image\/png';
$fileArray[0][searchStr] = $fileName.',!:sStrEnd'; 
$fileFileSystem=my_json_encode($fileArray);
            
// Update in DB the file
$id_key = $values['id']; 
$sql="Update prueba_pdf417 set File = '$fileFileSystem' where id = $id_key";
$res=db_exec($sql,$conn);
?>

Os dejo el ejemplo para que lo podáis instalar en vuestros Windows.

Para cualquier consulta sobre este ejemplo o lo que necesitéis, contactar conmigo a través de mi email. [email protected]

Adjuntos

Archivo Tamaño de archivo Descargas
zip PHPRunner 10.4 y backup de base de datos 2 MB 243

Blog personal para facilitar soporte gratuito a usuarios de PHPRunner