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

3

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

我使用的是Windows 7,Ghostscript x64 v 9.16和柯达Digimaster商业打印机。

我使用以下参数将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"

我会添加专有的%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命令将其发送到柯达Digimaster打印机:
> COPY PostScript.ps PrinterName

这个方法在处理小文件时效果很好,但是在处理大批量页面时会出现问题。

当我试图使用一个500页的PDF文件打印到Digimaster时,出现了错误:“忙碌,请勿重置RIP”。

未能正常工作的文件大小:

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

正常工作的文件大小:

PostScript 文件大小:1 MB
PDF 文件大小:0.8 MB

为什么小文件可以正常工作,而大文件却会出现问题?

有没有人有什么建议?


将PostScript文件通过Ghostscript再次运行,看看会发生什么。如果它能正常工作,那么这个PostScript几乎肯定是有效的。然而,我们已经看到了很多不喜欢ps2write输出的PostScript打印机(在每种情况下都有这些实现中的故障)。您可以尝试使用-dFirstPage和-dLastPage创建页面子集,并查看是否存在特定页面或仅仅是数量的问题。如果是特定页面,我们可能可以采取一些措施。例如,有一个NoT3CCITT开关可以修复特定的打印机错误。 - KenS
嗨,肯恩,我验证了我可以将文件发送回PDF。我已经审查过它,看起来与原始文件完全相同。所有页面都非常相似,所以如果打印机在某个页面上出现问题,我会感到震惊,因为我基本上只是在每个PDF中更改了一些字段。您对使用COPY命令将Postscript发送到打印机有何意见?我怀疑当将如此大的Postscript文件发送到打印机时,FTP命令可能会出现问题。 - ribald
复制应该可以正常工作,但您应该使用/b开关以二进制方式进行复制。由于PostScript是有效的,可能只是因为资源耗尽了,ps2write输出可能定义了许多字体(这取决于输入),这可能会耗尽打印机上的VM。您可以尝试设置-dSubsetFonts=false。当然,您也可以询问Kodak :-) - KenS
1个回答

3
这并不一定是PostScript的文件大小引起您的问题:

  • 可能是PostScript本身,或者
  • 可能是在插入(专有)% KDK 评论时对PS文件进行编辑时出错。

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

另外,我不确定copy命令是否像应该处理打印作业。我更喜欢lpr命令(啊...您的Windows版本上是否还有它可用?!)

为了调试和探索成功打印的几种不同方法,我建议尝试几个不同的步骤:

调试

  • 将原始PostScript发送到打印机,而不添加%%KDK DSC标题注释。

    该打印机型号具有您可以利用的不错功能:您可以检查其RIP是否完全成功地处理了输入文件,而无需在(错误的)纸上输出您的500页并浪费它(您之后还需要丢弃它 - 太多工作了)。只需单击其用户界面监视器上的红色“停止”按钮即可。

    它成功完成了RIP过程吗?

    是的?现在您甚至可以打印它。在这样做之前,您甚至可以修改作业设置以选择特定的纸盒,方法是单击界面上的某个按钮(不能记住确切的按钮标签)。然后“释放”工作,它将打印。

    如果有效,则可以再次关注如何正确使用%%KDK 行。

    如果不起作用,则必须尝试另一种路线。

检查是否有不同的PDF到PS转换器正在工作

  • 借助 pdftops 的帮助创建PostScript文件(请参见此处的 pdftops.exe 版本 - 请阅读自述文件以查看可用选项)。

    按照上述方案进行:首先查看是否完全成功地处理了RIP过程。然后继续进行% KDK 操作....

检查直接PDF打印是否有效

  • The Digimaster model can consume PDF directly. (Well, internally it uses its own PDF-to-PS converter, but that isn't visible to the outside -- so it doesn't really count as a PDF RIP...)

  • If that works, you can even prepend your appropriate %KDK comments to the PDF file, similar to the lines below (don't rely on me getting the details right, it's from the top of my head, and memory is decades old!):

    %!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 系统,曾经有一个名为“Kodak Print File Downloader”(KPD)的应用程序,它不是打印机驱动程序。不确定它是否仍然可用。

  • 您可以打开其图形用户界面,然后将 PS、PDF、PCL 或 TIFF 文件加载到其待打印作业列表中。接着选择一些作业选项(例如托盘、装订、分类等)。最后,将作业发送至 Digimaster...

  • KPD 基本上做的与您想要实现的相同:将 %KDK 命令插入文件头部。但您想使用脚本或编辑器完成它(并可能通过批处理自动完成,一旦它工作正常)。

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

  • 但您可以滥用它来拦截它从 Windows 打印池系统创建的文件,研究它们,然后调整您的脚本以使它们也起作用...


更新

(我本来想在我的初始答案中添加这个。但时间不够了,因此暂时跳过...)

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

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

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

    • 请向操作员请求将打印机设置为“停止打印”状态,但仍然“接收新作业”。
    • 提交您想要的任何作业。
    • 走到打印机和操作员面前。
    • 释放作业以进行 RIP 处理并观察发生了什么:
      • 您可能会看到一切都进行得很好,并在最后一页完成(您知道提交了多少页,对吧?)
      • 或者您可能会看到作业在某个页码上中止。
      • 或者您可能会看到打印机 RIP 在某个页面上(或几个页面上)漫长地咀嚼,但最终完成作业。
      • 或者您可能会看到打印机 RIP 在某个页面上永久挂起。
      • 还是...

    在任何情况下,此处可观察到的细节可能提供重要线索,指导您下一步该从哪里着手解决问题...


谢谢 Kurt!下次我再尝试打印机的时候会给你更新。我怀疑 COPY 可以用于较小的 PostScript 文件,但在打印大文件时存在问题。使用 COPY 是为了 FTP 而不是打印。我接下来会尝试使用 lpr。我还会尝试一个 PostScript 打印工具,看看是否有所不同,同时继续按照你的列表进行工作。再次感谢! - ribald
我们使用了LPR和PrintFile实用程序(而不是KPD)。在打印任何内容之前,两者都需要10分钟的时间。它们都会打印10页,然后暂停以RIP下一个... - ribald
@ribald:KPD对Digimaster客户免费。优点是您可以使用它创建作业设置,即使是PDF spool作业!如果您成功拦截了提交的带有前缀“%KDK”作业设置的KPD作业,则很容易反向工程化您的脚本应该执行的操作...(也许“打印文件实用程序”是以前KPD的新名称?) - Kurt Pfeifle
一旦“状态监视器”屏幕消失,常规打印机显示屏上的页面计数会缓慢增加。可能需要几分钟,但最终会达到大约10页并打印这几页。然后它会暂停几分钟,最终打印另外约10页。这是一遍又一遍重复的相同模式。 - ribald
你在“检查直接PDF打印是否正常工作”的要点上是正确的。它正在工作,并且正在打印所有500页。我测试了一下,只声明了几个不同纸张来源的打印项。明天我会进行更大规模的测试,但我感觉非常有信心,你给了我答案。谢谢!当我100%完成时,我会更新你,并将你的答案标记为解决方案。 - ribald
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接