Spoiler
Mostra
Esiste già in questo forum una discussione che suggeriva il modo tramite script di alternare pagine bianche a quelle di un documento PDF esistente.
Rispondendo a un utente che chiedeva una variante mi è venuto in mente che potebbe essere utile generalizzare quella variante
:-)
Rispondendo a un utente che chiedeva una variante mi è venuto in mente che potebbe essere utile generalizzare quella variante
:-)
devono essere installati pdftk e poppler-utils. Quest'ultimo di solito lo trovate pre-installato in tutte le distribuzioni linux.
Codice: Seleziona tutto
sudo apt-get install pdftk poppler-utils.
Quello che segue è il corpo dello script.
Codice: Seleziona tutto
#!/bin/bash
# Intercala alle pagine di un pdf una pagina bianca di dimensioni eguali
#+ a quelle del file.pdf originale, calcolandole in automatico
usage="
LE SINTASSI AMMESSE SONO:
$0 '/percorso/del/documento originale.pdf'
$0 '/percorso/del/documento originale.pdf' INT
$0 INT '/percorso/del/documento originale.pdf'
dove INT è un parametro facoltativo che rappresenta
il numero di pagine da alternare con una pagina bianca.
Se non specificato diversamente sulla linea di comando, INT == 1
cioè ad ogni pagina originale si alterna una pagina bianca
Racchiudere tra apici '/percorso/del/documento originale.pdf'
"
case $# in
1 ) if [[ $(file "$1") =~ "PDF document" ]]; then
filename="$1"
INT=1
else
echo "$1 non è un pdf valido
$usage"; exit
fi;;
2 ) t1=$(file "$1"); t2=$(file "$2")
if [[ ("$t1" =~ "PDF document" && $2 =~ ^[0-9]+$) || ("$t2" =~ "PDF document" && $1 =~ ^[0-9]+$) ]]; then
if [[ $1 =~ ^[0-9]+$ ]]; then
INT=$1; filename="$2"
else
INT=$2; filename="$1"
fi
else
echo "$usage"; exit
fi;;
* ) echo "$usage"; exit;;
esac
bianca=/tmp/bianca.pdf
altxlarg=$(pdfinfo -box "$filename"| awk '/MediaBox/ {print $4" "$5}')
echo "%PDF-1.4
%µí®û
3 0 obj
<<
/Length 0
>>
stream
endstream
endobj
4 0 obj
<<
/ProcSet [/PDF ]
/ExtGState <<
/GS1 1 0 R
>>
>>
endobj
5 0 obj
<<
/Type /Halftone
/HalftoneType 1
/HalftoneName (Default)
/Frequency 60
/Angle 45
/SpotFunction /Round
>>
endobj
1 0 obj
<<
/Type /ExtGState
/SA false
/OP false
/HT /Default
>>
endobj
2 0 obj
<<
/Type /Page
/Parent 7 0 R
/Resources 4 0 R
/Contents 3 0 R
>>
endobj
7 0 obj
<<
/Type /Pages
/Kids [2 0 R ]
/Count 1
/MediaBox [0 0 ${altxlarg}]
>>
endobj
6 0 obj
<<
/Type /Catalog
/Pages 7 0 R
>>
endobj
8 0 obj
<<
/CreationDate (D:20110915222508)
/Producer (libgnomeprint Ver: 2.12.1)
>>
endobj
xref
0 9
0000000000 65535 f
0000000278 00000 n
0000000357 00000 n
0000000017 00000 n
0000000072 00000 n
0000000146 00000 n
0000000535 00000 n
0000000445 00000 n
0000000590 00000 n
trailer
<<
/Size 9
/Root 6 0 R
/Info 8 0 R
>>
startxref
688
%%EOF" > $bianca
numPages=$(pdftk "$filename" dump_data | awk '/NumberOfPages/ {print $2}')
sequenza=$(for ((a=1; a <= $numPages; a++)); do if [ $((a%$INT)) -eq 0 ]; then b="B1 "; else b=""; fi; echo -n "A$a $b"; done)
pdftk A="$filename" B=$bianca cat $sequenza output "${filename%.*}.alternato.pdf"
Codice: Seleziona tutto
chmod +x /percorso/nomeScript
Esecuzione :
Se nel terminale si esegue
/percorso/nomeScript'/percorso/del/documento originale.pdf'
viene interposta una pagina bianca ad ogni pagina dell'originale
Se invece si esegue
/percorso/nomeScript INT '/percorso/del/documento originale.pdf'
oppure
/percorso/nomeScript'/percorso/del/documento originale.pdf' INT
viene inserita una pagina bianca ogni INT pagine dell'originale
Notare che in ogni caso il percorso del pdf è racchiuso tra virgolette: obbligatorie se il nome contiene spazi
Lo so, è un argomento di nicchia, anzi di sub-nicchia ma se servisse anche solo a un altro utente, questa guida sarebbe stata utile.