GNU/Linux >> Tutoriels Linux >  >> Linux

4 façons de modifier un PDF avec la commande pdftk-java

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.


Linux
  1. 4 façons de maintenir une commande en cours d'exécution après la déconnexion de la session SSH

  2. Pouvez-vous utiliser des ancres ^ $ avec Ls ?

  3. Utiliser –exclude avec la commande Du ?

  4. Que signifie avoir * * * dans la commande traceroute ? et Comment pouvez-vous faire face à cette situation?

  5. Comment puis-je ouvrir un fichier avec des numéros de ligne affichés à partir de la ligne de commande dans 'vi' ?

3 façons intéressantes d'utiliser la commande Linux cowsay

13 façons d'aider Linux

7 façons d'utiliser la commande Linux Head

7 façons d'utiliser la commande Linux Watch

Comment puis-je exécuter une commande différente mais avec les mêmes arguments ?

Comment utiliser les expressions régulières avec la commande cp sous Linux ?