使用lp -o raw打印PostScript文件出现结果不一致的问题
分析与解答
1. Raw模式下双面/单面打印差异的可能原因
首先要明确:-o raw 模式的核心是让CUPS不转换文件内容,直接将PostScript文件发送给打印机,但这并不意味着CUPS完全不处理作业的其他配置——尤其是打印机的默认设置可能会影响最终输出。
可能的诱因包括:
- CUPS版本差异:从2.2.0升级到2.2.5后,CUPS对raw作业的处理逻辑有细微调整。旧版本可能会强制忽略打印机的默认双面设置,而新版本更尊重打印机PPD文件中的默认配置。如果那三台异常机器的打印机默认设置是“双面打印”,而你的PS文件本身没有明确指定单面打印的PostScript指令,打印机就会用默认设置输出。
- PPD文件变化:升级macOS时,系统可能自动更新了打印机的PPD(PostScript Printer Description)文件。新的PPD可能将双面打印设为默认值,而旧版本PPD是单面。即使使用
-o raw,打印机仍会遵循自身的默认打印模式(除非PS文件里有明确的<< /Duplex false >> setpagedevice这类指令)。 - 升级后的配置残留:从El Capitan升级到Sierra时,打印机的配置可能没有被完全重置,保留了之前的双面打印默认值,而你在2.2.0的机器上可能手动设置过单面默认。
你可以尝试在异常机器上,手动添加强制单面的参数来验证:
lp -o raw -o sides=one-sided -n 2 27116_6-pack_Pixel_inlay-duplo.ps
如果生效,说明问题确实出在打印机的默认双面设置上。
2. 打印任务名称差异的原因
异常任务显示原PDF文件名,大概率是因为你的PostScript文件中包含了原PDF的元数据。新版本CUPS(2.2.5)会解析PS文件中的Title字段(这个字段通常来自原PDF的文档名称)作为任务名称;而旧版本(2.2.0)可能直接使用PS文件的文件名作为任务名称。
你可以用文本编辑器打开PS文件,搜索/Title关键字,应该能找到类似/Title (原PDF文件名)的条目——这就是CUPS读取任务名称的来源。
3. -n参数在Raw模式下生效的原因
这其实是对-o raw模式的误解:raw模式只是让CUPS不修改文件的内容,但作业的控制参数(比如打印份数-n、优先级、纸张大小等)仍然由CUPS负责处理。
具体来说,CUPS会根据-n参数,要么:
- 将raw文件重复发送
n次给打印机; - 或者向打印机发送一次raw文件,同时发送硬件层面的“打印n份”指令(取决于打印机是否支持该功能)。
这两种方式都不会修改你的PS文件内容,只是控制作业的执行次数,所以-n参数在raw模式下完全可以正常生效——这和“raw模式不修改文件内容”的核心逻辑并不冲突。
内容的提问来源于stack exchange,提问作者Paul Verschoor




