Ghostscript - 处理多托盘PDF文件时遇到的问题

3

我不太擅长英语,但我希望有人能帮助我解决这个问题...

我花了几天时间,但是自己无法解决。情况如下:

我有4000多个PDF文档,每个文档都有16页,带有TrimBox边距,颜色。

我需要批量打印它们:

  • 使用托盘3上的纸张打印第1-10页;
  • 使用托盘4上的纸张打印第11-15页,两份未装订;
  • 使用托盘3上的纸张打印第16页。

我正在使用Kyocera 7550ci,这里是PPD。

我已安装GhostScript 9.19,并使用gsview和gsprint。Windows 7 SP1。

当我第一次尝试做任何事情时,我不知道ghostscript或如何使用它,但通过阅读一些资料,我设法“有点”解决了问题。我在Windows控制面板上复制了打印机,并为每个打印机设置了所需的配置,然后在GSPRINT上执行了以下命令:

gsprint -printer "Kyocera TASKalfa 7550ci KX" -color -dUseTrimBox -dFitPage -from 1 -to 10 s_file0001.pdf
gsprint -printer "ALT Kyocera" -color -dUseTrimBox -dFitPage -from 11 -to 15  -copies 2 s_file0001.pdf
gsprint -printer "Kyocera TASKalfa 7550ci KX" -color -dUseTrimBox -dFitPage -from 16 -to 16 s_file0001.pdf

我将TASKalfa 7550ci的默认驱动程序设置为使用托盘3,并将ALT Kyocera设置为使用托盘4并取消排序。

虽然这种方式可以运行,但是Windows处理和打印机处理速度都非常缓慢。我很快意识到GSPRINT之所以慢是因为它必须将整个图像渲染为位图,并开始尝试是否可以使用纯GhostScript来完成工作。

gswin32c -dBATCH -dNOPAUSE -q -dUseTrimBox -dFitPage -dFirstPage=1 -dLastPage=10 -sDEVICE=mswinpr2 -sOutputFile="%printer%Kyocera TASKalfa 7550ci KX" -f test.pdf
gswin32c -dBATCH -dNOPAUSE -q -dUseTrimBox -dFitPage -dFirstPage=11 -dLastPage=15 -sDEVICE=mswinpr2 -sOutputFile="%printer%ALT Kyocera" -f test.pdf
gswin32c -dBATCH -dNOPAUSE -q -dUseTrimBox -dFitPage -dFirstPage=16 -dLastPage=16 -sDEVICE=mswinpr2 -sOutputFile="%printer%Kyocera TASKalfa 7550ci KX" -f test.pdf

但我仍然遇到很多问题...我感到沮丧,即使我努力阅读手册和搜索资料,也无法让它正常工作。
  • 使用mswinpr2仍然非常缓慢,颜色不正确,并且无法找到如何选择纸盒。
  • 使用任何包含的PCL驱动程序,虽然速度很快并且可以使用dMediaPosition选择正确的托盘,但只有黑白驱动程序...
  • 使用pdfwrite不能正确地缩放TrimBox以适合整个页面,并且无法选择正确的托盘。
  • 使用ps2write,无法选择托盘并混乱了页面位置。
我迷失了方向。有人可以给我一些指导吗?此外,有没有办法将所有内容作为一个文件发送到打印机?
谢谢大家!
---编辑---
感谢您们两位的回答!
我设法让它工作:
gswin32c -dBATCH -dNOPAUSE -q -dPDFFitPage -dUseTrimBox -dFirstPage=1  -dLastPage=10 \
         -dMediaPosition=7 -sDEVICE=pxlcolor \
         -sOutputFile="%printer%Kyocera TASKalfa 7550ci KX" -f in.pdf

gswin32c -dBATCH -dNOPAUSE -q -dPDFFitPage -dUseTrimBox -dFirstPage=11 -dLastPage=15 \
         -dMediaPosition=5  -sDEVICE=pxlcolor -dNumCopies=2 \
         -sOutputFile="%printer%Kyocera TASKalfa 7550ci KX" -f in.pdf

gswin32c -dBATCH -dNOPAUSE -q -dPDFFitPage -dUseTrimBox -dFirstPage=16 -dLastPage=16 \
         -dMediaPosition=7 -sDEVICE=pxlcolor \
         -sOutputFile="%printer%Kyocera TASKalfa 7550ci KX" -f in.pdf

唯一的问题是在 pxlcolor 上页面无法正确缩放(在 ljet4 上可以,但它是黑白的)。
我快要搞定了!谢谢 ^^. 如果有人知道这个问题,请告诉我。
2个回答

