Une compilation de documentations   { en , fr }

Comment manipuler des pages de documents PDF avec pdftk

Étiquette:
Créé en:
Auteur:
Xavier Béguin

Un outil graphique freeware et une version payante du PDFtk original existent également pour Windows, mais cet article ne décrira que la version en ligne de commande appelée par son éditeur PDFtk server. Plus précisément, les exemples ci-dessous utilisent le port de pdftk en java généralement disponible sous les distributions GNU/Linux par un paquet nommé pdftk-java.

Syntaxe de base

La syntaxe de base d'utilisation de la commande est la suivante :

pdftk <fichiers source> <opération> [<arguments de l'opération >] [output <fichier de destination>]
  • <fichiers source> est la liste des fichiers source, mais peut aussi être - pour lire le document source depuis l'entrée standard, ou PROMPT pour que pdftk demande interactivement à l'utilisateur le ou les noms des fichiers source ;
  • <arguments d'opération> est facultatif, puisque certaines opérations n'exigent pas d'argument ;
  • output <fichier de destination> est optionnel avec certaines actions, mais obligatoire avec d'autres. <fichier de destination> est généralement le nom du fichier de destination. Ce peut aussi être une chaîne de formatage de style printf pour nommer les fichiers résultant de l'éclatement du document avec l'opération burst. Ou il peut être - pour afficher le résultat sur la sortie standard, ou PROMPT pour que pdftk demande interactivement à l'utilisateur le nom du fichier de destination.

Extraire des pages

L'extraction d'une page d'un document est possible à l'aide de l'opération cat.

Pour extraire la page 3 d'un document source.pdf et l'écrire dans le document page3.pdf par exemple, utilisez la commande suivante :

pdftk source.pdf cat 3 output page3.pdf

Plusieurs pages peuvent bien sûr être extraites en même temps. Elles seront concaténées dans le document de destination dans l'ordre précisé. Cet exemple va extraire les pages 2, 3, 4 et la page 6 du document source.pdf vers le document résultat.pdf :

pdftk source.pdf cat 2-4 6 output résultat.pdf

Voici quelques autres exemples de plages de pages pour en illustrer les possibilités :

  • 1-21 : pages 1 à 21 (incluses) ;
  • 4-10 5-7 8 : pages 4 à 10, 5 à 7 et la page 8 ;
  • end-2 : pages extraites en ordre inverse de la dernière page à la seconde ;
  • end-2odd : identique à la plage ci-dessous, mais seules les pages impaires seront extraites ;
  • 1-4 5 5 4 : pages 1 à 4, puis répète la page 5 deux fois, et extrait la page 4 une nouvelle fois ;
  • r1 : la dernière page du document source (même chose que end) ;
  • r3-r5 : pages 3 à 5 en comptant depuis la fin du document source.

Concaténer plusieurs documents complets

Pour concaténer toutes les pages des deux documents début.pdf et fin.pdf vers le document résultat.pdf, utilisez :

pdftk début.pdf fin.pdf cat output résultat.pdf

Concaténer des pages spécifiques de documents différents

Vous pouvez choisir quelle(s) page(s) sélectionner des documents source et les concaténer. Dans ce cas, utiliser des alias (ce sont des noms librement choisis) aux noms de fichiers source pour préciser ensuite les pages à extraire de chaque fichier dans les plages de pages.

Par exemple, pour inclure les pages 1, 2, 3 et 6 d'un document appelé source1.pdf, la page 2 de source2.pdf, et toutes les pages à partir de la page 4 depuis source3.pdf et écrire toutes ces pages dans un document nommé résultat.pdf, you pouvez utiliser :

pdftk A=source1.pdf B=source2.pdf C=source3.pdf cat A1-3 A6 B2 A4-end output résultat.pdf

Un exemple similaire serait de remplacer la page 4 d'un document source1.pdf par l'avant-dernière page de source2.pdf (r2 est la seconde page depuis la fin du document) :

pdftk FIRST=source1.pdf SECOND=source2.pdf cat FIRST1-3 SECONDr2 FIRST5-end output résultat.pdf

Notez que vous pouvez utiliser les mots-clés even ou odd, seul ou en suffixe d'une plage de pages pour sélectionner respectivement les pages paires et impaires de la plage (voir les exemples de plages de pages plus haut).

Éclater toutes les pages d'un document dans différents fichiers

Utilisez l'action burst pour éclater toutes les pages d'un document dans un fichier spécifique qui sera nommé par défaut pg_0001.pdf, pg_0002.pdf, etc. :

pdftk source.pdf burst

Le nom des fichiers de destination peut être choisir en fournissant le mot-clé output et une chaîne de formatage de style printf pour nommer les fichiers. Si vous voulez que les fichiers des pages soient nommés page_01.pdf, page_02.pdf, etc., vous pouvez utilisez :

pdftk source.pdf burst output page_%02d.pdf

Le format utilisé par défaut pour les fichiers des pages est pg_%04d.pdf.

Assembler les pages de documents

Si vous avez numérisé les pages impaires d'un document séparément des pages paires (par exemple en utilisant le bac d'alimentation d'un numériseur qui ne numérise qu'un côté des feuilles), l'action shuffle peut être utilisée pour facilement les réassembler dans un nouveau document.

