9

を使用してPDF -> 多くの JPEG多くの JPEG -> 多くの PDFを変換しghostscriptます。変換されたすべての JPEG (PDF) ページに透かしテキストを追加する必要があります。Ghostscript と PostScript だけを使用することは可能ですか?

私が見つけた唯一の方法:

gswin32c -q -sDEVICE=pdfwrite -dBATCH -dNOPAUSE -sOutputFile=output.pdf watermark.ps input.pdf

ただし、これwatermark.psにより、最初の別のページに透かしが挿入されますoutput.pdf

出力PDFページで直接これを行うことはできますか?

出力JPEGページで直接これを行うことはできますか?

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

/EndPageの代わりに使用する/BeginPagesetpagedevice、適用されないと表示されます...

のためにこのスクリプトを作り直すには/EndPage?

4

3 に答える 3

8

コメントするには大きすぎるので、新しい回答を追加しました。EndPage プロシージャ (PostScript 言語リファレンス マニュアルの 441 ページを参照) は、スタックで 2 つの追加パラメーター、これまでに発行されたページ数、および理由コードを取ります。

ページ数を使用して、両面印刷やページのみのマーキングなどの興味深いことを行うことができますが、この場合はそれを望まないので、スタックから「ポップ」するだけです。

理由コードは、ページが発行されている理由を示しています。これもおそらく気にしないので、値をポップするだけです。

最後に、EndPage は、ページを送信するかどうかを示すブール値をインタープリターに返す必要があります (これにより、最初の 10 ページのみを印刷するなど、他の興味深いことを行うことができます)。

したがって、最初に 2 つの値を削除し、コードを実行してブール値を返す必要があります。かなり些細なこと:

<<
   /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
于 2012-09-26T07:26:51.787 に答える
6

受け入れられた答えは、私のためにページを挿入することでした。透かしを除いて、ページは空白でした。これに遭遇した場合は、ここに 2eq ビットを追加してみてください

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

正しい方向を示してくれた次のサイトを見つけました

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

上記のファイルがwatermark.psとして保存され、gswin32cがghostscript exeを参照する呼び出し構文は次のとおりです

gswin32c -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=watermarked.pdf watermark.ps original.pdf
于 2014-08-07T16:25:19.430 に答える
1

「直接」の意味がわかりません。お気づきのように、PostScript インタープリターにページごとにさまざまなことをさせることが可能です。結局、PostScript はプログラミング言語です。

ページ デバイス ディクショナリの /BeginPage および/または /EndPage プロシージャから開始することをお勧めします。これらにより、すべてのページの最初または最後に任意の PostScript を実行できます。

/BeginPage プロシージャを定義すると、入力プログラムからのマーキング操作の前に実行されます。/EndPage を定義すると、入力プログラムからのマーキング操作のに実行されます (ページごとに (.

これにより、独自のマークをプログラムのマークの「下」または「上」に置くことができます。

于 2012-09-03T07:11:35.007 に答える