ReportLab e Python: Creare codici a barre

Come abbiamo avuto modo di vedere, mediante l’uso della libreria offerta da ReportLab, è possibile creare in maniera molto flessibile dei PDF che soddisfino tutti le nostre necessità. Ora però, una volta capito come creare un documento, abbiamo la necessità che esso venga riempito con qualcosa di utile. 
In ogni contesto lavorativo, e quindi a maggior ragione in un contesto industriale come quello oggetto d’esame nello scorso articolo, la praticità che l’informatica può offrire, è lo strumento migliore che aiuta l’utente a disfarsi di un grosso carico di lavoro ritenuto inutile. Dotare il proprio documento di un codice a barre può servire per effettuare numerose operazioni utili nel futuro come  ricerche, organizzazione di documenti, generazione di riferimenti rapidi da riportare su eventuali documenti cartacei, etc…

Ora vediamo come sfruttare ReportLab per creare un codice a barre da inserire nel nostro documento.
Il codice da esaminare è il seguente:

—– Python —–
#!/usr/bin/env python

from reportlab.pdfgen import canvas (1) 

from reportlab.lib.units import mm (2)
from reportlab.graphics.barcode import code39 (3)

mio_pdf = canvas.Canvas(‘mio.pdf’) (1)
# —– imposta le dimensioni

mio_pdf.setPageSize((204, 65)) (1)

# —– genera ed imposta il barcode
barcode = code39.Extended39(‘1234’, barWidth=0.5*mm,barHeight=8*mm) (4)
barcode.drawOn(mio_pdf, 10*mm, 10*mm) (5)

# —– genera e salva il pdf
mio_pdf.showPage() (1)
mio_pdf.save() (1)
———-
 
Anche questa volta, il sorgente da analizzare è molto semplice e racchiude solo lo stretto necessario affinché venga compreso l’uso dei codici a barre. 
Il codice che è già stato esplicato nel precedente articolo (1) non verrà ritrattato e pertanto vi invito ad una rilettura del precedente post per comprenderne il significato ed il comportamento.
Innanzitutto partiamo dall’inclusione di una nuova voce (2) che ci permette di convertire al volo tutte le unità di misura (che vengono richieste in pollici) in millimetri. In questo modo la generazione dei documenti ed il calcolo delle misure risulterà molto più semplice ed immediata. Successivamente (3) è presente la vera e propria importazione del modulo che si occupa di generare il nostro codice a barre. La funzione da utilizzare è Extended39. Essa riceve un parametro e restituisce il riferimento all’oggetto barcode. Il parametro da passare alla funzione è la stringa da trasformare in codice a barre. Nel nostro esempio si è scelto di convertire la stringa ‘1234’. Si tenga presente che la funzione accetta altri parametri opzionali e due di essi sono stati inseriti nell’esempio. barWidth e barHeight servono, infatti, ad impostare, rispettivamente, larghezza ed altezza dell’immagine che verrà generata. Si noti come per tale situazione si sia usata la variabile mm, precedentemente (1) importata. Come già detto, essa converte automaticamente i millimetri indicati in punti. Subito dopo aver generato il nostro oggetto barcode possiamo “disegnarlo” all’interno del pdf con il suo metodo drawOn. Esso accetta tre parametri: un oggetto di tipo canvas (quello che stiamo usando per generare il nostro pdf), nel quale inserire l’immagine, la posizione sull’asse orizzontale e quella sull’asse verticale nel nostro documento della stessa.
Come si può notare anche la generazione dei codici a barre è molto elastica e potente con questo strumento e nella documentazione ufficiale si possono trovare altri riferimenti ad altre funzioni certamente utili.

Disponibili i sorgenti dell’originale Prince of Persia

