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

时间:2016-06-28 20:42:57

标签: pdf printing ghostscript postscript

我说英语不好,但我希望有人可以帮我这个......

我花了好几天时间,但我不知道自己。这是交易:

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

我需要批量打印它们:

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

我正在使用Kyocera 7550ci,the PPD is here.

我已经安装了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驱动程序,altrought很快并且设法使用dMediaPosition选择正确的托盘,只有黑白驱动程序......
  • 使用pdfwrite,请勿正确缩放TrimBox以适合整个页面,并且无法选择正确的纸盘。
  • 使用ps2write,无法选择托盘并弄乱页面位置。

我迷路了。有人可以给我一些指示吗?还有一些方法可以将everythign作为一个文件发送到打印机吗?

谢谢大家!

--- --- EDIT

谢谢你们的答案!

我设法让它发挥作用:

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 个答案:

答案 0 :(得分:3)

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

1)如果你想使用TrimBox作为媒体大小,你必须告诉Ghostscript你想要使用TrimBox,你可以通过-dUseTrimBox来做,无论你想使用什么设备。

2)mswinpr2设备的工作原理是为打印机创建Windows DeviceContext,将输入呈现为(RGB)位图,然后将位图blit到DeviceContext并告诉它自己打印。这很慢,因为它涉及将大位图(大小取决于打印机分辨率)渲染到内存,然后将该大位图发送到设备。

它的一大优势是无论您使用什么打印机都可以使用它。

GSPrint使用“类似”但有些不同的技术,声称速度更快。

请注意,这两款设备均使用打印机的默认设置,可能无法满足您的复杂需求。

在这种情况下,色彩管理当然取决于Windows,但如果您的原始PDF在CMYK中指定,那么这将涉及转换CMYK-> RGB-&gt; CMYK,这必然会导致色差。< / p>

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),那么你必须设置一个你希望页面缩放到的大小的固定媒体({{ 1}},-dFIXEDMEDIA-dDEVICEHEIGHTPOINTS=),选择-dDEVICEWIDTHPOINTS=-dUseTrimBox

答案 1 :(得分:0)

没有简单的方法可以做到这一点。虽然PDF本身不提供切换纸盘的工具,但您需要将此流转换为另一个PDL。 PostScript是一个不错的选择。

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

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

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

  1. 更改PPD以使其在每页之前注入PostScript代码。代码应该维护页面计数器并相应地执行托盘切换命令。
  2. 购买提供此功能的第三方软件。
  3. 使用注入PostScript代码的DLL扩展打印机驱动程序。
  4. 第一个可能无法与您的打印机潜水员一起使用。然后,您可以尝试在作业开始时注入PostScript代码。代码应覆盖showpage,使用第一个选项中描述的功能扩展它。

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