Ceci est une ancienne révision du document !
PDFTK
PDFTK est un programme en ligne de commande permettant d'effectuer certaines manipulations de documents PDF, comme la mise en arrière-plan, la concaténation, extraction de pages, le remplissage des formulaires, etc.
C’est un logiciel libre sous licence GNU GPL.
Installation
Il suffit d’installer le paquet pdftk.
Utilisation
La syntaxe de base de PDFTK est la suivante :
pdftk fichiers_entrants opérande output fichier_sortant
L’opérande correspond à l’action désirée sur les fichiers.
Liste des opérandes
Opérande | Signification |
---|---|
cat | concaténation, déconcaténation |
burst | extraction |
dump_data | extraction des méta-données, marque-pages (signets) et étiquettes de page d’un PDF |
uncompress | décompression |
attach_files | inclusion de pièces jointes dans un document PDF |
unpack_files | extraction de pièces jointes d'un document PDF |
fill_form | remplissage d’un formulaire PDF avec des données FDF1) ou XFDF2) |
background | met un document en filigrane (en arrière-plan) d'un autre document |
stamp | tamponne un document avec un autre document (mis au premier-plan) |
generate_fdf | génère un fichier FDF vierge ou avec les valeurs par défaut selon les champs contenu dans le PDF |
dump_data_fields | génère un fichier texte contenant la liste des champs d’un PDF, leur type, leur valeur par défaut, etc. |
update_info | mettre à jour les méta-données |
Quelques exemples
Concaténation
La fusion ou la concaténation de deux fichiers PDF ou plus se fait avec l’opérande cat :
pdftk 1.pdf 2.pdf 3.pdf cat output 123.pdf
ou, avec des alias (un alias ne peut qu'être une unique lettre majuscule) :
pdftk A=1.pdf B=2.pdf cat A B output 12.pdf
Pour concaténer tous les fichiers PDF du répertoire courant (donc avec les jokers) et à condition qu'il n'y ait pas d'espace dans les noms de fichier :
pdftk *.pdf cat output tous.pdf
Pour concaténer la page 1 puis les pages 5 à 8 d'un premier document puis, par ordre décroissant de la dernière à la page 6 d'un deuxième document :
pdftk A=premier.pdf B=deuxième.pdf cat A1 A5-8 Bend-6 output fichier-final.pdf
Joint deux fichiers dont l’un est crypté (la sortie ne l’est pas) :
pdftk A=sécurisé.pdf mon-document.pdf input_pw A=foopass cat output document-combiné.pdf
Déconcaténation
Sépare les pages sélectionnées depuis de multiples PDF dans un nouveau document :
pdftk A=un.pdf B=deux.pdf cat A1-7 B1-5 A8 output nouveau_document.pdf
Sépare/extrait les pages 1 à 7 du document "un.pdf"(document 'A'), les pages 1 à 5 du document "deux.pdf"(document 'B'), la page 8 de 'A' et les assemble dans cet ordre vers un document "nouveau_document.pdf"
Rotations
Il s’agit de placer après l’intervalle des lettres en capitales représentant les points cardinaux (en anglais) de sorte que le haut de la page d'origine sur l'écran corresponde au point cardinal choisi.
Pivote la première page d’un PDF de 90 degrés dans le sens horaire (donc à l’est, point E), mais pas les autres pages :
pdftk entrée.pdf cat 1E 2-end output sortie.pdf
Pivote toutes les pages d'un document PDF de 180 degrés (au sud, point S) :
pdftk entrée.pdf cat 1-endS output sortie.pdf
Sécurité
Chiffrer un document PDF avec une clé de 128 bits et retirer tous les droits (par défaut) :
pdftk mon-document.pdf output mon-document-chiffré.128.pdf owner_pw mdp1
Idem que ci-dessus sauf qu’un mot de passe est requis pour ouvrir le PDF :
pdftk mon-document.pdf output mon-document-chiffré.128.pdf owner_pw mdp1 user_pw mdp2
Idem que ci-dessus mais en autorisant l’impression (après l’ouverture du PDF) :
pdftk mon-document.pdf output mon-document-chiffré.128.pdf owner_pw mdp1 user_pw mdp2 allow printing
où « mdp1 » est le mot de passe du propriétaire du PDF et « mdp2 » le mot de passe de l'utilisateur (à personnaliser).
Déchiffre un PDF :
pdftk chiffré.pdf input_pw mot-de-passe output déchiffré.pdf
Compression
Décomprime les flux de page PDF (utile en particulier pour modifier le code PDF dans un éditeur de texte) :
pdftk mon-document.pdf output mon-document.décomprimé.pdf uncompress
Réparation
Répare une table XREF corrompue d’un PDF et les longueurs de flux (si possible) 3) :
pdftk cassé.pdf output réparé.pdf
Extraction
De certaines pages d'un document
Il faut utiliser l'opérande « cat ».
Pour extraire une seule page d'un document :
pdftk mon-document.pdf cat 1 output page1-de-mon-document.pdf
Pour extraire plusieurs pages situées les unes à la suite des autres :
pdftk mon-document.pdf cat 2-5 output pages2-a-5-de-mon-document.pdf
Pour extraire plusieurs pages d'un document et les insérer dans un seul document (pages 6, 2 à 5 et 7 à 9 insérées dans l'ordre 6, 2 à 5, 7 à 9) :
pdftk mon-document.pdf cat 6 2-5 7-9 output pages-de-mon-document.pdf
De toutes les pages d’un document
On utilise l’opérande « burst ».
Pour extraire chaque page d’un document et reporter les données dans un fichier « doc_data.txt » :
pdftk mon-document.pdf burst
Pour extraire chaque page d’un document dans des fichiers dont le nom commencera par le numéro de la page codé sur 5 chiffres :
pdftk mon-document.pdf burst output %05d_fichiers_extraits.pdf
Rapports
Extrait les méta-données, les marque-pages (signets) et les étiquettes de page d’un PDF dans un fichier texte :
pdftk mon-document.pdf dump_data output rapport.txt
Gestion des formulaires
Liste des champs d’un formulaire
Extrait la liste des champs, et leurs propriétés, d’un formulaire PDF dans un fichier texte :
pdftk mon-document.pdf dump_data_fields output liste_des_champs.txt
Remplir un formulaire PDF
Permet de remplir les champs d’un formulaire PDF avec des données provenant d’un fichier FDF ou d'un fichier XFDF (XML).
pdftk document.pdf fill_form données.fdf output document-rempli.pdf pdftk document.pdf fill_form données.xfdf output document-rempli.pdf
Les champs seront toujours modifiables (mais pré-remplis).
Pour rendre les champs non modifiables (c’est-à-dire « aplatir » le PDF), il faut utiliser l’option « flatten
» :
pdftk document.pdf fill_form données.fdf output document-rempli.pdf flatten pdftk document.pdf fill_form données.xfdf output document-rempli.pdf flatten
dont_ask
» en fin de commande permet d'écraser un éventuel fichier existant automatiquement. Exemple :pdftk document.pdf fill_form données.fdf output document-rempli.pdf dont_ask
Exemple de fichier XFDF
Soit un fichier PDF contenant deux champs de saisie, nommés « SAI_Lieu
» et « SAI_Date
». Pour (pré-)remplir ces champs de saisie par programmation, le fichier XFDF généré doit au moins avoir la forme suivante et être en UTF-8 :
<?xml version="1.0" encoding="UTF-8"?> <xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve"> <fields> <field name="SAI_Lieu"> <value>Metz</value> </field> <field name="SAI_Date"> <value>12 novembre 2008</value> </field> </fields> </xfdf>
Superposition
Filigrane
Permet de mettre un PDF en arrière-plan d’un autre PDF :
pdftk document.pdf background fond.pdf output sortie.pdf
Tampon
Permet de tamponner un PDF (document-à-tamponner.pdf) avec un autre PDF (tampon.pdf) :
pdftk document-à-tamponner.pdf stamp tampon.pdf output document-tamponné.pdf
Modifier les méta-données
Permet de modifier ou de mettre à jour les méta-données du PDF, préalablement extraites avec l’opérande « dump_data ». Il suffit de modifier le fichier « rapport.txt » contenant l’extraction en question, puis de mettre à jour des méta-données du PDF de la manière suivante :
pdftk document.pdf update_info rapport.txt output document-mis-à-jour.pdf
Désinstallation
Pour supprimer cette application, il suffit de supprimer le paquet pdftk. La configuration de l’application sera conservée ou supprimée selon la méthode de désinstallation que vous choisirez.
Voici un script fonctionnel qui j'espére vous seras utile.
#!/bin/bash # Sauvegardez le script sous le nom Operations_Sur_Fichiers_Pdf # Copiez-le dans le dossier /usr/local/sbin avec les commandes suivantes # sudo cp $(pwd)/Operations_Sur_Fichiers_Pdf /usr/local/sbin/Operations_Sur_Fichiers_Pdf # sudo chmod +x /usr/local/sbin/Operations_Sur_Fichiers_Pdf # ################################################################################ # FONCTION DU SCRIPT # Ce script sert à concaténer plusieurs fichiers pdf indépendants cryptés # ################################################################################ # ################################################################################ # Dépann'Informatique 2006-2012 # Auteur: Eric LAFFRAT # Si ce script vous a rendu service veuillez me le faire savoir par courriel en # employant l'adresse électronique ci-dessous # informatique.professionnelle@gmx.fr # Fabrication le 17/05/2012 à 09h 30 # Finition le 17/05/2012 à 18h 20 # Script testé sur des fichiers pdf cryptés sans espace dans le nom de fichier # Les fichiers étaient dans un ordre numérique ascendant # ################################################################################ # Effacement de l'écran de travail reset # Condition de fonctionnalité : # Si pdfcrack n'est pas installé forcage de l'installation if [ -z "`dpkg --get-selections pdfcrack`" ]; then echo "VEUILLEZ INSTALLER LE PAQUET PDFCRACK" echo "Entrez votre mot de passe" sudo apt-get -y -qq install pdfcrack>/dev/null # Si pdfcrack est installé afficher une information positive if [ -n "`dpkg --get-selections pdfcrack`" ]; then echo "Le paquet pdfcrack est installé" # Le programme continue sa course else # Si pdfcrack n'est pas installé afficher une information négative echo "Le paquet pdfcrack est toujours pas installé" # Mettre fin au script au cas où l'utilisateur mettrait fin volontairement au script # Soit par oubli du mot de passe ou pour faute de frappe ou par jeu exit fi fi # Affectation du paramètre "$*" à la variable NomMisEnParametre # "$*" = Tous les paramètres de position (en un seul mot) NomMisEnParametre="$*" # Si le paramètre $* est vide afficher une information if [ -z "$NomMisEnParametre" ]; then echo "Veuillez mettre un nom de fichier sans l'extension si possible"; fi # Enléve tous les espaces du nom NomMisEnParametre=`echo $NomMisEnParametre|sed 's/ /_/g'` # Obtenir le nom du fichier sans son extension NomMisEnParametre=`echo $NomMisEnParametre|cut -f1 -d.` # Informer l'utilisateur du changement opéré echo -e "\n\nVoici le nom de votre fichier reformaté $NomMisEnParametre" # Obtenir le dossier actuel DossierExploite=`pwd` # Informer l'utilisateur de ce qu'il va se passer echo "Donne à tous les fichiers le mode 777" sudo chmod 777 $DossierExploite/* # OBTENIR LE MOT DE PASSE DE CHAQUE FICHIER PDF # Initialisation de la variable NFichier NFichier=0 # La commande ls -d $DossierExploite/*.pdf donne les informations suivantes: /Nom_Du_Dossier/Nom_De_Fichier.Extension for FichierListes in `ls -d $DossierExploite/*.pdf`; do # Concaténation de la variable NFichier càd NFichier=1 une premiére fois puis NFichier=2 ect NFichier=$[$NFichier+1] # Enregistrer chaque mot de passe dans un tableau MdpP[$NFichier]=`pdfcrack -o $FichierListes|grep owner-password|cut -f3 -d' '|sed 's/'\''//g'` # Fin de la boucle done # Créer un dossier temporaire DossierTemporaire=`mktemp -d` # Initialisation de la variable NFichier NFichier=0 # La commande ls -d $DossierExploite/*.pdf donne les informations suivantes: /Nom_Du_Dossier/Nom_De_Fichier.Extension for FichierListes in `ls -d $DossierExploite/*.pdf`; do # Concaténation de la variable NFichier càd NFichier=1 une premiére fois puis NFichier=2 ect NFichier=$[$NFichier+1] # Obtenir le nom de base du fichier à décrypter pour pouvoir le mettre dans $DossierTemporaire FichierADecrypter=`basename $FichierListes` # Exécution effective de pdftk avec en argument le Mot De Passe de chaque fichier puis les enregistre dans $DossierTemporaire pdftk $FichierListes input_pw "${MdpP[$NFichier]}" output $DossierTemporaire/$FichierADecrypter done # La variable TousLesFichiersPdf reçois la liste des fichiers contenu dans $DossierTemporaire TousLesFichiersPdf=`ls -d $DossierTemporaire/*.pdf` # pdftk rassemble tous les fichiers pdf en un seul fichier pdf pdftk $(echo $TousLesFichiersPdf) cat output $DossierExploite/$NomMisEnParametre.pdf # Copie des fichiers décryptés vers le dossier de travail cp $(echo $TousLesFichiersPdf) $DossierExploite # Nettoyage avant sortie /bin/rm -Rf $DossierTemporaire exit 1;