3
你一次询问了很多问题,这并不是得到有用答案的好方法。此外,你并没有对一些问题非常清晰明确。
1)如果你想使用TrimBox作为媒体尺寸,则必须告诉Ghostscript你要使用TrimBox,在任何设备上都是如此,方法是使用“-dUseTrimBox”参数。
2)mswinpr2设备通过为打印机创建Windows DeviceContext、将输入呈现为(RGB)位图、然后将该位图复制到DeviceContext并告诉它打印自身来工作。由于这将涉及将一个大位图(大小取决于打印机分辨率)呈现到内存中,然后将该大位图发送到设备中,因此速度较慢。但它的一个巨大优点是无论你使用什么样的打印机都可以工作。
GSPrint使用了类似但略有不同的技术,据称速度更快。
请注意,这两个设备都使用打印机的默认设置,这可能不适用于你的复杂需求。
当然,在这种情况下,颜色管理取决于Windows,但如果你的原始PDF文件指定为CMYK,则这将涉及转换CMYK-> RGB-> CMYK,这肯定会导致颜色差异。
3)Ghostscript中有可用的彩色PCL设备,例如cdeskjet设备。
4)如果你选择了“-dUseTrimBox”,pdfwrite将使用TrimBox。由于它创建的是PDF文件,很难看出如何“选择正确的托盘”。如果你将PDF文件发送到打印机,则可以直接使用原始的PDF文件。PDF文件不能包含依赖于设备的标准,例如托盘选择。
5)在当前版本的ps2write中,你可以添加设备特定操作,请参阅ghostpdl/doc/VectorDevices.htm(也可在ghostscript.com网站上找到),第6.5节“PostScript文件输出”,查找“PSDocOptions”和“PSPageOptions”键。你可以使用“PSPageOptions”数组向每个页面引入单独的媒体选择命令。我不知道你所说的“弄乱页面位置”的意思,然而再次提醒:如果你没有选择“-dUseTrimBox”,则不会使用TrimBox。
哦,如果你想要“缩放TrimBox以适合整个页面”(这只涉及到pdfwrite),那么你必须设置固定大小的介质尺寸,大小与你所需的页面比例相同(即“-dFIXEDMEDIA”,“-dDEVICEHEIGHTPOINTS =”和“-dDEVICEWIDTHPOINTS =”),选择“-dUseTrimBox”和“-dPDFFitPage”。

PDFFitPage不会有任何有用的作用,除非您设置了固定的页面大小。其工作原理是,PDF解释器为每个页面请求特定的媒体大小,如果没有精确的媒体可用,则有定义要做什么的策略,我现在不想深入讨论。但是,您可以使用-dFIXEDWIDTHPOINTS和-dFIXEDHEIGHTPOINTS指定特定的媒体大小,然后使用-dFIXEDMEDIA使其不可更改。如果您这样做,那么-dPDFFitPage将缩放内容以适应所述的媒体大小。否则它将不起作用。 - KenS
gswin32c -dBATCH -dNOPAUSE -q -dFIXEDWIDTHPOINTS=595 -dFIXEDHEIGHTPOINTS=842 -dFIXEDMEDIA -dUseTrimBox -dPDFFitPage -dFirstPage=1 -dLastPage=1 -dMediaPosition=7 -sDEVICE=pxlcolor -sOutputFile="%printer%Kyocera TASKalfa 7550ci KX" -f in.pdf仍然不起作用... - Johnny Blue
没有文件我无法进一步发表评论。可能是因为PDF文件使用的是A4媒体,所以没有任何区别。 - KenS
是的,它有A4媒体...我不知道如何设置-dFIXEDWIDTHPOINTS和-dFIXEDHEIGHTPOINTS,我将继续尝试搜索相关信息。 - Johnny Blue
它们是所需媒体的宽度和高度,以PostScript点为单位(72点=1英寸)。因此,如果PDF文件是A4大小,并且您要求A4大小,则其按比例缩放1:1并不奇怪。所以我完全不知道您想要实现什么。 - KenS

0

这并不是一件容易的事情。虽然PDF本身没有提供切换纸盘的功能,但您需要将此流转换为另一种PDL。PostScript是一个不错的选择。

在转换为PostScript时,您可以注入类似于PPD中找到的PostScript纸盘切换命令:

<< /ManualFeed false >> setpagedevice statusdict begin 5 setpapertray end

在Windows平台上,您有多种实现选择:

  1. 更改PPD以使其在每个页面之前注入PostScript代码。 该代码应维护一个页面计数器并相应地执行托盘切换命令。
  2. 购买提供此功能的第三方软件。
  3. 使用DLL扩展打印机驱动程序,注入PostScript代码。

第一种方法可能无法与您的打印机驱动程序配合使用。 然后,您可以尝试在作业开始时注入PostScript代码。 该代码应覆盖showpage并扩展其具有第一种选项中描述的功能。

如果您可以访问控制器的内部,则可以在PostScript解释器启动序列中注入相同的代码以重载showpage


你知道有哪些付费程序可以做到这个吗? - Johnny Blue
很遗憾,我的业务是按需实施这三种解决方案之一。 - Aleksei Guzev

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