Voyons un peu le composant Zend_Barcode du Zend Framework

Un de mes projets Zend Framework depuis plusieurs mois déjà est une application web de gestion de stock, celle-ci gère bien entendu les codes-barres des biens. Dans cet article nous allons voir comment les créer avec ZF. Pour une fois ce tutoriel va utiliser des composants ZF dans un projet autonome et non au sein d’un projet MVC complet.

Zend_Barcode

Le composant Zend_Barcode permet de gèrer les barcodes dans un projet ZF, celui-ci se compose de deux sous-composants : barcode et renderers, le premier sert à créer le barcode indépendamment du support alors que le deuxième l’affiche sur le support final qui peut être une image, un PDF ou un SVG.

La façon la plus simple et directe de créer un barcode tient en une ligne de code. Nommons ce fichier simplement index.php et n’oublions pas de lui indiquer le chemin vers le composant Zend_Barcode :

set_include_path('/chemin/vers/ZendFramework/library');
require_once 'Zend/Barcode.php';

Zend_Barcode::render(
		'code128', 
		'image', 
		array('text' => 'MON-BARCODE'), 
		array());

Voici le résultat qui par défault est un PNG :

Barcode

Avant de décortiquer cette classe, on peut préciser qu’elle utilise un design pattern factory qui étend la classe abstraite Zend_Barcode_Renderer_RendererAbstract, celle-ci accepte 5 arguments :

  • le nom du format du barcode (ici c’est un code 128, c’est un paramètre requis)
  • le nom du renderer (ici ce sera une image, c’est un paramètre requis)
  • un tableau d’options à passer à l’objet barcode
  • un tableau d’options à passer à l’objet renderer
  • un booléen pour indiquer si les erreurs doivent être affichées automatiquement ou non (défaut à TRUE)

A noter que bien que les options de l’objet barcode soient optionelles, il faut au minimum le texte à convertir en barcode, dans notre exemple le texte 'MON-BARCODE'. Comme le rendu est fait à la volée, il faut bien s’assurer que rien n’est affiché avant le barcode.

Nous avons vu plus haut que l’objet barcode et l’objet renderer peuvent être utilisés indépendamment, en effet il est possible de créer notre barcode sans savoir ce que l’on va en faire, et seulement plus tard l’afficher sous forme d’image, comme PDF ou SVG. Voyons comment faire.

set_include_path('/chemin/vers/ZendFramework/library');
require_once 'Zend/Pdf.php';
require_once 'Zend/Barcode.php';
require_once 'Zend/Barcode/Object/Code128.php';
require_once 'Zend/Barcode/Renderer/Image.php';

$options = array('text' => 'FABIEN-BARCODE');
$barcode = new Zend_Barcode_Object_Code128($options);

$options = array('barcode' => $barcode , 'imageType' => 'jpg');
$render_barcode = new Zend_Barcode_Renderer_Image($options);

Zend_Barcode::render($barcode, $render_barcode);

Ce qui donne :

Barcode

Après n’avoir pas oublié d’inclure quelques autres composants/classes, on instancie un objet pour un barcode de type 128 avec la classe Zend_Barcode_Object_Code128, on lui passe un tableau d’options. On fait de même avec un objet renderer qui va prendre comme argument notre objet barcode, puis on fait le rendu du barcode.

Rendu dans un document PDF

Pour terminer voyons comment générer notre barcode dans un PDF. Les commentaires sont cette fois-ci dans le code.

set_include_path('/chemin/vers/ZendFramework/library');
require_once 'Zend/Pdf.php';
require_once 'Zend/Barcode.php';

// Nouvelle instance de Zend_Pdf
$pdf = new Zend_Pdf();

// Il est nécessaire de pointer vers un fichier de police
Zend_Barcode::setBarcodeFont('chemin/vers/une/font/Vera.ttf');

// Options de l'objet barcode
$barcodeOptions = array('text' => 'FABIEN-PDF-BARCODE', 'height' => 300);

// Options de l'objet renderer
$rendererOptions = array('topOffset' => 10, 'leftOffset' => 10);

// On dessine le barcode dans notre document PDF
$pdfWithBarcode = Zend_Barcode::factory(
					'code128', 
					'pdf', 
					$barcodeOptions, 
					$rendererOptions
				)->setResource($pdf)->draw();
$pdfWithBarcode->render();
$pdfFilename = 'barcode.pdf';
$pdfWithBarcode->save($pdfFilename);
header('Content-disposition: attachment; filename=' . $pdfFilename);
header('Content-type: application/pdf');
readfile($pdfFilename);

Voici le résultat :

Barcode dans un PDF

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *