Это простая реализация, которая будет печатать сплошной черный цвет или все, что не является черным. В зависимости от ваших потребностей может потребоваться усложнение. Не зная больше, я применил подход грубой силы, используя exitserver. exitserver позволяет переопределить операцию RIP по умолчанию. Чтобы восстановить нормальную работу RIP, вам необходимо перезагрузить рип или написать другую процедуру выхода из сервера, чтобы отменить определение модификации сервера.
Подпрограмма устанавливается в рип, отправляя код постскриптума exitserver. Для ПК это можно сделать с помощью DOS-команды копирования на общий принтер. Существуют также программы sendps, которые можно найти в Интернете для отправки файла на устройство.
copy redef1.ps \\127.0.0.1\psprinter
Эта подпрограмма выхода из сервера определяет функцию /setcmykcolor в пользовательском словаре, которая будет иметь приоритет над setcmykcolor в системном словаре. в стеке будет 4 числа, где последним будет черный. Заднее значение дублируется и сравнивается с нулем. Если черный не равен нулю, будет выполнен черный блок, иначе будет выполнен не черный. 0 setgray=black и 1 setgray=white, поэтому, поскольку блок существует ниже, черный цвет будет напечатан как черный, а все остальное — как белый.
%!
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 будет определен как черный, хотя он, вероятно, должен быть не черным.
person
Fred F
schedule
18.02.2013