[HOWTO] inserire pagine bianche in un pdf

Utilizzo di applicazioni in ambito professionale.
Scrivi risposta
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2848
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

[HOWTO] inserire pagine bianche in un pdf

Messaggio da rai »

Modificare un pdf decidendo ogni quante pagine del nostro documento vogliamo inserire una pagina bianca.
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
:-)
Pre-requisiti :
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.
Da Ubuntu 18.04 in poi, bisogna seguire questa guida per installare pdftk

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 nomeScript, reso eseguibile dalla GUI oppure con

Codice: Seleziona tutto

chmod +x /percorso/nomeScript
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/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 :D ma se servisse anche solo a un altro utente, questa guida sarebbe stata utile.
Scrivi risposta

Ritorna a “Applicazioni professionali”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 8 ospiti