我有一台 HP 的旧款 LaserJet 打印机(具体来说,型号为 4000)。它应该可以理解 PostScript,但它经常拒绝打印其他打印机、evince 和 ghostscript 都完全可以接受的内容。我以前可以通过将ps2ps
输出语言级别强制为 1 来解决这个问题,但这周我有一份文档,即使这样也不够好;它打印了两页 11 页然后就放弃了。如果我手动将文档送入 TCP 端口 9100 上的打印机以便查看错误(而不是使用打印后台处理程序),我会得到以下信息:
%%[ Error: undefined; OffendingCommand: ⬜ ]%%
%%[ Flushing: rest of job (to end of file) will be ignored ]%%
其中 ⬜ 应该是“此字体中没有此字符”的提示。不用说,文件中任何地方都没有非 ASCII 字符。立即出现问题的文档是 pdfTeX 输出,但我在从 Firefox、Inkscape 和 OpenOffice 打印时也遇到了这些问题(如果我没记错的话,所有这些程序都使用 cairo 来生成 PostScript,因此可能样本没有人们想象的那么大)。这是不是打印后台处理程序问题,我使用 netcat 手动给打印机供纸时也遇到同样的问题。
有人能建议针对此类问题的一般故障排除策略吗,以及/或者重新连接该死的东西以使其对输入不那么挑剔的方法吗?
答案1
您说 Ghostscript 对文件没有问题?好的,然后尝试这个:
第一个选项:
- 首先将其转换为 PDF,然后
- 然后打印 PDF(通过后台处理程序的正常方式)。
这是一个 Ghostscript 命令行(适用于 Windows),它将创建 PDF:
gswin32c.exe ^
-dBATCH ^
-dNOPAUSE ^
-sDEVICE=pdfwrite ^
-dSAFER ^
-r600x600 ^
-dFIXEDMEDIA ^
-sDEFAULTPAPERSIZE=a4 ^
-dPDFSETTINGS=/printer ^
-sOutputFile=problematic.pdf ^
c:/path/to/your/problematic.ps
检查 stdout 和 stderr 输出,看看 Ghostscript 在转换时是否给出任何警告或错误。获得 PDF 后,检查使用了哪些字体(以及是否嵌入了这些字体)。
第二种选择:
- 首先将有问题的文件转换为 PCL,然后
- 然后打印 PCL(绕过后台处理程序,使用
netcat
)。
这是一个 Ghostscript 命令行(适用于 Windows),它将创建一个 PCL:
gswin32c.exe ^
-dBATCH ^
-dNOPAUSE ^
-sDEVICE=ljet4d ^
-dSAFER ^
-r600x600 ^
-dFIXEDMEDIA ^
-sDEFAULTPAPERSIZE=a4 ^
-sOutputFile=problematic.pcl ^
c:/path/to/your/problematic.ps