Convertire ppt in pdf dalla bash con OpenOffice.
11 aprile 2009Spesso mi trovo nella situazione di dover convertire molti file ppt in pdf.
OpenOffice è un ottimo strumento per leggere i ppt su una qualsiasi distribuzione Linux (e non solo) in mancanza di Microsoft Office e fornisce degli ottimi strumenti per la conversione dei documenti in PDF.
Convertire decine di file ppt in pdf con il consueto metodo:
- aprire il file con OpenOffice
- esportarlo/salvarlo in pdf
è troppo laborioso e fa perdere molto tempo!!
Con la versione 3 di OpenOffice ho scoperto una cosa interessantissima: si può avviare l’applicativo come un servizio server.
Ho pensato di avviare così OpenOffice come demone e di utilizzare un software apposito che mi permettesse di passare al nuovo demone i miei file ppt e convertirli in pdf.
Cercando in rete ho trovato JODConverter.
Esattamente ciò di cui avevo bisogno: con JODConverter ho la possibilità di passare a OpenOffice lanciato in backgroud, cioè come demone o servizio, i miei file ppt e di ottenere la conversione in pdf.
Per automatizzare le varie operazioni mi sono creato un piccolo script bash che riporto qui sotto.
Credo di averlo ben commentato ed è autoesplicativo di conseguenza non sto a spiegare meglio come si lancia OpenOffice in backgroud e come si usa JODConverter. Per avere maggiori informazioni rimando alle pagine ufficiali dei due progetti:
JODConverter
OpenOffice
Alcune operazioni preliminari per far funzionare correttamente lo script:
- scaricare e scompattare il pacchetto contenente JODConverter nella cartella home dell’utente, io nello script utilizzo la versione 2.2.1, modificare le stringhe dello script a seconda della versione o della path del proprio JODConverter;
- leggere il mio precedente articolo su come colorare la bash in quanto lo script contiene delle variabili per colorare gli output utilizzando lo script “colori”.
Il mio script:
#!/bin/bash # .colori è il mio script shell contenente i codici per colorare la bash . colori echo -e "n-----------------------------------------------------------------" echo -e "| Avvio openoffice in modalità backgroud |" echo -e "|$RED ooffice -headless -accept="socket,port=8100;urp;" $Z |" echo -e "-----------------------------------------------------------------n" # con questo comando avvio openoffice come servizio in ascolto sulla porta 8100 ooffice -headless -accept="socket,port=8100;urp;"& # mi salvo da parte il pid del processo così alla fine del lavoro lo uccido senza problemi pidOO=$! # Chiedo se convertire tutti i file ora o se passarli uno ad uno echo -n -e "$GREEN Convertire tutti i file ppt della directory corrente?$Z [s/...]n" read d for file in * do if echo "$file" | grep -q ".ppt" ; then if [[ $d != 's' ]]; then echo -e "Convertire:$RED $file$Z in pdf? [s/...]" read -s -n1 n else n='s' fi if [[ $n = 's' ]] ; then filePDF=${file/%.ppt/.pdf} if [ -f $filePDF ] ; then echo -e " File $RED $filePDF $Z è già convertito: Size is $BLUE$(ls -lh $filePDF | awk '{ print $5 }')$Z" echo -e " File $RED $file $Z di origine Size is $BLUE$(ls -lh $file | awk '{ print $5 }')$Z" # recupero le dimensioni dei file in modo da stampare sullo schermo le info sul loro peso. DimFile0=$(ls -l $file | awk '{ print $5 }') DimFile1=$(ls -l $filePDF | awk '{ print $5 }') let diff="$DimFile0 - $DimFile1" if (($diff >= 1048576)); then scarto=$(echo "scale=2; $diff/1048576" | bc) unita="MByte" else scarto=$(echo "scale=2; $diff/1024" | bc) unita="KByte" fi echo -e " Risparmio di: $BLUE$scarto $unita $Z" echo else echo -e "$GRAY Inizio conversione di $file $(ls -lh $file | awk '{ print $5 }')" # Con questo comando indico a JODConverter di convertire i file # sto utilizzando la versione 2.2.1, il software è stato scaricato e scompattato nella home directory # dell'utente # modificare la path a jodconverter nel caso si utilizzi una versioni differente o posizione diversa del programma java -jar ~/jodconverter-2.2.1/lib/jodconverter-cli-2.2.1.jar $file $filePDF echo -e "conversione finita:$Z" echo -e " File originario$RED $file$Z di Size is $BLUE$(ls -lh $file | awk '{ print $5 }')$Z" echo -e " Convertito in$RED $filePDF$Z di Size is $BLUE$(ls -lh $filePDF | awk '{ print $5 }')$Z" DimFile0=$(ls -l $file | awk '{ print $5 }') DimFile1=$(ls -l $filePDF | awk '{ print $5 }') let diff="$DimFile0 - $DimFile1" if (($diff >= 1048576)); then scarto=$(echo "scale=2; $diff/1048576" | bc) unita="MByte" else scarto=$(echo "scale=2; $diff/1024" | bc) unita="KByte" fi echo -e " Risparmio di: $BLUE$scarto $unita $Z" echo fi let dimtotPDF="$dimtotPDF + $DimFile1" let dimtotppt="$dimtotppt + $DimFile0" fi fi done # Informazioni su peso iniziale e finale di tutti i file convertiti dimtotppt=$(echo "scale=2; $dimtotppt/1048576" | bc) echo -e "Dimensione totale dei file ppt:$RED $dimtotppt$Z MB" dimtotPDF=$(echo "scale=2; $dimtotPDF/1048576" | bc) echo -e "Dimensione totale dei file pdf:$RED $dimtotPDF$Z MB" # Uccido il demone OpenOffice kill $pidOO exit
Tag: Bash, convertire file, jodconverter, openoffice, pdf, ppt, script, script bash, shell


