001 Pdftk – Generalità ed installazione

2 Ottobre, 2022 (09:48) | Linux, pdftk | By: sargonsei

001 Pdftk – Generalità ed installazione

A) Generalità su PDFTK e su questa guida.
PDFTK è un’applicazione che, da sola o in sinergia con altre applicazioni, permette all’utente di manipolare documenti in formato PDF usando la riga di comando. Su Linux, questo pacchetto (e tutte le relative dipendenze) possono essere installate sia tramite il Gestore dei Pacchetti, sia da riga di comando.
Per utilizzare tutte le istruzioni suggerite da questa guida, oltre a pdftk occorre installare: enscript, texlive-latex-base, texlive-latex-extra, texlive-extra-utils.

B) Cose da sapere prima di cominciare.
1) Volendo aggiornare il Sistema Operativo Linux Ubuntu (e derivate) ed installare da riga di comando i pacchetti necessari per applicare correttamente tutte le sezioni di questa guida, aprire un terminale ed impartire, uno dopo l’altro, i comandi seguenti:
sudo apt clean; sudo apt autopurge -y; sudo apt update; sudo apt dist-upgrade -y # Aggiorna Sistema Operativo
sudo apt install pdftk enscript texlive-latex-base texlive-latex-extra texlive-extra-utils -y # Installa pacchetti
oppure, in alternativa, aprire un terminale ed impartire, uno dopo l’altro, i comandi seguenti:

sudo apt clean       # Ripulisce la cache locale dei pacchetti
sudo apt autopurge -y # Rimuove tutti i pacchetti installati ma non più necessari, nonchè i relativi files di configurazione.
sudo apt update        # Scarica la lista aggiornata dei pacchetti e delle nuove versioni disponibili nei repository
sudo apt dist-upgrade -y  # Scarica ed installa le ultime versioni dei pacchetti
sudo apt install pdftk            # INDISPENSABILE! Installa pdftk e relative dipendenze
sudo apt install enscript          # UTILISSIMO. Installa enscript e relative dipendenze
sudo apt install texlive-latex-base # UTILE. Installa texlive-latex-base e relative dipendenze
sudo apt install texlive-latex-extra # UTILE. Installa texlive-latex-extra e relative dipendenze
sudo apt install texlive-extra-utils  # UTILE. Installa texlive-extra-utils e relative dipendenze

2) Le variabili BASH non sono tipizzate, nè all’interno di una shell, nè all’interno di uno script. Come conseguenza di ciò, se non diversamente specificato in ogni singola istruzione, vengono trattate come variabili stringa e, anche se nell’istruzione è specificato che una variabile deve contenere il risultato di un’operazione matematica, essa può contenere solo numeri interi, troncando tutti i decimali. Seguono alcuni esempi.
A=1239/10; echo $A # Visualizza sullo schermo il valore di $A che, in questo caso, è 1239/10
let A=1239/10; echo $A # Visualizza sullo schermo il valore di $A che, in questo caso, è 123
A=1239/10; B=${A/12/BB}; echo "$A $B" # Visualizza sullo schermo 1239/10 BB39/10
let A=1239/10; B=${A/12/BB}; echo "$A $B" # Visualizza sullo schermo 123 BB3

