これは、黒一色または黒以外のものを印刷する単純な実装です。ニーズによっては、もっと複雑にする必要があるかもしれません。詳細を知らずに、私はexitserverを使用するというブルートフォースアプローチを採用しました。exitserverを使用すると、RIPのデフォルトの操作を再定義できます。RIPを通常の動作に戻すには、ripを再起動するか、別の終了サーバールーチンを作成して、サーバーの変更の定義を解除する必要があります。
ルーチンは、exitserver postscriptコードを送信することにより、ripにインストールされます。PCの場合、これは、プリンタ共有へのDOSコピーコマンドを使用して実行できます。ファイルをデバイスに送信するためのsendpsプログラムもWeb上にあります。
copy redef1.ps \\127.0.0.1\psprinter
このexitserverルーチンは、userdictで/ setcmykcolor関数を定義します。これは、システムdictのsetcmykcolorよりも優先されます。スタックには4つの数字があり、最後の数字は黒になります。バック値が複製され、ゼロと比較されます。黒がゼロでない場合は黒ブロックが実行され、そうでない場合は黒以外が実行されます。0 setgray=blackおよび1setgray= 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
どのプログラムから印刷するかは関係ありません。出口サーバーのどちらのバージョンが最後にロードされても、出力が印刷される方法になります。
これは簡単な.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
出力には「黒」または「黒ではない」のみが表示されますが、テキストがオーバープリントされるため、印刷されていない色のゴースト画像が表示されます。
これは、通常のsetcmykcolorを使用するようにRIPを復元するための出口サーバーです。
%!
serverdict begin 0 exitserver
userdict /setcmykcolor undef
冒頭で述べたように、これは黒ではなく黒の色合いを許可するなどの単純な実装です。色のバリエーションもあり、少量の黒と色を混ぜると、単純なルーチンが暗赤色の0.87にだまされる可能性があります。 75 .1 setcmykcolorは黒として定義されますが、おそらく黒ではないはずです。