Guía 3 – PHPRunner – Crear imagen QR

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  
*/
// Load the QR library classes
require_once __DIR__ . '/../../ComponentCode/qr-code_3.9.1/autoload.php'; 
use Endroid\QrCode\ErrorCorrectionLevel;
use Endroid\QrCode\LabelAlignment;
use Endroid\QrCode\QrCode;
use Endroid\QrCode\Response\QrCodeResponse;
// Create a basic QR code
$qrCode = new QrCode($values['Text']);
$qrCode->setSize(200);
$qrCode->setMargin(10); 
// Set advanced options
$qrCode->setWriterByName('png');
$qrCode->setEncoding('UTF-8');
$qrCode->setErrorCorrectionLevel(ErrorCorrectionLevel::HIGH());
$qrCode->setForegroundColor(['r' => 0, 'g' => 0, 'b' => 0, 'a' => 0]);
$qrCode->setBackgroundColor(['r' => 255, 'g' => 255, 'b' => 255, 'a' => 0]);
// $qrCode->setLabel('Scan the code', 16, __DIR__.'/../assets/fonts/noto_sans.otf', LabelAlignment::CENTER());
// $qrCode->setLogoPath(__DIR__.'/../assets/images/symfony.png');
// $qrCode->setLogoSize(150, 200);
$qrCode->setValidateResult(false);
// Round block sizes to improve readability and make the blocks sharper in pixel based outputs (like png).
// There are three approaches:
$qrCode->setRoundBlockSize(true, QrCode::ROUND_BLOCK_SIZE_MODE_MARGIN); // The size of the qr code is shrinked, if necessary, but the size of the final image remains unchanged due to additional margin being added (default)
$qrCode->setRoundBlockSize(true, QrCode::ROUND_BLOCK_SIZE_MODE_ENLARGE); // The size of the qr code and the final image is enlarged, if necessary
$qrCode->setRoundBlockSize(true, QrCode::ROUND_BLOCK_SIZE_MODE_SHRINK); // The size of the qr code and the final image is shrinked, if necessary
// Set additional writer options (SvgWriter example)
$qrCode->setWriterOptions(['exclude_xml_declaration' => true]);
// Directly output the QR code
// header('Content-Type: '.$qrCode->getContentType());
// echo $qrCode->writeString();
// Generate a data URI to include image data inline (i.e. inside an <img> tag)
// $dataUri = $qrCode->writeDataUri();
// Save it to a file
$fileName = 'QR_'.$values['idprueba_qr'].'.png';
$file = substr(__DIR__, 0, -6);  // root of file
$file = $file.'files/'.$fileName;
$qrCode->writeFile($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.

Blog personal

Las cookies nos permiten ofrecer nuestros servicios. Al utilizar nuestros servicios, aceptas el uso que hacemos de las cookies.

"