Des bookmarks dans vos PDF

      3 commentaires sur Des bookmarks dans vos PDF

Alors que je bosse à finaliser le PDF de Face au Titan, j’ai abandonné (depuis plusieurs mois maintenant) Scribus pour Affinity Publisher. Puis par toute la gamme Affinity au final (même si j’utilise très peu photo pour l’instant).

Je parlerai peut-être de mon retour d’expérience sur Affinity dans quelques semaines. Je trouve le produit excellent. Mais il a quelques manques. Et notamment un assez important à mes yeux : il ne permet de gérer les Bookmarks/Signets dans un PDF.

Les signets, ce sont ces liens que vous pouvez trouver dans un cadre à gauche de votre lecteur PDF, et qui vous permettent de naviguer dans le document. Affinity Publisher ne gère pas ces éléments, et si vous générez un PDF avec ce logiciel, il reste trois solutions concernant les signets.

  1. Ne pas avoir de signets (pas OK sauf sur document d’une à deux pages)
  2. Créer les signets « à la main » via un éditeur de PDF
  3. Trouver comment factoriser tout ce boulot

J’ai choisi la trois.

Une combo de logiciels

Pour commencer, sachez que cette méthode va nécessiter l’emploi de trois logiciels. Notez que je travaille sous Windows, et que cela nécessitera sans doute des ajustements sous un autre environnement.

Pour commencer, il nous faudra un tableur. Pour ma part, j’utilise Calc présent sur Google Drive. N’importe quel autre devrait faire l’affaire.

Il faudra ensuite un éditeur de texte moderne et performant. Mon chouchou indétrônable, c’est Notepad++. Installez-le si ce n’est déjà fait.

Enfin, le logiciel qui va insérer les signets s’appelle PDFtk (pour PDF ToolKit) et nécessitera lui aussi une installation.

Préparez-vous un répertoire vierge, et c’est parti !

Étape 1 – Créer les signets

Pour commencer, il va falloir disposer de la liste des signets à créer quelque part. Ce sera dans le tableur.

Ce document vous permettra de voir comment je fonctionne.

C’est vraiment tout simple. La première colonne contient le texte du signet. La deuxième son niveau hiérarchique (1 à la base, puis 2, puis 3 pour les niveaux inférieurs). Dans la troisième colonne, on trouve une formule que vous pouvez voir dans l’image ci-dessus. C’est un calcul automatique de la page de démarrage, selon la page de démarrage de l’entrée précédente, et la taille en nombre de page de l’entrée précédente (la quatrième colonne).

Il est possible de se passer de cette formule et de la quatrième colonne, mais sur un document « vivant », dont les pages peuvent encore bouger, cela permet de recalculer de manière dynamique toutes les pages.

Faites vivre ce document au fur et à mesure de la mise en page de votre document.

Étape 2 – Fichier source

Nous allons maintenant constituer un fichier « source » qui va permettre de générer facilement tous ces signets grâce à PDFtk.

Sélectionnez l’ensemble de vos signets dans le tableur, en ne prenant que les trois premières colonnes. Copiez les données, et collez-les dans un nouveau document texte dans Notepad++.

Si vous venez d’un autre tableur que Google Calc, vérifiez que les données de chacune de vos colonnes sont bien séparées par une tabulation. Pour cela, activez l’affichage des tabulations (les flèches, dans le document ci-dessus) en suivant le menu ci-dessous.

Sauvegardez le fichier sous le nom sourcebookmarks.txt (ou n’importe quoi d’autre, mais moi j’utiliserai ça).

PDFtk ne saura pas gérer ce fichier. On va devoir le transformer.

Étape 3 – Macro et transformations

Nous allons réaliser plusieurs transformations sur ce texte avant de l’envoyer à PDFtk. Pour éviter d’avoir à souvent répéter l’opération, nous allons enregistrer une macro dans Notepad++.

Une macro, c’est un ensemble d’opérations qui seront enregistrées pour pouvoir être reproduites souvent de manière automatisées.

Commençons par démarrer une Macro.

À partir de maintenant, toute opération réalisée dans Notepad++ sera enregistrée.

Nous allons utiliser un Rechercher/Remplacer (Ctrl+H) en utilisant la puissance des Regex pour mettre en forme notre document.

Voici les codes à mettre respectivement dans Recherche et dans Remplacer par :

(.*)\t([0-9]*)\t([0-9]*)
BookmarkBegin\nBookmarkTitle: $1\nBookmarkLevel: $2\nBookmarkPageNumber: $3

Pensez à bien cocher le mode de recherche par Expression régulière, sinon cela ne fonctionnera pas ! Cliquez ensuite sur Remplacer tout, et votre fichier ressemblera à ça :

PDFtk ne gère pas correctement les caractères accentués. Il faut donc procéder à de nouvelles modifications dans ce fichier. Ce pourrait être fait à la main, mais autant automatiser.

Il va falloir remplacer toutes les occurrences accentuées par leur correspondance HTML. Vous trouverez ces correspondances sous ce lien (et bien d’autres). Étant toujours dans notre macro, nous allons à nouveau utiliser Rechercher/Remplacer (Ctrl+H) pour modifier les caractères é.

