Entre les livres blancs sur la technologie, les manuscrits et les livres RPG, je traite quotidiennement de nombreux PDF. Le format PDF est populaire car il contient du code PostScript traité. Le PostScript étant le langage natif des imprimeurs modernes, les éditeurs publient souvent une version numérique d'un livre au format PDF, car ils ont quand même investi du temps et des efforts pour produire un fichier à imprimer. Mais un PDF n'est pas destiné à être un format modifiable, et bien qu'un certain traitement inverse soit possible, il est censé être le dernier arrêt pour les données numériques avant qu'elles ne soient envoyées à l'imprimante. Même ainsi, vous devez parfois apporter des modifications à un PDF, et l'un de mes outils préférés pour ce travail est la commande pdftk-java.
Plus de ressources Linux
- Aide-mémoire des commandes Linux
- Aide-mémoire des commandes Linux avancées
- Cours en ligne gratuit :Présentation technique de RHEL
- Aide-mémoire sur le réseau Linux
- Aide-mémoire SELinux
- Aide-mémoire sur les commandes courantes de Linux
- Que sont les conteneurs Linux ?
- Nos derniers articles Linux
Installer pdftk-java sur Linux
Comme son nom l'indique, pdftk-java
est écrit en Java, il fonctionne donc sur tous les principaux systèmes d'exploitation tant que Java est installé.
Les utilisateurs Linux et macOS peuvent installer Java depuis AdoptOpenJDK.net. Les utilisateurs Windows peuvent installer la version Windows d'OpenJDK de Red Hat.
Pour installer pdftk-java
:
1. Téléchargez la version pdftk-all.jar depuis son référentiel Gitlab et enregistrez-la dans ~/.local/bin/
ou à un autre endroit sur votre chemin.
2. Ouvrez ~/.bashrc
dans votre éditeur de texte préféré et ajoutez-y cette ligne :
alias pdftk='java -jar $HOME/.local/bin/pdftk-all.jar'
3. Chargez vos nouveaux paramètres Bash :
$ source ~/.bashrc
Syntaxe de la commande
La structure d'un pdftk-java
valide La commande suit un modèle, mais il y a beaucoup de flexibilité dans ce qu'il y a dans le modèle. La syntaxe est un peu inhabituelle car elle n'utilise pas les options de terminal de style traditionnel, mais avec la pratique, ce n'est pas trop difficile à retenir.
pdftk
:L'alias pour appeler la commande- fichier d'entrée :le PDF que vous souhaitez modifier
- action :ce que vous voulez faire du fichier d'entrée
- sortie :où vous souhaitez enregistrer votre fichier PDF modifié
C'est la partie action qui est la plus complexe, je vais donc commencer par des tâches simples.
Combinez deux fichiers PDF en un seul
Il n'est pas rare que la couverture d'un livre soit créée dans une application distincte, comme Inkscape ou GIMP, du reste du livre, ce qui est généralement fait dans une application de mise en page comme Scribus ou une suite bureautique comme LibreOffice. Vous pouvez combiner les deux dans votre application de mise en page. Un bon éditeur de bureau comme Scribus facilite le simple référencement d'une image afin que, lorsque la couverture change, sa mise en page soit automatiquement mise à jour. Cependant, il est également possible d'ajouter la couverture à un PDF avec pdftk-java
:
$ pdftk cover.pdf body.pdf \
cat \
output book.pdf
Dans cet exemple, l'action est cat
, comme dans concaténer et comme la commande Linux cat, elle concatène un ou plusieurs fichiers PDF en un seul flux de données, et le flux de données est dirigé vers n'importe quel fichier de la output
l'argument spécifie.
Supprimer des pages d'un PDF
Vous ne pouvez pas exactement supprimer une page d'un PDF, mais vous pouvez créer un nouveau PDF contenant uniquement les pages que vous souhaitez conserver.
$ pdftk book.pdf \
cat 1 3-end \
output shorter-book.pdf
Dans cet exemple, la page 1 de mon fichier de livre et toutes les pages de 3 à la fin sont enregistrées dans un nouveau fichier. La page que j'ai supprimée est donc la page 2.
Diviser un PDF en fichiers séparés
Diviser un fichier PDF en plusieurs fichiers différents utilise également le cat
action, et son principe est similaire à la suppression de pages. Vous pouvez diviser un PDF en envoyant les pages que vous souhaitez dans un nouveau fichier :
$ pdftk book.pdf \
cat 1-15 \
output part-1.pdf
$ pdftk book.pdf \
cat 16-42 \
output part-2.pdf
Si vous devez diviser un PDF en fichiers d'une seule page, il existe une action spéciale pour cela, appelée burst
:
$ pdftk book.pdf burst
$ ls
book.pdf pg_0001.pdf pg_0002.pdf
pg_0003.pdf pg_0004.pdf pg_0005.pdf
[...]
Remplir des formulaires
Peu de gens diraient que le format PDF n'est pas devenu gonflé au fil des ans, et une fonctionnalité que vous trouvez parfois dans un fichier PDF est un formulaire à remplir. Vous le voyez dans les documents fiscaux américains, les feuilles de personnages RPG, les manuels scolaires en ligne et d'autres fichiers PDF destinés à être interactifs. Alors que la plupart des visualiseurs PDF modernes, tels que Evince de GNOME et Okular de KDE, peuvent remplir des formulaires PDF, vous pouvez également remplir un formulaire PDF à l'aide de pdftk-java
.
Tout d'abord, vous devez extraire les données du formulaire en utilisant le generate_fdf
action. Cela extrait les ID des éléments de formulaire et les place dans un fichier texte.
$ pdftk character-sheet.pdf \
generate_fdf \
output chsheet-form.txt
Votre fichier de destination (dans cet exemple, chsheet-form.txt
) contient les données du formulaire contenu dans le PDF, mais uniquement les parties de texte. Vous pouvez le modifier dans n'importe quel éditeur de texte standard, comme Atom ou Gedit.
Dans un aperçu parfois admirable et parfois maladroit du flux de travail de l'organisation produisant le PDF, vous constaterez que certains formulaires sont clairement étiquetés, tandis que d'autres ont des noms par défaut tels que "Checkbox_001" et "Textfield-021", vous devrez donc peut-être traverser - référencez votre fichier texte avec votre PDF, mais cela peut être utile si vous écrivez un script pour remplir automatiquement des formulaires. Chaque étiquette est marquée comme un /T
élément, et sur la ligne suivante, il y a un espace (marqué comme /V
) fourni pour la saisie de texte. Voici un extrait de celui qui contient du contexte pour ses étiquettes et des données renseignées :
/T (CharacterName 2)
/V (Abaddon)
>>
<<
/T (SlotsTotal 24)
/V ()
>>
<<
/T (Hair)
/V (Brown)
>>
<<
/T (AC)
/V (15)
>>
<<
/T (Background)
/V ()
>>
<<
/T (DEXmod )
/V ()
Une fois que vous avez saisi les données du formulaire, vous pouvez combiner votre saisie de texte avec la structure PDF avec le fill_form
action :
$ pdftk character-sheet.pdf \
fill_form chsheet-form.txt \
output completed.pdf
Voici un exemple du résultat :
Modification PDF simplifiée
Lorsque vous traitez de nombreux fichiers PDF ou des fichiers PDF via des scripts shell, un outil comme pdftk-java
est inestimable car il vous évite d'avoir à tout faire manuellement. Lorsque je construis un PDF à partir de la sortie de Docbook, c'est un Makefile qui appelle pdftk-java
pour n'importe quel nombre de tâches, il n'y a donc aucune chance que j'oublie une étape ou que je tape mal la commande, et je n'ai pas besoin de passer mon temps dessus. Il existe de nombreuses autres raisons pour lesquelles vous pourriez utiliser pdftk-java
dans votre propre flux de travail, et plein d'autres choses pdftk-java
peut faire, y compris des actions comme shuffle
, rotate
, dump_data
, update_info
, et attach_files
. Si vous avez souvent affaire à des fichiers PDF, donnez pdftk-java
un essai.