使用Ghostscript将PDF转换为PostScript:打印时出现问题的大文件



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

我使用的是Windows 7、Ghostscript x64 v 9.16和Kodak Digimaster商用打印机。

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

C:Program Filesgsgs9.16bingswin64c.exe" 
-dCompressFonts=true 
-dSubsetFonts=true 
-dEmbedAllFonts=true 
-sFONTPATH=C:WindowsFonts 
-dNOPAUSE 
-dBATCH 
-sDEVICE=ps2write 
-sOutputFile="PostScript.ps" 
"MyPdf.pdf"

然后,我添加%KDK(专有)命令,通过使用基于打印机文档的%KDKSlip命令来指定需要在哪张纸上打印哪些页面。

下面的示例将以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命令将其发送到Kodak Digimaster打印机:

> COPY PostScript.ps PrinterName

这对较小的文档很有效,但我对较大的页面集有问题。

当我试图使用500页的PDF到Postscript文件打印到Digimaster时,出现了错误:"忙,不要重置RIP"。

不起作用的文件大小:

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

那些有效的文件大小:

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

为什么这种方法适用于较小的文件,但适用于较大的文件?

有人有什么建议吗?

问题不一定是PostScript的文件大小

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

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

此外,我不确定copy命令是否能像它应该处理的那样处理打印作业。我更喜欢lpr命令(啊…这在你的Windows版本上仍然可用吗?!)

为了调试它并探索成功打印的几种不同途径,我会尝试几个不同的步骤:

调试

  • 将未添加%%KDKDSC标头注释的原始PostScript发送到打印机。

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

    那一个成功完成RIP过程了吗?

    是吗?现在你甚至可以打印了。在打印之前,你甚至可以通过点击界面上的某个按钮来修改作业设置以选择特定的纸盘(但记不起确切的按钮标签)。然后"释放"作业,它就会打印出来。

    如果成功了,您可以再次将注意力转向正确的%%KDK行。

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

检查其他PDF到PS转换器是否工作

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

    进行模拟上述操作:首先查看是否完成RIP过程。然后继续进行%KDK操作。。。。

检查直接PDF打印是否正常

  • Digimaster模型可以直接使用PDF。(好吧,在内部,它使用自己的PDF到PS转换器,但这对外部来说是不可见的——所以它不算是PDF RIP…)

  • 如果有效的话,你甚至可以在PDF文件中预先准备你合适的%KDK评论,类似于下面的行(不要依赖我把细节弄对,这是我的想法,记忆已经有几十年了!):

    %!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打印文件下载器"发送作业(KPD)

  • Windows曾经有所谓的"Kodak打印文件下载器"(KPD)。KPD是一个应用程序,而不是打印机驱动程序。不确定它是否仍然可用。

  • 您可以打开它的GUI,然后将PS、PDF、PCL或TIFF文件加载到要打印的作业列表中。然后选择一些作业选项(如托盘、装订、分拣等)。最后,将作业发送给Digimaster。。。

  • KPD本质上做了与您想要实现的相同的事情:将%KDK命令插入到文件头中。但是,您希望使用脚本或编辑器(并且可能在工作后通过批处理过程自动完成)。

  • KPD需要交互式用户活动,不能编写脚本。

  • 但你可以(ab-)使用它来拦截它从Windows后台处理系统创建的文件,研究它们,然后调整你的脚本工作,使它们也能工作。。。。


更新

(我本来想在最初的答案中添加这个。但时间不多了,所以我暂时跳过了。)

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

  • Digimaster打印机有自己的内置触摸屏或平板或管式显示器(取决于型号的使用年限)。他们通常还有一名全职操作员,他非常了解机器及其调整和特性。机器可能与发送作业的用户相距甚远。

  • 因此,在调试打印问题时应执行以下操作:

    • 要求操作员将打印机设置为"停止打印",但仍"接收新作业">
    • 提交您想要的任何作业
    • 走向打印机及其操作员
    • 释放RIP ping作业并观察发生了什么:
      • 你可能会看到一切都很顺利,直到最后一页(你知道你提交了多少页,对吧?)
      • 或者,您可能会看到作业在某个页码处中止
      • 或者你可能会看到打印机RIP在某一页(或几页)上咀嚼了很长时间,但最终完成了任务
      • 或者你可能会看到打印机RIP永远挂在某一页上
      • 或者

    无论如何,这里可以观察到的细节可能会为下一步的发展提供重要线索。。。

最新更新