【问题标题】:Send postscript file pages to different trays将 postscript 文件页面发送到不同的托盘
【发布时间】:2020-06-18 07:26:14
【问题描述】:

我正在尝试打印一个 postscript 文件,其中第一页必须使用一个纸盘,而第二页必须使用第二个纸盘。

我已经使用 setDevice 尝试过,但它不起作用。打印机将所有页面发送到一个纸盘或另一个纸盘,但不会在页面之间切换。

我尝试了以下命令

    <</ManualFeed false /MediaPosition 0>> setpagedevice

我尝试将它放在 %%BeginPageSetup 之前和 %%BeginPageSetup 之内,但没有任何区别。我使用 ghostscript 命令将其发送到打印机。

<</ManualFeed false /MediaPosition 0>> setpagedevice
%%Page: 1 1
%%BeginPageSetup
GS_pswrite_2_0_1001 begin
595 842 /a4 setpagesize
/pagesave save store 197 dict begin
0.1 0.1 scale
%%EndPageSetup
gsave mark
...
cleartomark end end pagesave restore
 showpage
%%PageTrailer
<</ManualFeed false /MediaPosition 1>> setpagedevice
%%Page: 2 2
%%BeginPageSetup
GS_pswrite_2_0_1001 begin
595 842 /a4 setpagesize
/pagesave save store 197 dict begin
0.1 0.1 scale
%%EndPageSetup
gsave mark
...
cleartomark end end pagesave restore
 showpage
%%PageTrailer

这是序言

%%BeginProlog
% This copyright applies to everything between here and the %%EndProlog:
% Copyright (C) 2008 Artifex Software, Inc.  All rights reserved.
%%BeginResource: procset GS_pswrite_2_0_1001 1.001 0
/GS_pswrite_2_0_1001 80 dict dup begin
/PageSize 2 array def/setpagesize{ PageSize aload pop 3 index eq exch
4 index eq and{ pop pop pop}{ PageSize dup  1
5 -1 roll put 0 4 -1 roll put dup null eq {false} {dup where} ifelse{ exch get exec}
{ pop/setpagedevice where
{ pop 1 dict dup /PageSize PageSize put setpagedevice}
{ /setpage where{ pop PageSize aload pop pageparams 3 {exch pop} repeat
setpage}if}ifelse}ifelse}ifelse} bind def
/!{bind def}bind def/#{load def}!/N/counttomark #
/rG{3{3 -1 roll 255 div}repeat setrgbcolor}!/G{255 div setgray}!/K{0 G}!
/r6{dup 3 -1 roll rG}!/r5{dup 3 1 roll rG}!/r3{dup rG}!
/w/setlinewidth #/J/setlinecap #
/j/setlinejoin #/M/setmiterlimit #/d/setdash #/i/setflat #
/m/moveto #/l/lineto #/c/rcurveto #
/p{N 2 idiv{N -2 roll rlineto}repeat}!
/P{N 0 gt{N -2 roll moveto p}if}!
/h{p closepath}!/H{P closepath}!
/lx{0 rlineto}!/ly{0 exch rlineto}!/v{0 0 6 2 roll c}!/y{2 copy c}!
/re{4 -2 roll m exch dup lx exch ly neg lx h}!
/^{3 index neg 3 index neg}!
/f{P fill}!/f*{P eofill}!/s{H stroke}!/S{P stroke}!
/q/gsave #/Q/grestore #/rf{re fill}!
/Y{P clip newpath}!/Y*{P eoclip newpath}!/rY{re Y}!
/|={pop exch 4 1 roll 1 array astore cvx 3 array astore cvx exch 1 index def exec}!
/|{exch string readstring |=}!
/+{dup type/nametype eq{2 index 7 add -3 bitshift 2 index mul}if}!
/@/currentfile #/${+ @ |}!
/B{{2 copy string{readstring pop}aload pop 4 array astore cvx
3 1 roll}repeat pop pop true}!
/Ix{[1 0 0 1 11 -2 roll exch neg exch neg]exch}!
/,{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
/Ic{exch Ix false 3 colorimage}!
/F{/Columns counttomark 3 add -2 roll/Rows exch/K -1/BlackIs1 true>>
/CCITTFaxDecode filter}!/FX{<</EndOfBlock false F}!
/X{/ASCII85Decode filter}!/@X{@ X}!/&2{2 index 2 index}!
/@F{@ &2<<F}!/@C{@X &2 FX}!
/$X{+ @X |}!/&4{4 index 4 index}!/$F{+ @ &4<<F |}!/$C{+ @X &4 FX |}!
/IC{3 1 roll 10 dict begin 1{/ImageType/Interpolate/Decode/DataSource
/ImageMatrix/BitsPerComponent/Height/Width}{exch def}forall
currentdict end image}!
/~{@ read {pop} if}!
end def
%%EndResource
/pagesave null def
%%EndProlog

感谢您的帮助,

拍拍

【问题讨论】:

标签: ghostscript postscript tray


【解决方案1】:

这不是一个真正的 Ghostscript 问题。

托盘位置的选择取决于设备,您需要了解您的特定 PostScript 打印机需要什么。如果 PostScript 的那个片段是正确的,那么我只能建议您尝试将 setpagedevice 放在 setpagesize 之后。我不记得该例程的确切作用,而且您还没有包含整个序言,但它肯定会涉及对 setpagedevice 的调用。

当然,测试这一点的明显方法是将带有托盘选择命令的简单“无操作”PostScript 测试程序发送到打印机:

%!
<</ManualFeed false /MediaPosition 0>> setpagedevice
showpage
<</ManualFeed false /MediaPosition 1>> setpagedevice
showpage

这应该会从每个托盘中弹出一个空白页。如果这不起作用,那么您的打印机需要一些其他的魔法。

我注意到 PostScript 显然是 Ghostscript 的 ps2write 设备的输出。您可以使用 PSPageOptions 开关让该设备为您注入 PostScript。当然,PostScript 仍然必须对设备正确。

【讨论】:

  • 对不起,你是对的,在问题中添加了序言。因为它看起来很神秘,所以我把它省略了。
  • 天哪,你运行的是什么版本的 Ghostscript?这看起来是旧的、过时的、已弃用(现在已删除)的 pswrite 设备,而不是 ps2write 设备。如果您正在使用 pswrite,我强烈建议您停止,更新到相当新的版本,然后改用 ps2write。
  • 好吧,愚蠢的问题,这个 PostScript 文件是您自己制作的吗?如果是这样,您使用什么命令行来创建它?您在我的回答中尝试过简单的 PostScript 吗?你从中得到了什么结果?
猜你喜欢
  • 1970-01-01
  • 2015-08-23
  • 2014-09-01
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
相关资源
最近更新 更多