Stampare su PDF e aggiungere uno sfondo con Samba e Pdftk

Da anni esistono molti programmi per creare PDF da qualunque applicazione: si comportano come normali stampanti che, anzichè produrre un documento cartaceo, salvano le stampe su file PDF. Alcuni di essi sono gratuiti (come l’ottimo CutePDF Writer, per Windows, o il pacchetto Cups-PDF, disponibile praticamente su ogni distribuzione Linux), ma le funzionalità più avanzate sono solo a pagamento.

Il problema del giorno è avere a disposizione una stampante PDF che aggiunga uno sfondo predefinito a tutte le pagine: lo sfondo sarà un file PDF di una sola pagina. La stampante dovrà essere utilizzabile, anche in rete, sia da Windows che da Linux.

Uno strumento di questo tipo può tornare utile in diverse situazioni:

  • Software gestionale dell’anteguerra che stampa solo testo su modulo continuo, fornito a caro prezzo da una tipografia
  • Lettere su carta intestata da inviare via mail senza troppi scazzi
  • Documenti aziendali con un logo “leggero” come sfondo
  • Varie ed eventuali, da indicare nei commenti!

Strumenti necessari

Per realizzare la nostra stampante PDF, c’è bisogno di un PC (o una macchina virtuale) e di una distribuzione Linux. Questo post di basa su Debian/Ubuntu, ma qualunque distribuzione moderna andrà bene. Non è necessario l’ambiente grafico, ma la sua presenza non darà particolare fastidio.

I pacchetti di cui avremo bisogno saranno Samba (per creare e condividere in rete la stampante virtuale), Pdftk (un comodo insieme di strumenti per manipolare file PDF) e Ghostscript (insieme di programmi per manipolare dati Postscript, come quelli che arriveranno alla nostra stampante).

Sarà inoltre necessario lo sfondo da inserire nelle stampe. Per fare delle prove, puoi scaricare un semplice esempio, poi basterà sostituirlo con quello che preferisci.

Configurazione della stampante PDF

Per prima cosa, installiamo i pacchetti necessari e facciamo una copia del file di configurazione di Samba, giusto perchè non si sa mai. Avremo anche bisogno di una directory in cui salvare i file PDF creati dalla nostra stampante e gli sfondi da aggiungere alle stampe.

sudo apt-get install samba pdftk ghostscript
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup
sudo mkdir /var/spool/pdf/sfondi
sudo mkdir /var/spool/pdf/stampe
sudo chmod -R 777 /var/spool/pdf

A questo punto, dovremo copiare nella directory /backgrounds lo sfondo desiderato (chiamandolo background.pdf) e poi si può partire con la configurazione. Andremo ad aggiungere, con il nostro editor di testo preferito, due sezioni nel file di configurazione di Samba (/etc/samba/smb.conf)

[stampante]
comment = Stampante PDF
printing = BSD
path = /var/spool/pdf
printable = yes
guest ok = yes
create mask = 0666
directory mask = 0777
use client driver = yes
print command = gs -dNOPAUSE -dBATCH -q -sDEVICE=pdfwrite -sOutputFile=”%s.tmp.pdf” “%s”; \
pdftk “%s.tmp.pdf” background sfondi/background.pdf output “stampe/%s.pdf”; \
rm “%s”; rm “%s.tmp.pdf”;
lpq command =

[pdf]
comment = Stampe PDF
path = /var/spool/pdf/stampe
guest ok = yes
browseable = yes
writable = yes
create mask = 0666
directory mask = 0777

La prima sezione crea e condivide la stampante vera e propria. Il parametro “print command” dice a Samba cosa fare dei dati in arrivo: come prima cosa Ghostscript si occuperà di convertire in PDF la stampa, per poi darla in pasto a Pdftk che applicherà lo sfondo a tutte le pagine e salverà il file risultante nella directory desiderata.

La seconda sezione condivide la directory in cui verranno salvate le stampe, in modo da potervi accedere dalla rete come una qualunque condivisione Windows.

Dopo aver aggiunto le due sezioni, è necessario riavviare Samba (sudo /etc/init.d/samba restart). Vi lascio come (semplice) compito per casa la creazione di un utente che possa accedere alla stampante e alla condivisione.

Installazione della stampante sotto Windows

Una volta configurata la stampante, bisogna installarla sotto Windows. Collegarsi alla Linux box da una qualunque finestra di Windows (\\indirizzo-ip), inserire le credenziali dell’utente (creato come compito per casa) e collegare la stampante condivisa.

