[HOWTO] intercalare pagine bianche in un pdf

Utilizzo di applicazioni in ambito professionale.

[HOWTO] intercalare pagine bianche in un pdf

Messaggioda rai » domenica 26 marzo 2017, 10:35

Esiste già una discussione che suggeriva il modo tramite script di inserire pagine bianche in un documento PDF esistente.

Rispondendo a un utente che chiedeva una variante mi è venuto in mente che potebbe essere utile generalizzare quella variante, cioè potere
decidere ogni quante pagine del nostro documento vogliamo inserire una pagina bianca.

La discussione originale contiene due versioni dello script. IMHO
la 1^ versione ha due pregi: la semplicità e il fatto che il nome del pdf da modificare va scritto sulla riga di comando dove l'autocompletamento ci aiuta a non sbagliare.
La 2^ versione(bug a parte) ha il pregio di riconoscere programmaticamente le caratteristiche del nostro pdf e creare automaticamente la pagina bianca di dimensioni adatte al pdf, qualsiasi esse siano
Ergo, ho mescolato arbitrariamente i due script, spero migliorandoli :-)


Pre-requisiti :
devono essere installati pdftk e poppler-utils
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"

Ovviamente va incollato in un file, salvato con un nomeScelto, reso eseguibile dalla GUI oppure con
Codice: Seleziona tutto
chmod +x /percorso/nomeScelto

Quando viene eseguito, lo script crea nella stessa cartella del pdf originale un nuovo pdf con le pagine bianche intercalate

Esecuzione :
Se nel terminale si esegue
/percorso/nomeScelto '/percorso/del/documento originale.pdf'
viene interposta una pagina bianca ad ogni pagina dell'originale

Se invece si esegue
/percorso/nomeScelto INT '/percorso/del/documento originale.pdf'
oppure
/percorso/nomeScelto '/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 :D ma se servisse anche solo a un altro utente, questa guida sarebbe stata utile.
rai
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1837
Iscrizione: maggio 2008
Località: Palermo
Distribuzione: 12.04 | 16.04

Torna a Applicazioni professionali

Chi c’è in linea

Visualizzano questa sezione: 0 utenti registrati e 2 ospiti