使用 Ghostscript 将 PDF 转为 PostScript:大文件打印有问题

PDF to PostScript Using Ghostscript: large files having issues printing

我目前正在使用 Ghostscript 将 500 页的 PDF 文件转换为 PostScript。

我正在使用 Windows 7、Ghostscript x64 v 9.16 和柯达 Digimaster 商用打印机。

我使用 GhostScript 的以下参数将 PDF 转换为 PS:

C:\Program Files\gs\gs9.16\bin\gswin64c.exe" 
-dCompressFonts=true 
-dSubsetFonts=true 
-dEmbedAllFonts=true 
-sFONTPATH=C:\Windows\Fonts\ 
-dNOPAUSE 
-dBATCH 
-sDEVICE=ps2write 
-sOutputFile="PostScript.ps" 
"MyPdf.pdf"

然后,我根据打印机文档使用 %KDKSlip 命令添加 %KDK(专有)命令来指示需要在哪种纸张上打印哪些页面。

下面的示例将在 Letter 双面打印除第 1/2 和 5/6 页之外的所有页面。第 1/2 页将打印在名称为 "YellowPerf" 的纸张上,而第 5/6 页将打印在 "TriPerf":

 %!PS-Adobe-3.0
 %%BoundingBox: 0 0 612 792
 %%HiResBoundingBox: 0 0 612.00 792.00
 %%Creator: GPL Ghostscript 916 (ps2write)
 %%LanguageLevel: 2
 %%CreationDate: D:20150506143059-05'00'
 %%Pages: 8
 %%DocumentMedia: Letter 612 792 0 white ()
 %%+ YellowPerf 612 792 0 yellow ()
 %%+ TriPerf 612 792 0 white ()
 %KDKRequirements: duplex
 %KDKSlip: YellowPerf duplex 1
 %%+ TriPerf duplex 5
 %%EndComments
 %%BeginProlog

然后使用 Windows 命令将其发送到柯达 Digimaster 打印机:

> COPY PostScript.ps PrinterName

这对于较小的文档效果很好,但我在处理较大的页面集时遇到了问题。

当我尝试使用 500 页 PDF 到 Postscript 文件打印到 Digimaster 时,出现错误:"Busy, do not reset the RIP"。

无效的文件大小:

PostScript 文件大小:52 MB
PDF 文件大小:41 MB

有效的文件大小:

PostScript 文件大小 1MB
PDF 文件大小:.8 MB

为什么这对较小的文件可以正常工作,但对较大的文件却很困难?

有人有什么建议吗?

不一定是 PostScript 的 filesize 导致了您的问题:

  • 可能是 PostScript 本身,或者
  • 可能是您在编辑 PS 文件时插入(专有)%KDK 注释时出错。

您确定您的文本编辑器不会默默地更改您的换行字符吗?!这也可以改变 PostScript 的二进制部分!

此外,我不确定 copy 命令是否能按应有的方式处理打印作业。我更喜欢 lpr 命令(啊......你的 Windows 版本是否仍然可用?!)

要对此进行调试并探索成功打印的几种不同途径,我会尝试几个不同的步骤:

调试

  • 将未添加 %%KDK DSC header 注释的原始 PostScript 发送到打印机。

    该打印机型号有一个您可以利用的好功能:您可以检查它的 RIP 是否完全成功地处理了输入文件,而无需将 500 页输出到(错误的)纸张上并因此浪费它(您也之后需要丢弃它——工作太多了)。只需单击其用户界面监视器上的红色 "Stop" 按钮。

    那个人是否成功完成了 RIP 过程?

    是吗?现在您甚至可以打印它。在执行此操作之前,您甚至可以通过单击界面上的某个按钮(虽然记不起确切的按钮标签)将作业设置修改为 select 特定纸盘。然后 "release" 作业将打印出来。

    如果有效,您可以再次将注意力转移到正确的 %%KDK 行上。

    如果没有,您必须尝试另一条路线。

检查另一个 PDF-to-PS 转换器是否正常工作

  • pdftops 的帮助下创建一个 PostScript 文件(请参阅 此处 pdftops.exe 版本——阅读自述文件以查看哪些选项可用)。

    类比上述:先看是否完成RIP过程。然后继续你的%KDK操作....

检查直接 PDF 打印是否工作

  • Digimaster模型可以直接读取PDF。 (好吧,它在内部使用自己的 PDF-to-PS 转换器,但外部看不到它——所以它 真的 算不上 PDF RIP... )

  • 如果可行,您甚至可以将适当的 %KDK 评论添加到 PDF 文件中,类似于以下几行(不要指望我得到正确的细节,它来自我的头顶,记忆已有几十年了!):

    %!PS-Adobe-3.0
    %%.........................
    %%DocumentMedia: ..........
    %KDKRequirements: .........
    %KDKInserts: ..............
    %KDKSlip: .................
    %KDKBody: .................
    %KDKCovers: ...............
    %KDKPDFPrintAnnotations: on 
    %KDKPDFFitToPage: on
    %KDKBinaryOK: on 
    <esc>%-12345X
    %%Emulation: pdf
    %PDF-1.5
    %...here follow the lines of the original PDF file...
    ...
    

通过 "Kodak Printfile Downloader" (KPD)

发送工作
  • 对于 Windows 曾经有 so-called 'Kodak Print File Downloader' (KPD)。 KPD 是一个应用程序,而不是打印机 driver。不确定它是否仍然可用。

  • 您可以打开它的 GUI,然后将 PS、PDF、PCL 或 TIFF 文件加载到它的 to-be-printed-list 作业中。然后 select 一些工作选项(如托盘、装订、分类等)。最后,将作业发送给Digimaster...

  • KPD 本质上做同样的事情,正如您想要实现的:将 %KDK 命令插入文件 header。但是您想使用脚本或编辑器来完成它(并且可能通过批处理自动完成,一旦它工作)。

  • KPD 需要交互式用户 activity 且无法编写脚本。

  • 但您可以(滥用)使用它来拦截它从 Windows 假脱机系统创建的文件,研究它们,然后调整您的脚本工作,使它们也能工作。 ..


更新

(我本来想在最初的回答中加上这个的。但是时间运行所以我暂时跳过了..)

直接在打印机上观察RIP处理UI

  • Digimaster 打印机有自己的 built-in 触摸屏或平板或电子管显示器(取决于型号的使用年限)。他们通常还有一个 full-time 操作员,他非常了解机器及其调整和特性。机器可能离发送作业的用户很远

  • 所以在调试打印问题时应该做到以下几点:

    • 请操作员将打印机设置为"stop printing",但仍然是"receiving new jobs"。
    • 提交您想要的任何工作。
    • 走向打印机及其操作员。
    • 释放 RIP-ping 的工作并观察会发生什么:
      • 您可能会看到一切顺利并完成,直到最后一页(您知道您提交了多少页,对吧?)
      • 或者您可能会看到作业在特定页码处中止。
      • 或者您可能会看到打印机 RIP 在某一页(或几页)上咀嚼了很长时间,但最终完成了工作。
      • 或者您可能会看到rinter RIP 永远挂在某个页面上。
      • 或者...

    无论如何,此处可观察到的细节可能会提供重要的线索,让我们知道下一步该去哪里...