Gestire i pdf con pdftk e aggiungere un logo



|

Capita spesso di trovare dei pdf e non poterli modificare, se si avesse il file sorgente basterebbe aprirlo, fare le opportune modifiche e ristampare il pdf; purtroppo spesso non lo si ha e se si vogliono fare delle modifiche bisogna lavorare direttamente sui pdf.

Pdftk è un'utility multipiattaforma(Windows, Linux, Freebsd,..) molto comoda per scrivere, dividere, unire, crittare i pdf; i suoi usi possono essere sconfinati, visto che si tratta di un'applicazione da console con input e output.

Volendo esiste anche una gui, ma il suo utilizzo è molto semplice, ecco qualche esempio:

pdftk miopdf.pdf burst #separa miopdf.pdf in pdf da una pagina sola

pdftk miopdf.pdf background sfondo.pdf output pdf-con-sfondo.pdf # crea un nuovo file con lo sfondo aggiunto

 L'unico problema che ho riscontrato è che non si può aggiungere un pdf in foreground (primo piano), ma solo come sfondo; quindi se volete sbiancare una parte del pdf(per risparmiare toner) o aggiungerci un logo non potete farlo.. ecco allora che con qualche stratagemma si riesce ad ottere il risultato voluto con un semplice script in ruby:

- divide il pdf
- applica la pagina singola come background al logo
- ricompatta il tutto in un nuovo file

logo.pdf è il pdf che volete sovrapporre all'originale, potete farlo con Openffice.org

ecco qui:

 #!/usr/bin/ruby

### pdf-impaginator.rb - applica un logo e riordina le pagine di un pdf
### si usa così: ruby pdf-impaginator.rb original.pdf logo.pdf output.pdf

pdffile=ARGV[0]
p pdffile
markfile=ARGV[1]
p markfile
outfile=ARGV[2]

new_prefix="nuovo"

### Volendo potete cambiare l'ordine delle pagine per motivi di stampa ###

num1=0
num2=2
num3=0
num4=-2

#split OK
puts "Separo le pagine.."
system("pdftk "+ pdffile+" burst")

#mark
puts "Marchio e riordino"
cmd=IO.popen("ls pg_*.pdf")

page_counter=1
while pagefile=cmd.gets
pagefile=pagefile.gsub("\n","")

if (page_counter % 4) == 0
page=page_counter+num4
elsif (page_counter % 4) == 1
page=page_counter+num1
elsif (page_counter % 4) == 2
page=page_counter+num2
elsif (page_counter % 4) == 3
page=page_counter+num3
end

zeros="0"*(4 - page.to_s.length)
puts "pdftk "+markfile+" background "+ pagefile+" output "+new_prefix+"_"+ zeros+""+page.to_s+".pdf"
system("pdftk "+markfile+" background "+ pagefile+" output "+new_prefix+"_"+ zeros+""+page.to_s+".pdf")

page_counter+=1
end

#merge
puts "Ricostruisco il pdf"
system("pdftk "+new_prefix+"* cat output "+outfile)


#del
puts "Elimino i temporanei"
#system("rm "+new_prefix+"* pg_*")
cmd.close

Con l'ultima versione di

Con l'ultima versione di pdftk (1.41) si può mettere il logo in foreground mettendo 'stamp' al posto di background. Non penso sia necessario scompattare le pagine, fa tutto da solo

Pdftk

Ottima utility, ottima guida!