Imprimer le fichier PDF avec le chemin du fichier dans le pied de page

Je voudrais imprimer un PDF sur Windows, mais je veux imprimer le chemin du fichier PDF dans le pied de page du document imprimé (comme je peux le faire dans Word).

Nous utilisons Adobe Reader ou Foxit Reader.

Connaissez-vous une façon d'y parvenir?

Tout d'abord: certains pilotes d'imprimante vous permettent de définir un «filigrane» pour chaque page imprimée. Vous pouvez abuser de cette fonctionnalité afin de faire ce que vous voulez. Cependant, au mieux de ma connaissance, Acrobat Reader n'inclut pas une telle fonctionnalité (même si vous pouvez (ab) utiliser le support JavaScript intégré dans Acrobat pour réaliser quelque chose comme ce que vous voulez …

Alors ok. Permettez-moi de lui donner un coup de feu. Puisque nous sommes ici sur superuser.com (et pas stackoverflow.com), je ferais sans langage de programmation , et j'utiliserais plutôt des scripts (batch) à la place.

Première étape: utilisez Ghostscript pour créer une page de bas de page PDF montrant la chaîne "pied de page" avec un chemin

Nous utiliserons une commande Ghostscript relativement simple pour cela. La commande prend un petit extrait PostScript en tant qu'entrée en ligne de commande ( -c "..." ) et produit le fichier PDF comme «myfooter.pdf». Nous utiliserons la lettre comme taille de média (remplacer par a4 ou tout ce dont vous avez besoin). Voici:
(Je suppose que nous sommes sur Windows. Si l'un des lecteurs soit sur Linux, utilisez gs au lieu de gswin32c.exe .)

 gswin32c.exe ^ -o myfooter.pdf ^ -sDEVICE=pdfwrite ^ -sPAPERSIZE=letter ^ -c "72 12 moveto /Helvetica findfont 9 scalefont setfont (File: d:\\c\\b\\a.pdf) show" 

Maintenant, nous avons une page PDF qui contient le pied de page uniquement, avec le reste de la toile sans aucun contenu. Vous pouvez l'ouvrir dans une visionneuse et voir que la chaîne commence à 72 points PostScript (72 pt == 1 pouce) à gauche du coin inférieur gauche et 12 points au sommet.

Deuxième étape: utilisez le ToolKit PDF pour superposer la page de bas de page avec votre PDF original

Nous utiliserons la commande pdftk.exe du PDF ToolKit maintenant. Cet utilitaire de ligne de commande peut faire beaucoup de choses aux fichiers PDF. La fonctionnalité dont nous avons besoin ici: superposer des pages à partir de deux documents PDF différents l'un pour l'autre afin de fournir un «tampon» ou un «arrière-plan» au fichier d'origine. Voici:
(Si un lecteur se trouve sur Linux, utilisez pdftk au lieu de pdftk.exe .)

 pdftk.exe ^ d:\c\b\a.pdf ^ stamp myfooter.pdf ^ output d:\c\b\result-with-footer-a.pdf 

(BTW, pdftk est également dérivé du libarary iText, celui auquel l'autre réponse se réfère).

Troisième étape: Créez un script de lot qui fait les deux étapes précédentes se produire automatiquement

Cela vous reste pour vos plaisirs d'exercice … 😉


Vous pouvez faire pivoter la chaîne de 90 degrés, de sorte qu'il se lit verticalement sur la bordure de la page de gauche. Pour ce cas, modifiez la commande Ghostscript comme ceci: gswin32c.exe -sDEVICE=pdfwrite -o myfooter.pdf -dAutoRotatePages=/None -c "12 72 moveto /Helvetica findfont 9 scalefont setfont 90 rotate (File: d:\\c\\b\\a.pdf) show showpage" .

Voici un fichier batch Windows créé à partir de la réponse de @ Kurt :

 @echo off if [%*]==[] goto :usage if not exist outdir mkdir outdir for %%a in (%*) do ( call :makeFooter %%a call :addFooter %%a ) goto :eof :makeFooter gswin32c ^ -o outdir\footer_%1 ^ -sDEVICE=pdfwrite ^ -c "5 5 moveto /Helvetica findfont 12 scalefont setfont (%~n1) show" goto :eof :addFooter pdftk ^ %1 ^ stamp outdir\footer_%1 ^ output outdir\%1 del outdir\footer_%1 goto :eof :usage echo. &echo. -={ Usage: %0 [list of pdf files or pattern] }=- echo. &echo. %~n0 foo*.pdf &echo. 

2013-février-04:

  • Bug-fix: était en panne parce que le nom de fichier n'était pas passé correctement aux routines Make & addFooter
  • Changement: le nom de fichier maintenant conservé comme entrée, supprime également les fichiers de bas de page temporaires

Vous devrez peut-être changer gswin64c pour les installations 64 bits de ghostscript.

Les unités dans la ligne -c de :makeFooter sont en points. Donc, 5 5 /moveto est à 5 pts et 5 pts en haut à gauche de la page, et /Helvetica ... 12 est d'utiliser une police Helptépe 12pt.

Il n'y a aucun moyen de mettre à jour automatiquement cela comme le champ dans Word. Mais ce que vous pouvez faire, c'est de traiter le fichier après qu'il a été créé et déplacé vers l'emplacement autre que le document source. Le format PDF a été vraiment conçu pour l'impression et le changement pour autoriser les formulaires et autres choses était juste un hack.

Je suppose que vous voudrez que ce soit une sorte de processus automatisé et générique, donc vous devrez utiliser une bibliothèque séparée pour le faire. L'un des plus prolifiques est iText qui est une bibliothèque java open source qui permet l'édition de fichiers PDF. Ce n'est pas trop difficile à utiliser et je vais donner un exemple ci-dessous au code dont vous aurez besoin pour faire fonctionner cet exercice.

Vous aurez besoin du JDK et iText de sourceforge. Voici le code java

 import java.io.*; import com.itextpdf.text.pdf.*; import com.itextpdf.text.*; public class AddFooter { public static void main(String[] args) throws Exception { String fileName; try { fileName = args[0]; } catch (Exception e) { System.out.println("You need to pass the filename after command"); return; } int bottomHorizontalOffset = 100; int bottomVerticalOffset = 10; String workingDir = System.getProperty("user.dir"); String file = workingDir + "\\" + fileName; String stamped = workingDir + "\\" + fileName + "_stamped.pdf"; stamped = stamped.replaceAll("\\\\", "\\\\\\\\"); file = file.replaceAll("\\\\", "\\\\\\\\"); PdfReader pdfReader = new PdfReader(file); PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileOutputStream(stamped)); for(int i = 1; i <= pdfReader.getNumberOfPages(); i++) { PdfContentByte content = pdfStamper.getUnderContent(i); BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); content.beginText(); content.setFontAndSize(bf, 12); content.setTextMatrix(bottomHorizontalOffset, bottomVerticalOffset); stamped = stamped.replaceAll("\\\\\\\\", "\\\\"); content.showText(stamped); content.endText(); } pdfStamper.close(); } } 

Ce code a des problèmes, et comme je ne connais pas tous les détails, alors ils sont:

  1. Un nouveau pdf est créé avec un nom différent, et c'est le chemin d'accès et le nom dans le pied de page
  2. Vous pouvez modifier le fond … variables pour positionner le texte en bas
  3. Vous devez ajuster la police et la taille en fonction de vos documents
  4. Il est codé pour Windows, donc quelques ajustements seraient nécessaires pour * nix
  5. Il s'attend à être exécuté à partir du répertoire où se trouve le fichier, c'est ainsi qu'il obtient le chemin.
  6. Il ne sera PAS autoupdate si vous déplacez le fichier, en fait vous ne pouvez pas l'exécuter une deuxième fois et éliminer le texte original.
  7. Ce code a été lancé rapidement, mais il compile et fonctionne, donc, si vous avez besoin de plus, ce serait un bon point de départ.

Puisque pdf n'a pas les champs 'autoupdate', vous ne souhaitez pas modifier l'association pdf pour indiquer un script pour l'exécuter, car chaque fois que vous ouvrez le fichier, il réécrivera le pied de page.

S'amuser.