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




Pdftk
Ottima utility, ottima guida!