Le code pour remplacer tous nos é sera é. Consultez le tableau fourni en lien pour les autres caractères accentués dont vous avez besoin. Attention, les majuscules et minuscules ont des codes différents !

Dans Notepad++, on configure ainsi notre action.

Il faudra bien veiller à cocher Respecter la casse et à repasser en mode de recherche Mode normal.

Faites l’opération pour chaque caractère accentué (ou spécial, comme les cédilles) dont vous avez besoin, afin que votre fichier n’en comporte plus.

Quand votre fichier est prêt, il faut terminer la macro et l’enregistrer.

Choisissez un nom pour votre Macro et attribuez-lui un raccourci, même bidon. Il faut éviter un raccourci déjà attribué. Peu importe le raccourci, votre Macro apparaît maintenant dans le menu de Notepad++ !

Ne l’exécutez pas ! Sauvegardez plutôt votre fichier.

Ensuite, ouvrez un nouveau fichier vierge, copiez à nouveau les données depuis votre tableur et là, exécutez votre macro depuis le menu. C’est magique ! Plus besoin de refaire tous ces Rechercher/Remplacer en cas de mise à jour !

Si vous avez besoin de mettre à jour votre macro, ou que vous souhaitez en savoir plus, un petit guide bien utile.

Étape 4 – L’intégration

Vous avez maintenant un fichier sourcebookmarks.txt prêt à être utilisé avec PDFtk. Vous devriez aussi avoir un fichier PDF dans lequel manquent des bookmarks. Appelons-le mygame.pdf.

Créons un nouveau fichier via Notepad++, et appelons-le creer_bookmarks.bat. L’extension bat signifie qu’il s’agit d’un fichier batch qui nous servira à lancer une ligne de commande. L’idée derrière ce fichier est de ne plus avoir à s’occuper des chemins, des fichiers une fois que le processus fonctionne.

Ce fichier doit se trouver dans le même répertoire que les fichiers sourcebookmarks.txt et mygame.pdf. Vous pourrez adapter ce fichier si vous êtes à l’aise ensuite vers d’autres chemins.

Le code suivant va venir remplir notre fichier. Rien d’autre.

pdftk mygame.pdf update_info sourcebookmarks.txt output mygame_bookmarked.pdf

Si vous souhaitez en savoir plus sur le contenu de cette commande, je vous invite à consulter la documentation de PDFtk.

On sauvegarde le fichier. Dans le répertoire, on double clique sur le fichier creer_bookmarks.bat, qui ouvre brièvement une invite de commande.

Un fichier mygame_bookmarked.pdf a été créé, qui fait sensiblement la même taille que l’original. Mais on y trouve les signets, organisés hiérarchiquement ! Ce qu’on attendait !

Par la suite, si vous mettez à jour votre document, il faudra juste suivre la procédure suivante :

  • Est-ce que la liste des signets a été modifiée (liste des entrées, page des entrées) ?
    • OUI : je modifie les entrées dans le tableur, je copie les entrées dans le fichier sourcebookmarks.txt et j’applique ma macro.
    • Dans tous les cas : je copie mon nouveau PDF dans le répertoire et le nomme mygame.pdf. J’exécute creer_bookmarks.bat

L’objectif derrière la macro et la création du fichier batch est d’automatiser au maximum les futures mises à jour !

Maintenant, plus d’excuses pour ne pas avoir de signets dans vos PDF !

3 thoughts on “Des bookmarks dans vos PDF

  1. Dreadaxe

    Merci pour cet article technique !

    Il va me servir si je trouve le temps pour faire le bookmark de mes version numérique des livres de règles de WarGods of Ægyptus, Olympus, Wendigo.

    Je cherche un outils pour triturer du PDF. J’ai un fichier A PDF avec des éléments graphique de mauvaise qualité.
    https://drive.google.com/file/d/1qddzeIancaVGbfHJggPKCym0NxswdAxd/view?usp=sharing 3
    J’ai un autre fichier B PDF avec quasiment tous les éléments de bonnes qualités
    https://drive.google.com/file/d/1dC0yK9pwI-TGU3ltkJEhsnhUVz3DyVe8/view?usp=sharing 2

    Une idée sur comment changer rapidement les élément graphiques de A par les éléments de B ?
    https://bandwidth-hero-proxy-dreadaxe.herokuapp.com/?url=https%3A%2F%2Fforum.acolab.fr%2Fuploads%2Fdefault%2Foriginal%2F1X%2F8312cb80222358b5b51320b82a2c7bc120dae99a.png&bw=0&l=40

    Voilà de façon plus imagé ce que j’aimerai modifier. Remplacer les images de gauche par leurs équivalents plus grand à droite.

    Reply
    1. gulix Post author

      À part refaire les PDF ? Aucune idée. Là c’est la structure même des éléments.
      Tu pourrais ouvrir avec un éditeur performant tes PDF pour les remettre en forme (genre, Affinity Publisher fonctionne bien pour ouvrir en édition un PDF).

      Reply

Répondre à jbbourgoin Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *