Guía 41 – Imprimir etiquetas de Productos

Generar PDF’s en PHPRunner, en la últimas versiones, es bastante sencillo, pero poder hacer ajustes de la generación de esos documentos PDF’s es muy complejo o imposible, con la solución estándar de PHPRunner.

Para la últimas versiones de PHPRunner, que la recomendación es utilizar la versión de PHP 8.X, os he comentado que he utilizado la solución de PhpJasperXml 2.0.1, obteniendo unos resultados muy, muy buenos.

Para que dispongáis de un ejemplo sencillo de utilización de PhpJasperXml 2.0.1, he creado esta guía para que podáis evaluar lo simple que es integrarlo en PHPRunner.

Objetivo

Generar etiquetas para imprimir en impresora Zebra (impresoras de etiquetas), seleccionando registros de un listado. Con pequeñas variaciones se puede utilizar en impresoras láser estándar con hojas de etiquetas (que yo entiendo es la mejor solución para muchos casos).

Demo: https://fhumanes.com/PDF_labels

Solución Técnica

Como he indicado, el ejemplo contempla la utilización del la librería de PhpJasperXML 2.0.1, que es una eficiente solución para hacer informes PDF’s de cualquier tipo, que previamente se hayan diseñado con Jasper Studio.

La funcionalidad es muy sencilla, de la lista de productos, se seleccionan los registros de los que deseamos generar las etiquetas y pulsamos el botón naranja de impresión . Las etiquetas tienen las siguientes características:

  • Tiene un tamaño especial de la página
  • Se genera un código QR con la información de un campo o con el contenido que se desee
  • En un campo de tipo «memorándum» la información se extiende para ajustarse al espacio indicado.

El código para generar las etiquetas es:

<?php
// Required to take the phprunner context
@ini_set("display_errors","1");
@ini_set("display_startup_errors","1");
require_once(__DIR__."/../include/dbcommon.php");

require __DIR__."/../../ComponentCode/phpJasperXML_2.0.1/autoload.php";

use simitsdk\phpjasperxml\PHPJasperXML;
$filename = __DIR__.'/labels.jrxml';

// read parameters
$P1 = '';
$parameters = $_SESSION['record_select'];
for($i = 0; $i < count($parameters); $i++) {
    $P1 .= $parameters[$i].',';
}
$P1 = substr($P1, 0, -1); // Delete last caracter ','
// Read record
$dat = array();
$rs = DB::Query("SELECT * FROM pdf_labels WHERE id_PDF_labels in ($P1)");
while( $row= $rs->fetchAssoc() )
{
$data[] = $row;
}

$config = [
    'driver'=>'array',
    'data'=> $data
];

/*
$config = [
    'driver'=>'mysql',
    'host'=>'127.0.0.1',
    'user'=>'root',
    'pass'=>'humanes',
    'name'=>'pruebas',
];
*/
$parameters = [];
/*
$parameters = [
    'P1'=> 1
];
*/ 

$type = 'Pdf';
$fileOutput= '';
// $fileOutput= __DIR__.'/<name of file>';
$creator = 'FHumanes';
$author = '[email protected]';
$title = 'Product labels';
$keywords = 'PHPRunner';
$format_intl = 'es_ES';

$report = new PHPJasperXML();
$report->load_xml_file($filename)    
    ->setParameter($parameters)
    ->setDataSource($config)
    ->export($type,$fileOutput,$title,$creator,$author,$keywords,$format_intl);
 //   ->export('Pdf');

Os indico algunas características de este código:

  • La librería para generar el informe está fuera del proyecto, en concreto en el directorio «ComponentCode», para que el proyecto no sea muy pesado y porque así se puede utilizar por múltiples proyectos.
  • Los registros seleccionados de la página LIST nos vienen en una variable de sesión en una Array. Se pasa a formato «string» como una lista de registros.
  • Se utiliza la conexión de PHPRunner para acceder a los datos y pasar estos a un array, que es lo que se entrega a la utilidad de generar el informe.
  • El PDF generado se entrega al navegador, pero también se puede guardar en un fichero en el servidor.
  • Se indican los atributos del fichero PDF generado.
  • Se especifica el idioma. «es_ES» en este caso, que condiciona los símbolos de los valores numéricos.

En estos momentos no puedo facilitar una URL de pruebas, ya que requiere PHP 8 mi «hosting» está en PHP 7.4, para que funcionen muchos de los ejemplos que tengo de versiones anteriores a PHPRunner 10.7. En breve, generaré todos los ejemplos para que funcionen en PHP 8 y así poder dejar ejemplo de todo lo explicado en mi portal.

Os dejo todo el código para que lo podáis instalar en vuestros PC’s y podáis hacer nuevos ajustes y pruebas.

Para cualquier duda o lo que necesitéis, contactar conmigo a través de mi email [email protected]

Blog personal para facilitar soporte gratuito a usuarios de React y PHPRunner