Ghostscript - PDF文件,有多个托盘,有很多问题



我英语说得不好,但我希望有人能在这个问题上帮助我。

我花了好几天想这个,但我自己想不出来。是这样的:

我有4000多个PDF文档,使用TrimBox页边距,每个文档有16页,颜色

我需要批量打印:

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

我用的是京瓷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京瓷使用托盘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驱动程序,altroth是快速的,并设法使用dmediposition选择正确的托盘,只有黑色和白色驱动程序…
  • 使用pdfwrite,不能正确缩放TrimBox以适应整个页面,并且不能选择正确的托盘。
  • 使用ps2write,不能选择托盘和混乱的页面位置。

我迷路了。有人能给我指路吗?还有,有没有办法把所有东西作为一个文件发送到打印机?

谢谢大家!

——编辑——

谢谢你们的回答!

I manage to make it work:

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上可以,但它是黑白的)。

我就快到了!谢谢^ ^。如果有人知道这个问题,我将不胜感激。

你一次问了很多的问题,这并不是一个得到有用答案的好方法。另外,你对一些问题还不是很清楚。

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文件输出",并寻找PSDocOptionsPSPageOptions键。可以使用PSPageOptions数组向每个页面引入单独的媒体选择命令。我不知道你所说的"弄乱了页面位置"是什么意思,但是如果你不选择-dUseTrimBox,那么它就不会使用TrimBox........

哦,如果你想"缩放TrimBox以适合整个页面"(你只提到关于pdfwrite),那么你必须设置一个固定的媒体大小,你想要页面缩放到(-dFIXEDMEDIA, -dDEVICEHEIGHTPOINTS=-dDEVICEWIDTHPOINTS=),选择-dUseTrimBox-dPDFFitPage

要做到这一点并不容易。虽然PDF本身不提供转换纸盘的功能,但您需要将此流转换为另一个PDL。PostScript是一个不错的选择。

当转换到PostScript时,您可以注入PostScript托盘切换命令,如在PPD中找到的:

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

在Windows平台上,您可以选择实现:

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

第一个选项可能不适用于您的打印机潜水员。然后,您可以尝试在作业开始时注入PostScript代码。代码应该覆盖showpage,用第一个选项中描述的功能扩展它。

相同的代码重载showpage,你可以注入到PostScript解释器启动序列,如果你有访问控制器的内部。

最新更新