Initial commit
parent
9ca7363cbc
commit
8114a714c0
@ -0,0 +1,337 @@
|
||||
#!/bin/bash
|
||||
|
||||
#set -x
|
||||
|
||||
function ext {
|
||||
if ls "${arg1}" >/dev/null ;then
|
||||
rm "${arg1}" 2>> log || echo -e "\nimpossibile rimuovere ${arg1}. controlla i log."
|
||||
fi
|
||||
|
||||
if ls ./temp/ >/dev/null ;then
|
||||
rm -r ./temp/ 2>> log || echo -e "\nimpossibile rimuovere la cartella \"temp\". controlla i log."
|
||||
fi
|
||||
|
||||
if ls "${arg1}_orig" >/dev/null ;then
|
||||
mv "${arg1}_orig" "${arg1}" 2>> log || echo -e "\nimpossibile rinominare il file con il nome originale."
|
||||
fi
|
||||
|
||||
exit 1
|
||||
}
|
||||
|
||||
function CUT {
|
||||
w=$(($(pdfinfo ${arg1} | grep "Page size" | awk '{print $5}' | cut -d "." -f 1) / 28)) || exit 1
|
||||
h=$(($(pdfinfo ${arg1} | grep "Page size" | awk '{print $3}' | cut -d "." -f 1) / 28)) || exit 1
|
||||
if [ $w -gt $h ]; then
|
||||
pdfjam -o "${arg1%.pdf}dx.pdf" --clip true --trim "$(($w / 2))cm 0cm 0cm 0cm" "$arg1" >>log 2>&1 || exit 1
|
||||
pdfjam -o "${arg1%.pdf}sx.pdf" --clip true --trim "0cm 0cm $(($w / 2))cm 0cm" "$arg1" >>log 2>&1 || exit 1
|
||||
array[0]="pdfjam -o $arg1 "
|
||||
for ((i=1; i<=$(pdfinfo "$arg1" | grep Pages | awk '{ print $NF }'); i++)); do
|
||||
array[$i]="${arg1%.pdf}sx.pdf $i ${arg1%.pdf}dx.pdf $i"
|
||||
done
|
||||
$(${array[*]} >>log 2>&1 || exit 1)
|
||||
elif [ $w -lt $h ]; then
|
||||
pdfjam -o "${arg1%.pdf}dx.pdf" --landscape --clip true --trim "0cm $(($h / 2)) 0cm 0cm" "$arg1" >>log 2>&1 || exit 1
|
||||
pdfjam -o "${arg1%.pdf}sx.pdf" --landscape --clip true --trim "0cm 0cm 0cm $(($h / 2))" "$arg1" >>log 2>&1 || exit 1
|
||||
array[0]="pdfjam -o $arg1 "
|
||||
for ((i=1; i<=$(pdfinfo "$arg1" | grep Pages | awk '{ print $NF }'); i++)); do
|
||||
array[$i]="${arg1%.pdf}sx.pdf $i ${arg1%.pdf}dx.pdf $i"
|
||||
done
|
||||
$(${array[*]} >>log 2>&1 || exit 1)
|
||||
else
|
||||
echo "la pagina è un cazzo di quadrato!"
|
||||
exit 1
|
||||
fi
|
||||
#rm "${arg1%.pdf}dx.pdf" "${arg1%.pdf}sx.pdf" || true
|
||||
}
|
||||
|
||||
# controlla che si stia lavorando all'interno della cartella "typoshell".
|
||||
clear
|
||||
echo -e "\n--> controllo la pwd..." ; sleep 0.5
|
||||
if ! pwd | grep -q "typoshell$"; then
|
||||
echo -e "\nERRORE: devi lanciare lo script dall'interno della cartella typoshell"
|
||||
ext
|
||||
fi
|
||||
echo -e "* ok!\n" ; sleep 0.5
|
||||
|
||||
# se non viene specificato nessun argomento esci, altrimenti assegna il primo argomento alla variabile "arg1".
|
||||
clear
|
||||
echo -e "\n--> controllo l'argomento e i tool necessari..." ; sleep 0.5
|
||||
if ! [ $# == 1 ];then
|
||||
echo -e "\nERRORE: devi specificare un solo argomento!"
|
||||
ext
|
||||
else
|
||||
# controlla la presenza del tool "detox".
|
||||
if ! which detox >/dev/null ;then
|
||||
echo -e "\nERRORE: non c'è detox."
|
||||
ext
|
||||
fi
|
||||
cp "${1}" . >> log 2>&1 || true
|
||||
if ls "${1}" | grep -qv "/" ;then # se il file originale è nella cartella typoshell crea una copia.
|
||||
cp "${1}" "$(basename "${1}")_orig" >> log 2>&1
|
||||
fi
|
||||
arg1=`detox -v "$(basename "${1}")" | tail -n 1 | awk 'BEGIN { FS = " " } { print $NF }'` # sanifica il nome del file
|
||||
if ! ls "${arg1}" | grep -iq "pdf$" ;then
|
||||
mv "${arg1}" "${arg1}.pdf"
|
||||
arg1="${arg1}.pdf"
|
||||
fi
|
||||
fi
|
||||
|
||||
# controlla la presenza dei programmi necessari
|
||||
if ! file -b "${arg1}" | grep -q "PDF" ;then
|
||||
echo -e "\nERRORE: il file non è un pdf"
|
||||
ext
|
||||
fi
|
||||
|
||||
if ! which pdfinfo >/dev/null ;then
|
||||
echo -e "\nERRORE: non c'è pdfinfo"
|
||||
ext
|
||||
fi
|
||||
|
||||
if ! dpkg -l | grep -q "groff ";then
|
||||
echo -e "\nERRORE: non c'è groff"
|
||||
ext
|
||||
fi
|
||||
|
||||
if ! which pdfjam >/dev/null ;then
|
||||
echo -e "\nERRORE: non c'è pdfjam"
|
||||
ext
|
||||
fi
|
||||
|
||||
if ! which pdfbook2 >/dev/null ;then
|
||||
echo -e "\nERRORE: non c'è pdfbook2"
|
||||
ext
|
||||
fi
|
||||
|
||||
echo -e "* ok!\n" ; sleep 0.5
|
||||
|
||||
# crea la cartella temp.
|
||||
clear
|
||||
echo -e "\n--> creo una cartella temporanea..." ; sleep 0.5
|
||||
if ! mkdir temp; then
|
||||
echo -e "\nERRORE: esiste già una cartella temp oppure non hai i permessi per lavorare in questa cartella."
|
||||
ext
|
||||
fi
|
||||
|
||||
echo -e "* ok!\n" ; sleep 0.5
|
||||
|
||||
# creo un file di log
|
||||
clear
|
||||
echo -e "\n--> creazione di un file di log..." ; sleep 0.5
|
||||
rm -f log
|
||||
touch log || echo -e "\nimpossibile creare il file di log"
|
||||
echo -e "* ok!\n" ; sleep 0.5
|
||||
|
||||
# richiede se sia necessario il cut delle pagine
|
||||
clear
|
||||
echo -e "\nè necessario dividere le singole pagine in due[s/N]?"
|
||||
read flag_cut
|
||||
|
||||
# richiede l'inserimento del numero di pagine per fascicolo.
|
||||
clear
|
||||
echo -e "\nquante pagine per fascicolo?[40] "
|
||||
read fasc
|
||||
|
||||
# richiede se si desidera mantenere i file dei fascicoli separati o meno.
|
||||
clear
|
||||
echo -e "\nmantengo i fascicoli in file separati? [S/n] "
|
||||
read flag
|
||||
|
||||
# se non viene inserito nessun valore imposta il valore di default [40].
|
||||
if [ -z $fasc ] || (($(($fasc % 4)) > 0)) || $(echo $fasc | grep -qv [0-9]); then
|
||||
echo -e "+++ dimensione del fascicolo non specificata o dimensione non valida (deve essere un multiplo di 4!). uso il valore di default (40).\n"
|
||||
fasc=40
|
||||
else
|
||||
echo -e "* ok! numero di pagine per fascicolo: $fasc \n" ; sleep 0.5
|
||||
fi
|
||||
|
||||
# imposta l'offset nella forma 'xcm ycm zcm kcm' rispettivamente sinistra, basso, destra, alto.
|
||||
clear
|
||||
echo -e "\nimposta i margini da tagliare(sinistra, basso, destra, alto)['0cm 0cm 0cm 0cm'] (scrivi solo un numero omettendo \"cm\"):"
|
||||
echo -e "\nmargine sinistro[0cm]: "
|
||||
read trim[0]
|
||||
if [ -z ${trim[0]} ] || echo ${trim[0]} | grep -vq "^[0-9]\{1,2\}\(\.[0-9]\{1\}\)\?$" ;then
|
||||
echo -e "valore omesso o non valido. uso il default: 0cm."
|
||||
trim[0]=0
|
||||
fi
|
||||
echo -e "\nmargine basso[0cm]: "
|
||||
read trim[1]
|
||||
if [ -z ${trim[1]} ] || echo ${trim[1]} | grep -vq "^[0-9]\{1,2\}\(\.[0-9]\{1\}\)\?$" ;then
|
||||
echo -e "valore omesso o non valido. uso il default: 0cm."
|
||||
trim[1]=0
|
||||
fi
|
||||
echo -e "\nmargine destro[0cm]: "
|
||||
read trim[2]
|
||||
if [ -z ${trim[2]} ] || echo ${trim[2]} | grep -vq "^[0-9]\{1,2\}\(\.[0-9]\{1\}\)\?$" ;then
|
||||
echo -e "valore omesso o non valido. uso il default: 0cm."
|
||||
trim[2]=0
|
||||
fi
|
||||
echo -e "\nmargine alto[0cm]: "
|
||||
read trim[3]
|
||||
if [ -z ${trim[3]} ] || echo ${trim[3]} | grep -vq "^[0-9]\{1,2\}\(\.[0-9]\{1\}\)\?$" ;then
|
||||
echo -e "valore omesso o non valido. uso il default: 0cm."
|
||||
trim[3]=0
|
||||
fi
|
||||
sleep 1
|
||||
clear
|
||||
echo -e "\nle pagine di $arg1 saranno tagliate secondo lo schema ${trim[*]} (cm sinistra, cm basso, cm destra, cm alto). ok?[S/n]"
|
||||
read cut_ask
|
||||
case $cut_ask in
|
||||
"n"|"N"|"no"|"NO")
|
||||
echo -e "\nesco dal programma..."
|
||||
ext
|
||||
;;
|
||||
esac
|
||||
|
||||
# scegliere se si desidera omettere alcune pagine.
|
||||
k=0
|
||||
while true; do
|
||||
clear
|
||||
echo -e "\nvuoi escludere alcune pagine dal file?[s/N]"
|
||||
read exclude
|
||||
case $exclude in
|
||||
"yes"|"y"|"Y"|"YES"|"S"|"s"|"SI"|"si")
|
||||
echo -e "\nspecifica solo le pagine da *mantenere* nella forma \"<pag iniziale>-<pag finale>\":"
|
||||
read offset[${k}]
|
||||
k+=1
|
||||
;;
|
||||
*)
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# conferma dell'offset scelto
|
||||
clear
|
||||
if [ -z ${offset[0]} ] ;then
|
||||
echo -e "\nhai scelto di mantenere le seguenti pagine: tutte. ok?[S/n]"
|
||||
else
|
||||
echo -e "\nhai scelto di mantenere le seguenti pagine: ${offset[@]}. ok?[S/n]"
|
||||
fi
|
||||
read confirm
|
||||
|
||||
case $confirm in
|
||||
"n"|"N"|"no"|"NO")
|
||||
clear
|
||||
echo -e "\nesco dal programma..."
|
||||
ext
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
if ! [ -z "${offset[0]}" ]; then
|
||||
clear
|
||||
echo -e "\n--> seleziono le pagine da mantenere: ${offset[@]}..." ; sleep 0.5
|
||||
if ! pdfjam -o "./${arg1}" ${arg1} $(echo ${offset[@]} | sed "s/ /,/g") 2>> log ;then
|
||||
echo -e "\nerrore nell'escludere le pagine dal file"
|
||||
ext
|
||||
fi
|
||||
echo -e "* ok!\n" ; sleep 0.5
|
||||
fi
|
||||
|
||||
case $flag_cut in
|
||||
"y"|"Y"|"yes"|"YES"|"Yes"|"s"|"si"|"SI"|"Si"|"S")
|
||||
clear
|
||||
echo -e "\n sto dividendo le pagine..."
|
||||
if ! CUT ;then
|
||||
clear
|
||||
echo -e "\nERRORE nel dividere le pagine"
|
||||
ext
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# numero di pagine del file pdf.
|
||||
pages=$(pdfinfo $arg1 | grep Pages | cut -d " " -f 11)
|
||||
|
||||
# crea una pagina bianca come modello per aggiungere eventuali pagine bianche in coda al file.
|
||||
clear
|
||||
echo -e "\n--> creo un modello di pagina bianca per completare all'occorrenza l'ultimo fascicolo..." ; sleep 0.5
|
||||
if ! echo "" | groff -T pdf > ./temp/blank.pdf; then
|
||||
echo -e "\nERRORE: nel creare il modello di pagina bianca"
|
||||
ext
|
||||
fi
|
||||
|
||||
echo -e "* ok!\n" ; sleep 0.5
|
||||
|
||||
clear
|
||||
echo -e "\n--> preparazione alla divisione in fascicoli..." ; sleep 0.5
|
||||
for ((i=1, o=0; i<=$pages; i+=${fasc}, o+=1));do # $i: scorre il numero di pagine $fasc per volta; $o scorre l'indice dell'array $a.
|
||||
if [ $((${i} + ${fasc})) -gt $pages ];then # se $(($i + $fasc)) è maggiore del numero di pagine del pdf vuol dire che siamo all'ultimo fascicolo.
|
||||
a[${o}]="${i}-$pages" # aggiunge le indicazioni dell'ultimo fascicolo all'array $a.
|
||||
for ((x=$(($(($i + $((${fasc} - 1)))) - $pages)); x>0; x--));do # reimposta un ciclo a partire dal valore dell'indice dell'array $a raggiunto nel ciclo superiore;
|
||||
a[${o}]+=" ./temp/blank.pdf" # appende all'ultimo indice di $a l'indicazione di una pagina bianca tante volte quante sono le pagine che mancano dal numero di pagine del pdf al temine dell'ultimo fascicolo.
|
||||
done
|
||||
else
|
||||
a[${o}]="${i}-$((${i} + $((${fasc} - 1))))" # crea un array $a con le indicazioni delle pagine di ogni fascicolo nella forma "inizio-fine".
|
||||
fi
|
||||
done
|
||||
|
||||
echo -e "* ok!\n" ; sleep 0.5
|
||||
|
||||
for ((i=0, n=1; i<${#a[*]}; i++, n++));do # per ogni voce dell'array $a (numero di fascicoli):
|
||||
clear
|
||||
echo -e "\n--> divisione in fascicoli...($n)" ; sleep 0.5
|
||||
if ! pdfjam -o "./temp/temp.pdf" --trim "${trim[0]}cm ${trim[1]}cm ${trim[2]}cm ${trim[3]}cm" --clip true $arg1 ${a[${i}]} 2>>log; then # crea un fascicolo.
|
||||
echo -e "\nERRORE: nel creare il fascicolo $n"
|
||||
ext
|
||||
fi
|
||||
echo -e "* ok!\n" ; sleep 0.5
|
||||
clear
|
||||
echo -e "\n--> impaginazione dei fascicoli...($n)" ; sleep 0.5
|
||||
#if ! pdfbook -q -o "./temp/${arg1%.pdf}$(printf "%02d" ${n}).pdf" "./temp/temp.pdf" 2>>log; then # impagina il fascicolo.
|
||||
if ! pdfbook2 "./temp/temp.pdf" > /dev/null 2>>log; then # impagina il fascicolo.
|
||||
echo -e "\nERRORE: nell'impaginare il fascicolo($n)"
|
||||
ext
|
||||
else
|
||||
mv "./temp/temp-book.pdf" "./temp/${arg1%.pdf}$(printf "%02d" ${n}).pdf"
|
||||
fi
|
||||
echo -e "* ok!\n" ; sleep 0.5
|
||||
clear
|
||||
echo -e "\n--> rimozione del file temporaneo...($n)" ; sleep 0.5
|
||||
rm "./temp/temp.pdf" || echo -e "\nERRORE: nel rimuovere il file temporaneo($n). proseguo comunque." # rimuove il file temporaneo risultante dal comando pdfjam.
|
||||
echo -e "* ok!\n" ; sleep 0.5
|
||||
done
|
||||
|
||||
# rimuove il modello di pagina bianca.
|
||||
clear
|
||||
echo -e "\n--> rimozione del modello di pagina bianca..." ; sleep 0.5
|
||||
rm "./temp/blank.pdf" || echo -e "\nERRORE: nel rimuovere il modello di pagina bianca. proseguo comunque."
|
||||
echo -e "* ok!\n" ; sleep 0.5
|
||||
|
||||
|
||||
# se si desidera un file unico unisce i fascicoli.
|
||||
case $flag in
|
||||
"no"|"n"|"N"|"No")
|
||||
clear
|
||||
echo -e "\n--> unisco i fascicoli in un file unico..."
|
||||
if ! pdfunite ./temp/* "${arg1%.pdf}_typo.pdf" ;then
|
||||
echo -e "\nERRORE: nell'unire i fascicoli. controllare la cartella temp."
|
||||
exit 1
|
||||
fi
|
||||
echo -e "* ok!\n" ; sleep 0.5
|
||||
clear
|
||||
echo -e "\n--> rimuovo il file originale..." ; sleep 0.5
|
||||
rm ${arg1} || echo -e "\nERRORE: imossibile rimuovere il file originale. proseguo comunque."
|
||||
echo -e "* ok!\n" ; sleep 0.5
|
||||
clear
|
||||
echo -e "\n--> rimuovo la cartella temporanea..." ; sleep 0.5
|
||||
rm -r "./temp" || echo -e "\nERRORE: impossibile rimuovere la cartella temporanea. proseguo comunque."
|
||||
echo -e "* ok!\n" ; sleep 0.5
|
||||
clear
|
||||
echo -e "\nSuccess. il tuo file è \"${arg1%.pdf}_typo.pdf\""
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
clear
|
||||
echo -e "\n--> rimuovo il file originale..." ; sleep 0.5
|
||||
rm ${arg1} || echo -e "\nERRORE: imossibile rimuovere il file originale. proseguo comunque."
|
||||
echo -e "* ok!\n" ; sleep 0.5
|
||||
clear
|
||||
echo -e "\n--> rinomino la cartella definitiva..."
|
||||
|
||||
if ! mv -T ./temp ${arg1%.pdf}_def >> log 2>&1 ;then
|
||||
rm -r "${arg1%.pdf}_def" && mv -T ./temp ${arg1%.pdf}_def
|
||||
fi
|
||||
|
||||
echo -e "\nSuccess. i tuoi file sono nella cartella ${arg1%.pdf}_def\n"
|
Loading…
Reference in New Issue