Come driver, andrà bene un qualunque postscript: consiglio una HP Color Laserjet, facendo attenzione che il driver sia “PS”. Io ho usato “HP Color Laserjet 8550-PS“.

E’ buona cosa creare un collegamento alla cartella (perchè siamo nel mondo Windows, in cui le directory si chiamano “cartelle”…) “\\indirizzp-ip\cartella”, definita nella seconda sezione e in cui troveremo i file PDF creati dalla nostra nuova stampante.

Per fare una verifica del funzionamento, si potrà stampare la pagina di prova di Windows e controllare che nel PDF creato compaia lo sfondo corretto.

Altre applicazioni possibili

Considerato il fatto che il parametro “print command” permette di utilizzare tutta la potenza della shell, si può pensare ad applicazioni più complesse di questo tipo di configurazione. Ecco alcuni esempi che mi vengono in mente al volo, ma nei commenti ogni idea è benvenuta:

  • Differenziare le cartelle di destinazione a seconda dell’utente connesso alla stampante
  • Inviare il PDF via e-mail anzichè salvarlo
  • Inviare un fax con il risultato della stampa
  • Fare un bel redirect a /dev/null e vaffanculo… :)

Note sulla sicurezza

Impostare i permessi come ho indicato non è una buona idea, serve solo a far funzionare rapidamente le cose. Se volete mettere in produzione una cosa del genere, fate attenzione alle questioni riguardanti la sicurezza, sottovalutarle nell’illusione di risparmiare tempo vi procurerà solo problemi. Augh!

Altre risorse utili

This entry was posted in tuxfeed and tagged , , , , , , , , . Bookmark the permalink.

11 Responses to Stampare su PDF e aggiungere uno sfondo con Samba e Pdftk

  1. Napolux says:

    Ottimo articolo, potrebbe tornare molto utile qui da noi!

  2. Pingback: www.pubblicanews.it

  3. Pingback: ZicZac.it, clicca qui e vota questo articolo!

  4. Matteo says:

    @Napolux:
    Al vostro servizio! :)

  5. Napolux says:

    Eh beh. Vuoi mettere avere una stampante che ti stampa già in PDF su carta intestata ad esempio?

  6. Matteo says:

    @Napolux:
    Niente a che vedere con la risposta che potrai dare al fornitore del tuo antichissimo gestionale, quando ti proporrà l’acquisto (ad un costo probabilmente esorbitante) del modulo di stampa fatture in PDF :)

  7. Fabio says:

    Attualmente uso ImageMagick per scrivere nell’estrema parte bassa e all’estrema sinistra (in verticale) data e protocollo dei fax ricevuti da Hylafax, questo perché in qualche caso uno dei due potrebbe essere “coperto” da altri contenuti del fax.
    Questo approccio invece mi fa pensare a qualcosa del tipo:
    1) riduco leggermente la dimensione dell’immagine fax ad un po’ meno dell’A4
    2) applico uno pdf di sfondo generato dinamicamente, contenente protocollo e data, nella parte alta o bassa secondo preferenza.
    3) salvare il tutto…
    chi mi aiuta con pdftk? :-)
    comunque grazie per l’articolo, sicuramente ricco di spunti interessanti.
    ah… dimenticavo: c’è gestionale e gestionale… a prezzi di mercato abbastanza competitivi una nota azienda di San Marino offre un gran bel prodotto da molti anni, lato server gira anche su Linux, gestisce sia le antiche stampanti ad aghi che i più moderni PDF, era giusto per informazione, non lavoro per loro e sono solo un utente mediamente soddisfatto del prodotto.

  8. Pingback: Best of Week #4 | Gioxx's Wall

  9. Stefano says:

    Scusate amici, questa idea per me è ottima, ma io non dispongo di una rete linux ma solo di un pc window, e devo stampare dei dati su un un prestampato A4, come si procedere avendo solo uno spaurito PC window XP ?
    Ringrazio a tutti e in particolare chi mi aiutera ?
    Cordialmente Stefano

  10. Matteo says:

    @Stefano:
    Così a occhio di direi di installare Virtualbox, e installarci dentro una distribuzione minimale che servirà solo a questo scopo

  11. Pingback: Samba AD e “force user” che non funziona su una condivisione di tipo stampante | Matteo Moro