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.
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.