Comme le précise la page de manuel de pdftk(1), shuffle « fonctionne comme l'opération cat, excepté qu'il prend une page à la fois de chaque plage de pages pour assembler le PDF de destination ».

Pour assembler toutes les pages des documents source, vous n'avez pas besoin de fournir une plage de pages, et vous pouvez simplement écrire :

pdftk impaires.pdf paires.pdf shuffle output destination.pdf

Mais, si impaires.pdf a été numérisé dans l'ordre inverse, vous pouvez simplement préciser une plage à rebours comme ceci :

pdftk I=impaires.pdf P=paires.pdf shuffle Iend-1 P output destination.pdf

Dans ce cas, shuffle va produire le document destination.pdf en écrivant, dans l'ordre :

  • la dernière page de impaires.pdf ;
  • la première page de paires.pdf ;
  • l'avant-dernière page de impaires.pdf ;
  • la seconde page de paires.pdf ;
  • etc.

Si vous voulez tester cette fonctionnalité, rappelez-vous que vous pouvez extraire les pages impaires ou les pages paires d'un document à l'aide de cat :

pdftk source.pdf cat odd output impaires.pdf
pdftk source.pdf cat even output paires.pdf

Effectuer une rotation à des pages d'un document

Pour effectuer une rotation à des pages d'un document, utilisez rotate et précisez la liste des pages à faire pivoter, comme vous donneriez une liste de pages à concaténer avec cat, mais sans préciser les pages que vous ne voulez pas faire pivoter.

Notez que l'ordre des pages dans la commande de rotation n'importe pas, il ne changera pas l'ordre des pages dans le document de destination.

Ainsi, une commande de rotation va suivre ce type de syntaxe :

pdftk <fichiers source> rotate [<numéro de première page>[-<numéro de dernière page>[<qualificatif>]]][<rotation de page>] output <fichier de destination>

Pour préciser le type de rotation de manière absolue, utilisez les mots-clés suivants. Le haut d'origine de la page pivotera pour pointer vers autant de degrés vers la droite :

  • north: 0°;
  • east: 90°;
  • south: 180°;
  • west: 270°;

Les mots-clés suivants permettent de préciser une rotation relative à la rotation déjà appliquée à une page :

  • left: -90°;
  • right: +90°;
  • down: +180°.

Par exemple, pour orienter le haut de toutes les pages du document source.pdf à 90° vers la droite, utilisez :

pdftk source.pdf rotate 1-endeast output résultat.pdf

Pour pivoter de 90° vers vers la gauche les pages 2 et 4 du document source.pdf (en laissant les autres pages intactes, et l'ordre d'origine des pages incangé), vous pourriez utiliser :

pdftk source.pdf rotate 4left 2left output résultat.pdf

Combiner rotation et concaténation

L'opération rotate peut être combinée avec cat simplement en utilisant un mot-clé de rotation dans la plage des pages à extraire.

Par exemple, après utilisation de la commande suivante, le document résultat.pdf :

  • commencera par les pages 1 et 2 inchangées de source1.pdf ;
  • inclura ensuite toutes les pages de source2.pdf, toutes pivotées de 90° vers la droite ;
  • et finalement inclura les pages 5 et toutes les suivantes jusqu'à la fin de source1.pdf :
pdftk A=source1.pdf B=source2.pdf cat A1-2 B1-endright A5-end output résultat.pdf