这是一个简单的实现,它将打印纯黑色或任何不是黑色的颜色。根据您的需求,它可能需要变得更加复杂。在不知道更多信息的情况下,我采用了使用exitserver的蛮力方法。exitserver允许重新定义RIP的默认操作。要恢复RIP的正常操作,您需要重新启动rip或编写另一个退出服务器例程来取消定义服务器修改。
通过发送exitserver后置代码将例程安装在rip中。对于PC,可以使用DOS复制命令将其发送到打印机共享。还有一些sendps程序可以在网络上找到,可以将文件发送到设备。
copy redef1.ps \\127.0.0.1\psprinter
这个 exitserver 程序定义了一个 /setcmykcolor 函数在 userdict 中,并优先于系统字典中的 setcmykcolor。堆栈上会有 4 个数字,最后一个是黑色。将黑色值复制并与零比较,如果黑色不为零,则执行黑色块,否则执行非黑色。0 setgray=黑色,1 setgray=白色,因此如下面的块所示,黑色将打印为黑色,其他所有颜色将打印为白色。
%!
serverdict begin 0 exitserver
userdict begin /setcmykcolor
{
dup 0 ne
{
%black
0 setgray
pop pop pop pop
}
{
%not black
1 setgray
pop pop pop pop
}ifelse
} def end
通过反转setgray的值,黑色将不会打印,所有其他“非黑色”的颜色将会打印。
%!
serverdict begin 0 exitserver
userdict begin /setcmykcolor
{
dup 0 ne
{
%black
1 setgray
pop pop pop pop
}
{
%not black
0 setgray
pop pop pop pop
}ifelse
} def end
你打印的程序不重要。无论哪个版本的exitserver最后被加载,输出将以该方式打印。
这里是一个简单的.ps示例。
%!PS-Adobe-3.0
%%Title: mwe.ps
%%Pages: 001
%%BoundingBox: 0 0 595 842
%%EndComments
%%Page: 1 1
%%PageBoundingBox: 0 0 595 842
/Times-Roman findfont 72 scalefont setfont
0 0 0 1 setcmykcolor
0 20 moveto (black) show
0 1 0 0 setcmykcolor
0 40 moveto (not black) show
0 0 0 1 setcmykcolor
0 60 moveto (black) show
1 0 0 0 setcmykcolor
0 80 moveto (not black) show
0 0 0 1 setcmykcolor
0 100 moveto (black) show
0 1 1 0 setcmykcolor
0 120 moveto (not black) show
showpage
输出将仅显示“黑色”或“非黑色”,但文字会重叠,因此您将看到未打印颜色的幽灵图像。
这是一个退出服务器,用于恢复RIP以使用正常的setcmykcolor。
%!
serverdict begin 0 exitserver
userdict /setcmykcolor undef
正如一開始所述,這是一個簡單的實現,例如允許黑色和非黑色的色調。還可以有變化的顏色,其中少量的黑色混合顏色可能會欺騙簡單程序,使得暗紅色0.87.75.1 setcmykcolor被定義為黑色,而實際上它應該是非黑色的。