Le miniguide di UbaWeb

Da testo ASCII a PDF (ora anche UTF-8)

Premessa Torna su

27 giugno 2012 - Linux 2.6.32-41-generic-pae -Ubuntu i686 GNU/Linux - Ieri mi sono fatto uno script in 'bash/awk' (ho scoperto ieri awk, è meraviglioso, provatelo!) per intabellare e calcolare vari dati, filtrati da un file di testo, per poi creare un file di resoconto in testo semplice. Solo che, per distribuire ad altri questo file, dovrei farne tre versioni: Linux, Mac e Windows. Così ho pensato di convertirlo in PDF.
Con Synaptic ho cercato tra vari programmi installati, ne ho trovati molti che convertono da PS a PDF ma nessuno da testo a PDF. Googolando stessa cosa.
Idea! Faccio prima a farmi uno scriptino che utizza quello che ho, che a cercare in rete!
Avevo già utilizzato ps2pdf (credo che venga installato con Ghostscript) e ho visto che enscript converte testo in PS.
Ho tutto ciò che serve!

Lo script Torna su

In un balletto, con poche righe di codice, mi sono levato il pensiero:

... nome_file="resoconto.txt" ... enscript "$nomefile" -q -p $nomefile.ps ps2pdf $nomefile.ps $nomefile.pdf rm -f $nomefile.ps exit

Più semplice di così!
Poi ho pensato che anche un piccolo script, da usarsi da solo, sarebbe stato comodo; così è nato txt2pdf.
Ho:
generalizzato l'input,

if [ "$1" != '' ];then file_resoconto="$1" else echo -e "Non hai inserito il parametro contenente il nome del file da convertire (inserire anche il percorso se lo script è eseguito da una directory diversa da quella del file di testo). Non è un problema! 8-) Digitalo, poi premi Invio: " read file_resoconto fi

fatto un controllo su leggibilità e quindi esistenza del file,

if [ -r "$file_resoconto" ];then ext_no=${file_resoconto%%.*} #rimuovo l'estensione echo -e "\nIl file di testo sarà salvato come $ext_no.pdf\n" else echo -e "8-| Attenzione il file $file_resoconto non esite,n\non è leggibile oppure il percorso al file non è corretto! 8-|" exit 1 fi

verificato che i programmi necessari fossero installati,

echo 'Ok? Creo la versione PDF? (s/n)' read pdf if [[ ($pdf != 's') && ($pdf != 'S') ]];then exit fi # verifica programmi path_enscript=$(which "enscript") if [ "$path_enscript" == "" ] then echo '8-| Attenzione "enscript" non risulta installato! 8-|' exit 1 fi path_ps2pdf=$(which "ps2pdf") if [ "$path_ps2pdf" == '' ];then echo '8-| Attenzione "ps2pdf" non risulta installato! 8-|' exit 1 fi

convertito in PS, personalizzata l'header (spiegazione nei commenti) e verificato la corretta esecuzione,

enscript --header='$n del %F||Pagina $% di $=' "$file_resoconto" -p "$file_resoconto".ps # -p:output su file; -q: segnala solo errori fatali # --header='sinistra|centro|destra' # $n:nome del file; %F:data dd.mm.yyyy||$%:pagina corrente; $=:totale pagine #verifica esecuzione if [ "$?" != "0" ];then echo -e "\n8-( Spiacente non è stato possibile convertire il file di testo in ps 8-(" exit 1 fi

convertito in PDF e verificato la corretta esecuzione,

ps2pdf $file_resoconto.ps $ext_no.pdf #verifica esecuzione if [ "$?" != "0" ];then echo -e "\n8-( Spiacente non è stato possibile convertire il file in pdf 8-(" # exit 1 # decommentare se NON si vuole cancellare il file .ps else echo -e "\t 8-) Ok! Creato $ext_no.pdf 9-)\n Ciao" fi

cancellato il file .ps.

rm -f "$file_resoconto".ps if [ "$?" != "0" ];then echo -e "\n8-(Non è stato possibile cancellare $file_resoconto.ps, \n Dovrà essere cancellato manualmente. 8-(" exit 1 fi exit 0

Fine! 8-)

Il file completo è questo: txt2pdf.sh; ha qualche commento in più ma utilizza il codice riportato finora.
Si potrebbe migliorare facendo qualche controllo aggiuntivo: come la verifica del mime e altro ...
...per ora lo lascio così! 8-p

Uso Torna su

Scaricare il file txt2pdf.sh, renderlo esguibile con chmod +x txt2pdf.sh.
Dalla directory in cui si è salvato, eseguirlo digitando: ./txt2pdf.sh file_da_convertire e premere il tasto Invio; verificato che non manchi nulla viene indicato dove e con che nome verrà creato il file PDF, se va bene premere s e poi Invio.
Se ci fossimo dimenticati di passare come parametro il nome del file da convertire, ci verrà chiesto di farlo. (Perché nessuno usa questo metodo?!?!?)
Per comodità andrebbe salvato nella directory user/local/bin o in un'altra directory presente nel PATH, in modo da poter eseguire lo script da qualsiasi posizione, naturalmente, indicando il percorso completo del file da convertire.

Se vedete errori o avete fatto miglioramenti siete pregati di farmi un fischio! info@ubaweb.it
Alla prossima 9-)

Note (dolenti) Torna su

Porka miseria 8-\, per quello che devo fare io va bene ma... mi sono accorto che enscript non supporta la codifica UTF-8 e peggio ancora non supporta nemmeno quella ISO 8859-15 (che ha il simbolo dell'euro €); quindi se si utilizzano lettere accentate: il file di testo deve essere salvato in ISO 8859-1 o anche in ISO 8859-15 a patto che non si usino simboli non presenti in ISO 8859-1 come appunto €. Se il file non ha caratteri non presenti nell'ISO 8859-1 si può utilizzare anche l'UTF-8 che è la mia codifica di default, ma porka vakka... 8-|

 

Aggiornamento: da testo UTF-8 a PDFTorna su

1 luglio 2012 - Oggi sono tornato a lavorare sullo script, ho provato "a2ps" che dovrebbe supportare la codifica UTF-8 invece dopo varie prove ho verificato che purtroppo non supporta questa codifica. Peccato perché a2ps ha una marea di opzioni utili.
In Synaptic ho visto che u2ps converte file UTF-8 in PS, quindi l'ho installato con
sudo apt-get install gnome-u2ps.
Poi ho modificato il codice in modo da: eseguire enscript se il file da convertire è diverso da UTF-8, altrimenti eseguire u2ps.
Avrei potuto inserire del codice per convertire in UTF-8 il file da convertire in PDF, in modo da utilizzare solo u2ps; ma visto che a volte non è necessario utilizzare la codifica UTF-8 ho lasciato la possibilità di usare enscript.

Naturalmente ho aggiornato il file dello script txt2pdf.sh scaricabile.
Dimenticavo... l'estensione ".sh" può essere eliminata dal nome del file, non è necessaria; io generalmente la inserisco per identificare i vari tipi di linguaggio utilizzati negli script.
Se avete qualche suggerimento da darmi potete scrivermi all'indirizzo: info@ubaweb.it.
Alla prossima! 8-)

Torna su
Sito realizzato da: UbaWeb di Giovanni Ubaldi

Licenza Creative Commons Tutto il contenuto di questo sito se non diversamente dichiarato è di Giovanni Ubaldi ed è distribuito con Licenza:

Creative Commons Attribuzione - Condividi allo stesso modo 4.0 Internazionale.