Veces vista: 1.216
Con la pandemia del COVID se ha puesto muy de moda los códigos de barras de 2D, los llamados QR.
Algunas de las personas que han contactado para soporte, me han comentado que desean incluir este tipo de códigos en facturas o en documentos en general.
Las librerías para crear documento Word, Excel o PDF, nos permiten integrar imágenes en los mismos, pero no específicamente códigos QR, es por ello y para intentar dar solución a aquellos que desean incorporar códigos QR a sus documentos que he hecho este tutorial que es muy simple y que es el primer paso, disponer de la imagen QR.
Objetivo
Crear imáges de códigos QR y almacenarlas en la gestión de ficheros que hace PHPrunner, exactamente igual que si hubieramos utilizado el aplicativo para cargarla en el sistema.
Solución
Para la creación de este tipo de imágenes he utilizado las librerias PHP de https://github.com/endroid/qr-code.
DEMO: https://fhumanes.com/qr/
Es muy simple y dispone de un ejemplo con muchas características del producto.
En el ejemplo, tanto en el Alta como en la Edición del registro, lo que hace es crear un QR con el contenido del campo «Text»
El código que hace la imagen y la guarda es:
generate_qr.php
<?php
// https://github.com/endroid/qr-code, 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 QR library classes
require_once __DIR__ . '/../../ComponentCode/qr-code_4.4.9/autoload.php';
use Endroid\QrCode\Color\Color;
use Endroid\QrCode\Encoding\Encoding;
use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelLow;
use Endroid\QrCode\QrCode;
use Endroid\QrCode\Label\Label;
use Endroid\QrCode\Logo\Logo;
use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin;
use Endroid\QrCode\Writer\PngWriter;
$writer = new PngWriter();
// Create QR code
$qrCode = QrCode::create($values['Text'])
->setEncoding(new Encoding('UTF-8'))
->setErrorCorrectionLevel(new ErrorCorrectionLevelLow())
->setSize(200)
->setMargin(10)
->setRoundBlockSizeMode(new RoundBlockSizeModeMargin())
->setForegroundColor(new Color(0, 0, 0))
->setBackgroundColor(new Color(255, 255, 255));
// Create generic logo
/*
$logo = Logo::create(__DIR__.'/assets/symfony.png')
->setResizeToWidth(50);
*/
// Create generic label
/*
$label = Label::create('Label')
->setTextColor(new Color(255, 0, 0));
*/
$result = $writer->write($qrCode);
// Create name file
$fileName = 'QR_'.$values['idprueba_qr'].'.png';
$file = substr(__DIR__, 0, -6); // root of file
$file = $file.'files/'.$fileName;
// Save it to a file
$result->saveToFile($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['idprueba_qr'];
$sql="Update prueba_qr set File = '$fileFileSystem' where idprueba_qr = $id_key";
$res=db_exec($sql,$conn);
?>
Como siempre, cualquier duda me podéis contactar en [email protected]
Os dejo los ficheros que necesitaréis, si lo queréis reproducir en vuestros equipos.