Tra whitepaper tecnologici, manoscritti e libri di giochi di ruolo, mi occupo di molti PDF ogni giorno. Il formato PDF è popolare perché contiene codice PostScript elaborato. PostScript è il linguaggio nativo delle moderne stampanti, quindi gli editori spesso pubblicano una versione digitale di un libro come PDF perché hanno comunque investito tempo e fatica per produrre un file per la stampa. Ma un PDF non è pensato per essere un formato modificabile e, sebbene sia possibile un'elaborazione inversa, è pensato per essere l'ultima fermata per i dati digitali prima che vengano inviati alla stampante. Anche così, a volte è necessario apportare modifiche a un PDF e uno dei miei strumenti preferiti per quel lavoro è il comando pdftk-java.
Più risorse Linux
- Comandi Linux cheat sheet
- Cheat sheet sui comandi avanzati di Linux
- Corso online gratuito:Panoramica tecnica RHEL
- Cheat sheet della rete Linux
- Cheat sheet di SELinux
- Cheat sheet dei comandi comuni di Linux
- Cosa sono i container Linux?
- I nostri ultimi articoli su Linux
Installa pdftk-java su Linux
Come suggerisce il nome, pdftk-java
è scritto in Java, quindi funziona su tutti i principali sistemi operativi purché Java sia installato.
Gli utenti Linux e macOS possono installare Java da AdoptOpenJDK.net. Gli utenti Windows possono installare la build Windows di Red Hat di OpenJDK.
Per installare pdftk-java
:
1. Scarica la versione pdftk-all.jar dal suo repository Gitlab e salvala in ~/.local/bin/
o in un altro luogo nel tuo percorso.
2. Apri ~/.bashrc
nel tuo editor di testo preferito e aggiungi questa riga:
alias pdftk='java -jar $HOME/.local/bin/pdftk-all.jar'
3. Carica le tue nuove impostazioni Bash:
$ source ~/.bashrc
Sintassi dei comandi
La struttura di un pdftk-java
valido il comando segue un modello, ma c'è molta flessibilità in ciò che è nel modello. La sintassi è un po' insolita perché non utilizza le opzioni del terminale in stile tradizionale, ma con la pratica non è troppo difficile da ricordare.
pdftk
:L'alias per chiamare il comando- file di input:il PDF che desideri modificare
- azione:cosa vuoi fare al file di input
- output:dove vuoi salvare il tuo file PDF modificato
È la parte d'azione più complessa, quindi inizierò con compiti semplici.
Unisci due file PDF in uno
Non è raro che la copertina di un libro venga creata in un'applicazione separata, come Inkscape o GIMP, rispetto al resto del libro, cosa che di solito viene eseguita in un'applicazione di layout come Scribus o una suite per ufficio come LibreOffice. Puoi combinare i due nella tua applicazione di layout. Un buon editore desktop come Scribus semplifica il riferimento a un'immagine in modo che quando la copertina cambia, venga automaticamente aggiornata nel layout. Tuttavia, è anche possibile anteporre la copertina a un PDF con pdftk-java
:
$ pdftk cover.pdf body.pdf \
cat \
output book.pdf
In questo esempio, l'azione è cat
, come in concatenare e come il comando cat di Linux, concatena uno o più file PDF in un unico flusso di dati e il flusso di dati viene indirizzato in qualsiasi file l'output
argomento specifica.
Rimuovi pagine da un PDF
Non puoi rimuovere esattamente una pagina da un PDF, ma puoi creare un nuovo PDF contenente solo le pagine che desideri conservare.
$ pdftk book.pdf \
cat 1 3-end \
output shorter-book.pdf
In questo esempio, la pagina 1 del file del mio libro e tutte le pagine dalla 3 alla fine vengono salvate in un nuovo file. La pagina che ho rimosso, quindi, è la pagina 2.
Dividi un PDF in file separati
Anche la divisione di un file PDF in molti file diversi utilizza il cat
azione, ed è simile in linea di principio alla rimozione di pagine. Puoi dividere un PDF inviando le pagine che desideri in un nuovo file:
$ pdftk book.pdf \
cat 1-15 \
output part-1.pdf
$ pdftk book.pdf \
cat 16-42 \
output part-2.pdf
Se devi dividere un PDF in file a pagina singola, c'è un'azione speciale, chiamata burst
:
$ pdftk book.pdf burst
$ ls
book.pdf pg_0001.pdf pg_0002.pdf
pg_0003.pdf pg_0004.pdf pg_0005.pdf
[...]
Compila i moduli
Pochi sosterrebbero che il formato PDF non si sia gonfiato nel corso degli anni e una caratteristica che a volte trovi in un file PDF è un modulo compilabile. Lo vedi nei documenti fiscali statunitensi, nelle schede dei personaggi dei giochi di ruolo, nei libri di lavoro scolastici online e in altri file PDF che devono essere interattivi. Mentre la maggior parte dei moderni visualizzatori PDF, come Evince di GNOME e Okular di KDE, possono compilare moduli PDF, puoi anche compilare un modulo PDF con l'aiuto di pdftk-java
.
Innanzitutto, devi estrarre i dati del modulo utilizzando generate_fdf
azione. Questo estrae gli ID degli elementi del modulo e li inserisce in un file di testo.
$ pdftk character-sheet.pdf \
generate_fdf \
output chsheet-form.txt
Il tuo file di destinazione (in questo esempio, chsheet-form.txt
) contiene i dati del modulo contenuto nel PDF, ma solo le parti di testo. Puoi modificarlo in qualsiasi editor di testo standard, come Atom o Gedit.
In uno sguardo a volte ammirevole ea volte imbarazzante del flusso di lavoro dell'organizzazione che produce il PDF, scoprirai che alcuni moduli sono chiaramente etichettati, mentre altri hanno nomi predefiniti come "Casella di controllo_001" e "Campo di testo-021", quindi potresti dover attraversare -fai riferimento al tuo file di testo con il tuo PDF, ma potrebbe essere utile se stai scrivendo uno script per compilare automaticamente i moduli. Ogni etichetta è contrassegnata da un /T
item e nella riga successiva c'è spazio (contrassegnato come /V
) previsto per l'inserimento del testo. Ecco uno snippet di uno che ha il contesto per le sue etichette e alcuni dati inseriti:
/T (CharacterName 2)
/V (Abaddon)
>>
<<
/T (SlotsTotal 24)
/V ()
>>
<<
/T (Hair)
/V (Brown)
>>
<<
/T (AC)
/V (15)
>>
<<
/T (Background)
/V ()
>>
<<
/T (DEXmod )
/V ()
Una volta inseriti i dati del modulo, puoi combinare il tuo input di testo con la struttura PDF con il fill_form
azione:
$ pdftk character-sheet.pdf \
fill_form chsheet-form.txt \
output completed.pdf
Ecco un esempio del risultato:
Modifica PDF semplificata
Quando gestisci molti file PDF o file PDF tramite script di shell, uno strumento come pdftk-java
è prezioso perché ti libera dal dover fare tutto manualmente. Quando creo un PDF dall'output di Docbook, è un Makefile che chiama pdftk-java
per un numero qualsiasi di attività, quindi non c'è alcuna possibilità che dimentichi un passaggio o digiti male il comando, e non c'è bisogno che ci dedichi il mio tempo. Ci sono molti altri motivi per cui potresti usare pdftk-java
nel tuo flusso di lavoro e molte altre cose pdftk-java
può fare, comprese azioni come shuffle
, rotate
, dump_data
, update_info
e attach_files
. Se ti ritrovi spesso a gestire file PDF, fornisci pdftk-java
una prova.