La classe PHP "Label"


La classe abstraite PHP "Label" est une classe qui hérite de la classe PHP TCPDF qui permet de créer des fichiers PDF. Elle a donc exactement les mêmes propriétés, je vous renvoie aux exemples et à la documentation de TCPDF pour toute manipulation de l'objet PDF.

Fonctionnement

"Label" applique un modèle (gabarit / template) à un format définit par le fichier labels.xml sur une page PDF.

Nous avons 4 objets :

  • Le package TCPDF qui génère du PDF et les codes barres
  • Le fichier labels.xml dans lequel est paramétré le format des étiquettes et/ou des planches .
  • Le fichier class.label.php qui va créer la structure PDF à partir du fichier labels.xml.
  • Le fichier class.labelExemple.php qui s'occupe du design de l'étiquette

Pour cela nous devons réaliser 3 choses :

  • Paramétrer le fichier labels.xml.
  • Récupérer / générer les données servant à créer le template (exemple : création d'un formulaire).
  • Créer une classe surchargeant la classe label et implémenter la méthode template().

Exemple

Les données ou paramètres qui servent à la constitution d'une étiquette sont stockées dans un tableau de données (array). Voici un exemple de structure de tableau de données $data :

Array
(
    [0] => Array
        (
            [typeCAB] => C128B
            [cab] => 012845888852
        )
    [1] => Array
        (
            [typeCAB] => C128B
            [cab] => 012845888852
        )
    [2] => Array
        (
            [typeCAB] => C128B
            [cab] => 012845888852
        )
)

Commençons le script d'exemple. Il nous faut tout d'abord importer les classes tcpdf, label et labelExemple (classe héritant de label et implémentant la méthode template()).

<?php

define('CLASS_PATH','class/');

require_once(CLASS_PATH.'tcpdf/config/lang/eng.php');
require_once(CLASS_PATH.'tcpdf/tcpdf.php');
require_once(CLASS_PATH."label/class.label.php");
require_once(CLASS_PATH."label/class.labelExemple.php");
...

Ensuite nous allons créer un tableau à deux dimensions qui dont les données utilisées par le template.

...
// Déclaration du tableau $data et de $label_id 
$data = array();
$label_id = "1";

// On crée notre tableau $info
$info= array (
	'typeCAB'=> 'C128B',
	'cab' => '012845888852'
);

// On ajoute ($info) à $data autant de fois que l'on veux l'étiquette
for ($i=0; $i < 3; $i++){
	array_push($data,$info);
}  
...

On crée un objet label en y passant 4 paramètres :


..
$pdf = new labelExemple( $label_id, $data , CLASS_PATH."label/", "labels.xml", true);
...

Détail des paramètres :
Paramètres Type Description
$label_id string obligatoire

Identifiant d'un format d'étiquette : attribut id de la balise label .

$data array obligatoire

Tableau de données pour la réalisation du gabarit. Chaque entrée dans le tableau correspond à une étiquette (nombre d'étiquettes = count($data) ).

$pathConfig string obligatoire

Chemin vers le répertoire ou est situé le fichier de paramétrage label.xml (avec le "/" à la fin).

$configFile string obligatoire

Nom du fichier de paramétrage (Par défaut : "label.xml" )

$border boolean facultatif

Affiche ou non les traits de séparation de chaque étiquette (peut servir au découpage papier) (Par défaut : false).



Ensuite nous pouvons paramétrer le fichier PDF de la même manière que tous les documents TCPDF.

...
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor("Ludovic RIAUDEL");
$pdf->SetTitle("Etiquettes par kiwi");
$pdf->SetSubject("Création d'étiquettes Code Barre");
$pdf->SetKeywords("TCPDF, PDF, example, test, guide, kiwi");

// remove default header/footer
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);

// remove default margin
$pdf->SetHeaderMargin(0);
$pdf->SetFooterMargin(0);

$pdf->SetAutoPageBreak( true, 0);

//set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);  
...

Une fois que nous avons paramétré le document PDF, nous allons appliquer la méthode privée template() à chaque étiquette avec la méthode public Addlabel().

...
// Création des étiquettes
$pdf->Addlabel();
...

Et pour finir nous créons le document.

...
// Affichage du document dans le navigateur
$pdf->Output("doc.pdf", "I");
...

La méthode template()

Pour créer notre modèle (gabarit / template), nous devons créer une classe surchargeant de la classe label et implémenter la méthode template().

Voici un exemple :
<?php

class labelExemple extends label{

	/**
	 * Template d'impression étiquette
	 */
	function template($x, $y, $dataPrint){

	$x += $this->labelMargin;
	$y += $this->labelMargin;
	 
		// Etiquette
		$aff_border = 0;
		$ref_font = max($this->labelWidth, $this->labelHeight);
		$des_font = 0.5* min($this->labelWidth, $this->labelHeight);

		$this->setX($x);
		$this->setY($y, false);

		$this->SetFont("helvetica", "BI", 1.2*$des_font);
		$this->setX($x);
		$this->Cell(0 , 0,"Classe Label",$aff_border,1,'L',0);
		$this->SetFont("helvetica", "BI", $des_font);
		$this->setX($x);
		$this->Cell(0 , 0,"http://cab.madvic.net/",$aff_border,1,'L',0);
		$this->setX($x);
		$this->Cell(0 , 0,"madvic@gmail.com",$aff_border,1,'L',0);

	}

}//End of class labelExemple

?>

Paramètres Type Description
$x int obligatoire

Coordonnée X des ordonnées du coin en haut à gauche de l'étiquette .

$y int obligatoire

Coordonnée Y des abcisses du coin en haut à gauche de l'étiquette .

$dataPrint array obligatoire

Tableau à une dimension relative à l'étiquette.


Téléchargement

La classe label et ses exemples ou un package comprenant la classe tcpdf sont sur sourceforge :