Est-il possible en Ghostscript d'ajouter du filigrane à chaque page en PDF

je convertir PDF - > many JPEG et de nombreuses JPEG -> beaucoup de PDF en utilisant ghostscript. Je dois ajouter du texte en filigrane sur chaque page JPEG convertie (PDF). Est-ce possible en utilisant seulement Ghostscript et PostScript?

Le seul moyen que j'ai trouvé:

gswin32c-q-sDEVICE=pdfwrite-dBATCH-dNOPAUSE-protocole=output.filigrane pdf.PS input.pdf

mais ceci insérera watermark.ps filigrane sur la première page séparée dans output.pdf.

puis-je le faire sur les pages PDF de sortie directement?

puis-je le faire directement sur les pages JPEG de sortie?

<<
   /BeginPage
   { gsave
       /Helvetica_Bold 120 selectfont
       .85 setgray 130 70 moveto 50 rotate (Sample) show
     grestore
   } bind
>> setpagedevice

Si j'utilise /EndPage au lieu de /BeginPage - il est dit que setpagedevice n'est pas applicable...

Comment refaire ce script <!--4?

8
demandé sur Kurt Pfeifle 2012-09-03 10:38:03

3 réponses

Peu trop grand pour un commentaire, j'ai donc ajouté une nouvelle réponse. La procédure EndPage (voir page 441 du manuel de référence du langage PostScript) prend deux paramètres supplémentaires sur la pile, un nombre de pages émises jusqu'à présent, et un code de raison.

Vous pouvez utiliser le nombre de pages pour faire des choses intéressantes comme le duplexage, ou seulement marquer des pages paires ou n'importe quoi, mais je suppose que dans ce cas vous ne le voulez pas, donc vous le " pop " juste de la pile.

le code de raison vous dit pourquoi la page est émise, encore une fois vous ne vous en souciez probablement pas alors vous pop juste la valeur.

enfin la page finale doit retourner une valeur booléenne à l'interpréteur en disant Si oui ou non transmettre la page (cela vous permet de faire d'autres choses intéressantes, comme imprimer seulement les 10 premières pages et ainsi de suite).

vous devez donc initialement supprimer deux valeurs, exécuter votre code et retourner un booléen. Assez trivial:

<<
   /EndPage
   { pop pop %% *BEFORE* gsave as that puts a gsave object on the stack
     gsave
     /Helvetica_Bold 120 selectfont
     .85 setgray 130 70 moveto 50 rotate (Sample) show
     grestore
     true %% transmit the page, set to false to not transmit the page
   } bind
>> setpagedevice
8
répondu KenS 2012-09-26 07:26:51

la réponse acceptée était d'insérer des pages pour moi. Les pages étaient vierges à l'exception du filigrane. Si vous rencontrez ceci, essayez d'ajouter le bit 2EQ ici

<<
   /EndPage
   {
     2 eq { pop false }
     {
         gsave      
         /Helvetica_Bold 120 selectfont
         .85 setgray 130 70 moveto 50 rotate (Sample) show
         grestore
         true
     } ifelse
   } bind
>> setpagedevice

j'ai trouvé le site suivant qui m'a orienté dans la bonne direction

http://habjan.blogspot.com/2013/10/how-to-programmatically-add-watermark.html

Voici la syntaxe d'appel où le fichier ci-dessus est sauvegardé en filigrane.ps et gswin32c font référence au ghostscript exe

gswin32c -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=watermarked.pdf watermark.ps original.pdf
4
répondu Reid Evans 2014-08-07 16:25:19

je ne sais pas ce que vous entendez par "directement". Il est possible, comme vous l'avez constaté, qu'un interpréteur de PostScript fasse beaucoup de choses par page. PostScript est un langage de programmation après tout.

je suggère que les procédures/BeginPage et /ou / EndPage dans le dictionnaire de périphérique de page seraient l'endroit pour commencer. Ceux-ci vous permettent d'exécuter des PostScript arbitraires au début ou à la fin de chaque page.

si vous définissez une procédure / BeginPage, alors elle être exécuté avant toutes les opérations de marquage du programme input, si vous définissez un / EndPage, alors il sera exécuté après les opérations de marquage de l'entrée du programme (page par page(.

cela vous permet d'avoir vos propres notes se trouvent 'sous' ou 'au-dessus' des notes du programme.

1
répondu KenS 2012-09-03 07:11:35