GhostScript 使用 alpha 绘制文本

GhostScript draw text with alpha

GhostScript 版本:9.53.3

我需要为所有页面添加 (Entwurf) 标记。

<<
   /EndPage
   {
     gsave
       /Helvetica-Bold 120 selectfont .5 .setfillconstantalpha .45 setgray
       130 430 moveto 30 rotate (Entwurf) show -30 rotate
       130 130 moveto 30 rotate (Entwurf) show -30 rotate
     grestore
     true
   } bind
>> setpagedevice

没有 .5 .setfillconstantalpha 这个脚本运行成功。我之前使用过 0.5 .setopacityalpha 但它以同样的方式崩溃并且自 9.53 以来已被弃用。

cat start.pdf | gs -q -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=/workspace/test.pdf Watermark_def.ps -
Error: /undefined in /--.endpage--
Operand stack:
   (/tmp/gs_KvXeWS)   --nostringval--   --dict:7/16(L)--   false   --dict:4/6(L)--   2   0   2   0.5
Execution stack:
   %interp_exit   .runexec2   --nostringval--   .endpage   --nostringval--   2   %stopped_push   --nostringval--   .endpage   .endpage   false   1   %stopped_push   1990   1   3   %oparray_pop   1989   1   3   %oparray_pop   1977   1   3   %oparray_pop   .endpage   1978   3   3   %oparray_pop   .endpage   .endpage   2   1   12   .endpage   %for_pos_int_continue   .endpage   1938   4   7   %oparray_pop   .endpage   1820   6   7   %oparray_pop   .endpage   9   .endpage
Dictionary stack:
   --dict:731/1123(ro)(G)--   --dict:1/20(G)--   --dict:80/200(L)--   --dict:80/200(L)--   --dict:133/256(ro)(G)--   --dict:320/325(ro)(G)--   --dict:31/32(L)--
Current allocation mode is local
GPL Ghostscript 9.53.3: Unrecoverable error, exit code 1

那不是崩溃。这是在错误情况下的优雅退出。

.setfillconstantalpha 是一个非标准的 PostScript 扩展,PostScript 不支持透明度(除了一些有限的时尚)所以你不能在普通的 PostScript 程序中使用 alpha 混合。

Ghostscript,因为PDF的需要,在图形库中确实支持透明度,并且在PostScript语言中添加了一些有限的支持以使其能够使用。这绝对是非标准的,不适用于任何其他 PostScript 解释器。

但是,这些扩展的使用取决于以正确顺序发生的各种操作;弄错了,它可能会崩溃。所以默认情况下,您不能使用它们来防止恶意程序使解释器崩溃(或更糟)。

如果您想使用这些扩展程序(并冒着崩溃的风险),那么您需要特别允许它们。这已记录在案,请参阅联机文档 here and look for -dALLOWPSTRANSPARENCY. Also here.