Initial commit

master
totem4 3 years ago
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…
Cancel
Save