如何将打印机驱动程序参数放在 postscript 打印文件中?

How to place printer driver parameters in postscript print file?

我有一个 post 脚本文件,它具有严重的打印机驱动程序设置依赖性。我正在尝试将打印机设置捆绑到我的 post 脚本打印文件中并将其传递给打印机。直通与 `lpr -l 一起工作得很好。但我无法将 ppd 中的某些选项直接带入 post 脚本文件。

Xerox pdd 文件被截断

*OpenUI *OutputMode/Print Quality: PickOne
*OrderDependency: 46.0 AnySetup *OutputMode
*DefaultOutputMode: HighSpeed
*OutputMode HighSpeed/High Speed: "
    <</PostRenderingEnhance true
    /PostRenderingEnhanceDetails currentpagedevice
    1 index get 1 dict copy
    dup /Type 33 put
    dup /OutputMode (high-speed) put
    >> setpagedevice
"
*End
*OutputMode HighQuality/High Quality: "
    <</PostRenderingEnhance true
    /PostRenderingEnhanceDetails currentpagedevice
    1 index get 1 dict copy
    dup /Type 33 put
    dup /OutputMode (highest-quality) put
    >> setpagedevice
"
*End
*OutputMode HighResolution/High Resolution: "
    <</PostRenderingEnhance true
    /PostRenderingEnhanceDetails currentpagedevice
    1 index get 1 dict copy
    dup /Type 33 put
    dup /OutputMode (highest-resolution) put
    >> setpagedevice
"
*End
*CloseUI: *OutputMode

当我将最高分辨率部分放在 %%BeginPrelog 部分的开头时,我得到一个无效文件:

<</PostRenderingEnhance true
/PostRenderingEnhanceDetails currentpagedevice
1 index get 1 dict copy
dup /Type 33 put
dup /OutputMode (highest-resolution) put
>> setpagedevice

当我通过 ps2pdf 评估文件的正确性时,出现以下错误:

Error: /undefined in --get--
Operand stack:
   --nostringval--   PostRenderingEnhance   true   PostRenderingEnhanceDetails   --dict:210/309(ro)(L)--   PostRenderingEnhanceDetails
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1990   1   3   %oparray_pop   1989   1   3   %oparray_pop   1977   1   3   %oparray_pop   1833   1   3   %oparray_pop   --nostringval--   %errorexec_pop   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--
Dictionary stack:
   --dict:731/1123(ro)(G)--   --dict:0/20(G)--   --dict:75/200(L)--
Current allocation mode is local
Current file position is 308
GPL Ghostscript 9.50: Unrecoverable error, exit code 1

尽管如此,这个 post 中的 setpagedevice 选项工作得很好: How to select PostScript printer output tray

所以我不知道如何将 ppd 选项转换为有效的 postscript 代码。有没有人知道如何获得有效的 post 脚本文件?

您正在尝试将特定于设备的控件 (/OutputMode) 应用到不支持该控件的设备。不仅如此,您包含的代码还会访问当前页面设备字典,并且假设其中将有一个 PostRenderingEnhanceDetails 字典。该代码不会尝试检查所需数据是否存在,这意味着它只能在页面设备字典中具有 /PostRenderingEnhanceDetails 条目的设备上运行。 pdfwrite 设备(ps2pdf 使用的设备)没有这样的条目,这就是您收到错误的原因。

您的 PostScript 可能没有任何问题,只是您无法将它应用到该设备。请注意,您 link 问题中的所有键都是标准页面设备字典条目,OutputMode 不是,也没有 PostRenderingEnhanceDetails 条目。

PPD(PostScript 打印机描述)中的 PostScript 代码是您需要使用的全部内容,但 PPD 的目的是包含 PostScript,它将可靠地工作打印机的用途。您不能使用 Ghostscript 测试为非 Ghostscript 设备配置的特定于设备的 PostScript 的正确性。