Come era stato preannunciato in un precedente post, una fortuita coincidenza aveva permesso a Jordan Mechner di riottenere i sorgenti dell’orginale Prince of Persia che risultavano perduti ormai da numerosi anni. Lo stesso sviluppatore, dopo il ritrovamento del proprio tesoro, aveva promesso che dopo un aggiornamento del codice avrebbe provveduto a caricarlo in modo da rendere il tutto idoneo ad un rilascio Open Source in grande stile. La notizia a fatto il giro del mondo e la gente era in attesa che quanto detto divenisse realtà.
Per tutti i nostalgici e per i curiosi finalmente la parola è stata promessa e grazie all’hosting offerto da GitHub ora è possibile esplorare, scaricare e, perchè no, forkare il progetto per far nascere qualcosa di nuovo o ridar vita a qualcosa di vecchio.

 
Sicuramente la notizia è tra le più interessanti dell’ultimo periodo e c’è la certezza che qualcuno e già all’opera o lo sarà a breve per portare questo piccolo capolavoro della storia dell’informatica sulle più recenti piattaforme in circolazione. Forse lo troveremo a breve su le nostre linux box o nei nostri mac oppure vedremo il principe eseguire i celebri salti in una finestra di Windows. Rimane comunque il fatto che la storia e storia e questo  codice ne è sicuramente un pezzo importante.

ReportLab: Creare PDF con Python

Ritorniamo un po’ a parlare di quello che più ci piace fare di più: sviluppare software! 
Tempo fa ero alla ricerca di un ottimo metodo che mi permettesse di stampare etichette per un processo industriale. La scelta ricadde su Python per una serie di motivi particolari legati al sistema in uso su le macchine presenti in loco. Ora il dilemma era scegliere la libreria migliore per generare dei PDF da inviare alle macchine di stampa. Scriverne una nuova sarebbe stata un’enorme perdita di tempo e visto che, fortunatamente, viviamo in un mondo costellato di ottimi progetti Open Source, dove è possibile trovare sempre quello che fa al caso proprio, mi sono messo alla ricerca di qualcosa che mi aiutasse in questa problematica. Nelle ricerche effettuate mi sono imbattuto in numerosi progetti interessanti ma uno in particolare pare essere completo ed altamente funzionante: la libreria pdfgen di reportlab. Esistono due versione della stessa libreria, quella base e quella plus. Per i nostri scopi quella più semplice va benissimo ed è anche quella che troveremo nei nostri repository.
Per iniziare ad utilizzare pdfgen dobbiamo prima installare il necessario. Basterà recarsi nel proprio gestore di pacchetti ed installare python-reportlab o digitare nel terminale (per sistemi debian.based):

# apt-get install python-reportlab

A questo punto possiamo includere la libreria nei nostri sorgenti python con:
import reportlab.pdfgen
Analizziamo ora un semplice script per vedere il funzionamento di questo strumento:
—– Python —–
#!/usr/bin/env python

from reportlab.pdfgen import canvas (1)
from datetime import datetime

mio_pdf = canvas.Canvas(‘mio.pdf’) (2)
# —– imposta le dimensioni a 7.2 x 2.3 cm
mio_pdf.setPageSize((204.0944882400, 65.1968504100)) (3)

# —– scrive la data di oggi nel pdf
mio_pdf.drawString(0,54,str(datetime.today())) (4)
# —– genera e salva il pdf
mio_pdf.showPage() (5)
mio_pdfp.save() (6)
———-
Come si vede il codice è molto semplice ma molto potente. Analizziamolo passo per passo anche se i commenti dovrebbero essere di per sè molto chiari. Partendo dal primo rigo di codice utile, si importa semplicemente la funzione canvas dalla libreria (1). Tale funzione è quella che si occupa di “disegnare” il documento ed il suo contenuto. Sarà la funzione che più utilizzerete nel vostro codice e perciò vi conviene studiarla per bene. Successivamente (2) viene generato il contenitore per i nostri dati e si definiscono le dimensioni in punti (3). Al suo interno poi si definiscono le coordinate in stile cartesiano (a partire dal punto in basso a sinistra che rappresenta lo 0,0) in cui inserire il nostro contenuto. Qui (4) si è scelto di stampare la data di oggi in un punto indicativamente in alto a sinistra. Infine (5) si genera il PDF con tutto ciò che è stato creato e lo si salva (6) nella path in cui viene eseguito il nostro script.
La libreria è molto potente e permette di definire numerosissimi valori per generare al meglio il nostro documento secondo le nostre esigenze. Per la documentazione completa vi rimando al sito ufficiale che risulta essere completo ed esaustivo nella maggior parte dei casi. 
Per ogni dubbio non esitate ad utilizzare i commenti. Cercherò di aiutarvi.