我希望Postscript专家可以帮助我理解以下代码片段:
1 %%BeginFeature: InputSlot Tray2
2 1 dict dup /MediaPosition null put setpagedevice
3 userdict /lms
4 currentpagedevice /InputAttributes get 1 known { 1 }{ 0 }ifelse put
5 currentpagedevice /InputAttributes get lms get setpagedevice
我可以肯定地说,它很努力地试图确定打印机是否有纸盘2,是否可以使用它,否则,请使用纸盘1-除非它不起作用!
它曾经用于理光MFP(复印机/打印机),但不适用于Sharp MFP。
我尝试将第4行更改为
currentpagedevice /InputAttributes get 1 known { 1 }{ 1 }ifelse put
但是那也不起作用。
最终可行的方法是将第2行更改为
1 dict dup /MediaPosition 1 put setpagedevice
只是假设纸盘2存在,但我现在可以接受;但是现在我真的很想了解第3-5行的实际作用。
我认为第3行将称为lms
的 dict 放入堆栈,并根据堆栈的不同将1或0放入堆栈(第4行) / InputAttributes有什么(?这是我有点模糊的地方)。不知道第5行在做什么。
请赐教。
答案 0 :(得分:3)
我希望Postscript专家可以帮助我理解此代码 片段
1 dict dup /MediaPosition null put setpagedevice
创建一个包含项{MediaPosition: null}
的字典;将此小词典的内容与pagedevice词典合并。
userdict /lms currentpagedevice /InputAttributes get 1 known { 1 }{ 0 }ifelse put
从当前的页面设备字典中获取存储在InputAttributes
键下的字典。如果1
词典中有一个名为InputAttributes
的键(InputAttributes
词典的键是所有数字,将字典存储为值),则设置{{1 }}中的用户字典中的lms
,否则为1
。 (即保存0或1键。)
0
从当前的pagedevice词典中,再次获得currentpagedevice /InputAttributes get lms get setpagedevice
词典,并查找我们存储在InputAttributes
变量中的数字键(现在是userdict中的符号)。无论您从键lms
还是键0
取回哪个词典,都将该词典合并到pagedevice词典中。
即如果存在纸盘定义1,请选择它,否则默认为纸盘定义0。这里的1
符号可能没有内在的含义,可能只是临时的。但是,如果是这种情况,那么我们可以将这两行替换为:
lms
所以他们要么希望currentpagedevice /InputAttributes get dup 1 known { 1 }{ 0 }ifelse get setpagedevice
在这种用途之外继续存在,要么对PostScript不太满意!
由于上述代码的片段出现在Lexmark PPD文件中,因此我猜测它代表“ LexMark Systems”(或类似名称),并且该脚本可能源自理光之前的Lexmark打印机。
通过研究PPD文件,可能有一种标准的选择托盘设备的方法。