3) Qualora, per ottenere il risultato voluto, sia necessario impartire più di una istruzione, bash fornisce all’utente di agire in 3 modi diversi fra cui scegliere:
3.1) Impartirle la prima istruzione e, al ritorno del prompt, impartire l’istruzione successiva, e così via finché non sono state impartite tutte le istruzioni necessarie per ottenere il risultato voluto.
3.2) Creare uno script che racchiuda tutte le istruzioni necessarie per ottenere il risultato voluto in righe diverse; in questo caso, le istruzioni verranno eseguite nell’ordine in cui sono scritte.
3.3) Digitare le istruzioni una dopo l’altra sulla medesima riga, separandole con l’operatore che si ritiene opportuno fra quelli possibili; gli operatori che possono essere scritti fra un comando e l’altro (senza paresi quadre) sono: [;], [&], [&&] [#] e [||], mentre gli operatori possibili a fine riga sono: [;], [&] e [newline]. Questo vale sia all’interno di uno script, sia quando si impartisce un comando da terminale.
3.3.1) L’operatore [;] (puntoevirgola) si usa per separare due istruzioni da eseguire una dopo l’altra a prescindere dall’esito delle stesse; per esempio: per eseguire la riga
mkdir prova; cd prova    BASH: crea la cartella “prova” nella cartella di lavoro solo se l’utente può scrivere nella cartella in cui il terminale è stato aperto e solo se la cartella “prova” non esiste; successivamente, solo se la cartella prova esiste, accede alla cartella prova.
Si noti che il comando scritto dopo il puntoevirgola, sebbene impartito, viene eseguito solo dopo che il comando precedente è terminato ed a prescindere dall’esito del comando stesso, quindi se la cartella di lavoro contiene già una cartella prova, il comando [mkdir prova] non viene eseguito, ma il comando [cd prova] verrà eseguito.
Altro comportamento da notare: nella riga
pix; echo "Il visualizzatore di immagini PIX è stato aperto"; xed; echo "L'editor di testo XED è stato aperto"   l’operatore [;] farà sì che il visualizzatore di immagini PIX venga aperto, ma BASH passerà all’istruzione successiva solo quando l’utente avrà chiuso il visualizzatore di immagini PIX, quindi il messaggio “Il visualizzatore di immagini PIX è stato aperto” comparirà solo quando l’utente avrà chiuso il visualizzatore di immagini PIX; quindi BASH passerà all’istruzione successiva ed aprirà l’editor di testo XED, ma il messaggio “L’editor di testo XED è stato aperto” comparirà solo quando l’utente avrà chiuso l’editor di testo XED.
3.3.2) L’operatore [&] (and) è utile per avviare da terminale due o più applicazioni che devono essere disponibili contemporaneamente, in quanto permette di avviarle in background, quindi l’istruzione successiva verrà eseguita prima che l’istruzione precedente sia terminata; per esempio: la riga
pix & echo "Il visualizzatore di immagini PIX è stato aperto" & xed & echo "L'editor di testo XED è stato aperto"   fa sì che il visualizzatore di immagini PIX venga aperto in background, quindi BASH passerà all’istruzione successiva facendo apparire il messaggio “Il visualizzatore di immagini PIX è stato aperto” senza attendere che l’utente abbia chiuso il visualizzatore di immagini PIX; poi BASH passerà all’istruzione successiva ed aprirà l’editor di testo XED, quindi BASH passerà all’istruzione successiva facendo apparire il messaggio “L’editor di testo XED è stato aperto” senza attendere che l’utente abbia chiuso il visualizzatore di immagini XED.
3.3.3) L’operatore [&&] (doppio and) è utile per impartire due o più istruzioni una dopo l’altra, ma le istruzioni scritte dopo l’operatore [&&] vengono eseguite solo se l’istruzione scritta prima dell’operatore [&&] è stata eseguita correttamente; per esempio: la riga
mkdir prova && cd prova  fa sì che BASH crei la cartella prova all’interno dell’attuale cartella di lavoro, e poi, solo se ha eseguito l’istruzione precedente, accede alla cartella prova; se, per un qualsiasi motivo (es. la cartella di lavoro contiene già una cartella che si chiama prova) l’istruzione scritta prima dell’operatore [&&] non viene eseguita, non verrà eseguita nemmeno l’istruzione scritta dopo l’operatore [&&].
3.3.4) L’operatore [||] si comporta come l’operatore booleano OR, nel senso che viene eseguito solo se il comando precedente non viene eseguito; per esempio la riga:
mkdir prova || cd prova fa sì che BASH crei la cartella prova all’interno dell’attuale cartella di lavoro, ma vi accede solo nel caso in cui la cartella prova esiste già.
3.3.5) L’operatore [newline] (andare a capo) non è un operatore vero e proprio, semplicemente segnala a BASH che la riga è finita, quindi BASH deve eseguirla e passare all’istruzione riportata nella riga successiva.
3.3.6) L’operatore [#] (cancelletto) segnala a BASH che i comandi sono terminati, e quello che è scritto fra l’operatore [#] e l’operatore [newline] è un commento da non eseguire. Notare che: dopo l’operatore [#], si potrà scrivere qualsiasi cosa, compresi altri operatori o altri comandi, ma nessun comando verrà eseguito, e l’unico operatore che ha effetto è [newline] (andare a capo).
3.3.7) In una riga, si possono usare più operatori e/o più volte il medesimo operatore, anche raggruppando le istruzioni fra parentesi tonda o graffa. Se si raggruppano le istruzioni fra parentesi tonde, ogni parentesi aperta deve essere chiusa nella stessa riga, mentre le parenti graffe possono essere chiuse in righe successive, ma solo negli script.

C) Informazioni varie.

pdftk nomeDoc.pdf dump_data output nomeDoc.txt # Crea il file di testo nomeDoc.txt contenente i metadati relativi al documento nomeDoc.pdf.
pdftk nomeDoc.pdf dump_data output | grep Pages # Fornisce il numero di pagine di cui è composto il documento nomeDoc.pdf.