GhostScript 9.53.3添加带透明度文字水印出现undefined报错如何解决
报错原因
- 你用到的透明度设置相关操作符属于PostScript扩展功能,GhostScript 9.52及之后版本默认禁用了PostScript代码的透明度操作权限,直接调用未声明的扩展操作符会触发未定义错误,导致EndPage执行过程中断,最终抛出你看到的
/undefined in /--.endpage--报错。 .setfillconstantalpha不是公开的标准调用接口,即使开启权限也可能存在兼容性问题。
正确实现方案
1. 调整水印配置脚本
修改Watermark_def.ps内容如下,使用官方推荐的setfillalpha接口设置填充透明度:
<< /EndPage { gsave /Helvetica-Bold 120 selectfont % 填充透明度设置为0.5 0.5 setfillalpha .45 setgray 130 430 moveto 30 rotate (Entwurf) show -30 rotate 130 130 moveto 30 rotate (Entwurf) show -30 rotate grestore true } bind >> setpagedevice
如果偏好使用旧版setopacityalpha接口,直接替换0.5 setfillalpha为0.5 setopacityalpha即可,9.53版本仍兼容该接口。
2. 调整执行命令
添加两个参数开启透明度权限、保证输出PDF支持透明度:
cat start.pdf | gs -q -dBATCH -dNOPAUSE -dALLOWPSTRANSPARENCY -dCompatibilityLevel=1.4 -sDEVICE=pdfwrite -sOutputFile=/workspace/test.pdf Watermark_def.ps -
其中-dALLOWPSTRANSPARENCY用于开启PostScript透明度操作权限,-dCompatibilityLevel=1.4保证输出的PDF版本支持透明度特性。
内容的提问来源于stack exchange,提问作者Pascal。
相关产品推荐
相关产品推荐

