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.

Liberated Pixel Art

  
L’ormai diffuso interesse verso l’open source è il sintomo predominante di una nuova serie di idee nate per infoltire di ottimi progetti questo già consolidato mondo. Sempre più iniziative, anche promosse dalle aziende più blasonate del settore informatico, nascono e permettono a ottimi prodotti di venire al mondo.
Ultimo, ma solo in ordine cronologico, è il progetto partorito dalle menti di Creative Commons, Free Software Foundation ed OpenGameArt che hanno promosso un contest, Liberated Pixel Art, che prevede la creazione di un videogame 100% open source. Il lavoro che sarà decretato il vincitore otterrà un premio di 10000$ che attualmente è in fase di raccolta mediante le donazioni che giungono dagli utenti. Si può partecipare da soli o presentarsi con un team.
La sfida è stata suddivisa in due fasi di gara.
Fase 1

Dal 01/06/12 al 30/06/12
Definita la parte artistica, questa sezione del contest prevede la creazione di quelli che saranno i contenuti grafici del potenziale videogame. In una fase preliminare è stato definito che il gioco che dovrà essere sviluppato avrà un gameplay ed una grafica che rievochino i vecchi RPG del secolo scorso. Punti fondamentali per poter vedere i propri lavori accettati è quella di dover rilasciare tutto i lavoro sotto licenza CC-BY-SA 3.0 e GNU GPL 3.0. Per le immagini il consiglio è di utilizzare il formato PNG, per l’audio e gli effetti sonori brevi il WAV mentre FLAC ed OGG sono preferibile per la musica di sottofondo o altre colonne sonore.
Fase 2
Dal 01/07/12  al 31/07/12
Definita la parte di sviluppo, questa sezione si fa carico dello sviluppo vero e proprio del motore di gioco. I criteri per questa sezione prevedono che il codice deve essere libero e open source e deve essere disponibile sotto la licenza GNU GPL 3.0. Il codice deve essere compilabile su sistemi liberi al 100% e non deve basarsi su librerie proprietarie. Può essere sviluppato su una qualsivoglia piattaforma solo se essa ha una controparte libera che gira su altri sistemi come ad esempio GNU/Linux. Il sorgente deve essere semplice da installare ed usare.
Vi lascio qualche link per approfondire. Partecipare numerosi.
 

PHPersonalBookmarks: i filtri

Cresce, nonostante il tempo a disposizione, il codice che muove il cuore di PHPersonalBookmarks ed ovviamente crescono le funzionalità che vengono proposte a chi ha scelto di utilizzare il software. Ultima, ma solo in ordine cronologico, è la nuovissima funzionalità mediante la quale l’utente potrà filtrare i link mediante url, nome, descrizione e tags. Basterà inserire una qualsiasi stringa contenuta all’interno della riga che si vuole ricerca ed avremo la nostra lista prontamente filtrata.

Buon uso a tutti!