使用 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 永远挂在某个页面上。
- 或者...
无论如何,此处可观察到的细节可能会提供重要的线索,让我们知道下一步该去哪里...
我目前正在使用 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 永远挂在某个页面上。
- 或者...
无论如何,此处可观察到的细节可能会提供重要的线索,让我们知道下一步该去哪里...