Creare etichette con PHP

La stampa di etichette è una funzionalità presente in molti gestionali e sicuramente indispensabile per quei clienti che hanno a che fare con la spedizione di lettere e simili.
Per le applicazioni web, le strade percorribili non sono molte; in questo articolo mostro una soluzione che ho trovato molto soddisfacente.

Utilizzo

La classe che ho scritto estende le funzionalità di un’altra, scritta da Laurent Passebecq, che esegue la maggior parte del lavoro. Quest’ultima si occupa di creare e restituire un file PDF, scrivendo il testo, secondo la configurazione del formato dell’etichetta. All’interno delle due classi sono già presenti alcuni formati, ma è comunque possibile passare come parametro del costruttore anche un nuovo formato.
Nel seguente esempio stampo una singola etichetta nel formato 101700 (70×36 mm):

// crea l'oggetto e imposta il formato
$pdf = new PdfLabel(PdfLabel::$labelFormats['101700']);
$pdf->Open();

// font size
$pdf->Set_Font_Size(10);

// font family
$pdf->Set_Font_Name('arial');

// numero di etichette da lasciare vuote
$pdf->skipLabels(0);

// testo dell'etichetta
$text = "Mario Rossi\n";
$text.= "via Garibaldi n.116\n";
$text.= "47900 Rimini (RN)\n";
$text.= "ITALIA";
$pdf->Add_PDF_Label($text);

// output del PDF con le etichette
$pdf->Output('labels.pdf','D');

Tra le feature più evolute, è possibile stampare il foglio dando un offset di etichette da lasciare vuote; questa funzionalità è molto utile nel caso in cui si voglia utilizzare un foglio che è già stato precedentemente stampato.

Demo

La demo è consultabile a questa pagina

Download

Il pacchetto completo è scaricabile QUI

Risorse

http://www.fpdf.org/
http://www.fpdf.org/en/script/script29.php

15 thoughts to “Creare etichette con PHP”

  1. Ciao, sto cercando di utilizzare il pacchetto per la stampa etichette, ma effettuando delle prove ottengo vari errori: con quale versione di PHP si può utilizzare il tutto ?

  2. Ciao, complimenti per il blog.
    E’ possibile definire un size o un colore diverso per le diverse righe dell’etichetta. Avrei bisogno di aumentare solo la dimensione di una riga !

    Grazie

    1. il colore non saprei, però la dimensione delle etichette può essere modificata in modo da creare qualunque tipo di etichetta: controlla come si definisce un formato di etichetta dentro la classe PdfLabel e così pure in PDF_Label

  3. Grazie, ma non riesco proprio a cambiare la dimensione del font su una singola riga. Se cambio il parametro $pdf->Set_Font_Size(12); chiaramente viene applicato all’intera etichetta. Non è possibile definire questo parametro per la singola riga dell’ etichetta ?
    (in questo caso le righe sono definite come array )

    Grazie

  4. Ciao ho implementato la stampa e va alla grande, solo un piccolo problema: le etichette vengono stampate per colonna occupando l’intera pagina in vercale, come posso fare per stamparle su righe orizzontali?
    Grazie 🙂

  5. come si può adattare lo script al recupero dati da un database mysql?
    il suo script prende sempre lo stesso utente…
    saprebbe aiutarmi?

    grazie infinite

  6. Molto interessante, ma effettivamente si può estendere a una rubrica intera da una tabella di un database? appunto come chiedeva credo anche stanislao, grazie e complimenti.

    1. certo, si può estendere in modo da utilizzare una qualunque fonte di dati, quello proposto è solo un semplice esempio per illustrare il funzionamento.

      Ad esempio se si volessero prendere i dati da un database MySQL:

      $conn = mysql_connect("localhost", "mysql_user", "mysql_password");
      
      mysql_select_db("mydbname");
      
      $sql = "SELECT cognome, nome, indirizzo, citta, nazione FROM   clienti";
      
      $result = mysql_query($sql);
      
      while ($row = mysql_fetch_assoc($result))
      {
          // testo dell'etichetta
      	$text = $row['cognome']." ".$row['nome']."\n";
      	$text.= $row['indirizzo']."\n";
      	$text.= $row['citta']."\n";
      	$text.= $row['nazione']."\n";
      	$pdf->Add_PDF_Label($text);
      }
      
  7. Ciao! Complimenti! Ma volevo sapere una cosa..
    Ho aggiunto al tuo codice un nuovo tipo di etichetta delle dimensioni che interessa a me:
    /* ETICHETTE 52 x 30 */
    ‘276883’ => array(
    ‘name’=>’276883’,
    ‘paper-size’=>’A4’,
    ‘metric’=>’mm’,
    ‘marginLeft’=>0,
    ‘marginTop’=>0,
    ‘NX’=>4,
    ‘NY’=>10,
    ‘SpaceX’=>0,
    ‘SpaceY’=>0,
    ‘width’=>52,
    ‘height’=>30,
    ‘font-size’=>8

    così come nel file PDF_label:

    ‘276883’=>array(‘name’=>’276883′,’paper-size’=>’A4’, ‘metric’=>’mm’, ‘marginLeft’=>0,’marginTop’=>0, ‘NX’=>4,’NY’=>10,’SpaceX’=>0,’SpaceY’=>0, ‘width’=>52,’height’=>30,’font-size’=>8),

    ma quando provo lo script mi restituisce questo errore:
    FPDF error: Incorrect unit:

    Potete aiutarmi in qualche modo? sbaglio qualcosa?
    Grazie mille!!

  8. Complimenti per l’ottimo lavoro.
    Una domanda: è possibile inserire, sull’etichetta un’immagine e avere i testi con font diversi, per esempio, nome cognome in grassetto e il resto normale?
    Ringrazio anticipatamente.

  9. Ciao Andrea, non riesco a risolvere un problema.
    La mia necessità è:
    Realizzato un generatore di etichette, ovvero:
    – prendere i dati da un database mysql
    – creare etichetta solo per i dati con il checkbox ETICHETTA è VERA
    – Nel dababase ci sono due campi “IndirizzoAziendale” ed IndirizzoPrivato”, se indirizzo privato è vuoto stampa il nome della società + c.a (cortese attenzione) + NOME. altrimenti se l’indirizzo privato c’è, stampa direttamente NOME+COGNOME ecc ecc insomma, senza il nome societa e il c.a

    E’ fattibile?

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.