Отправлять страницы файлов postscript в разные лотки - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь напечатать файл 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

Спасибо за вашу помощь,

Pat

1 Ответ

0 голосов
/ 18 июня 2020

Это не совсем вопрос Ghostscript.

Выбор положения лотка зависит от устройства, вам нужно выяснить, что нужно вашему конкретному принтеру PostScript. Если этот фрагмент PostScript верен, то все, что я могу предложить, это попытаться поставить setpagedevice после setpagesize. Я не могу вспомнить, что именно делает эта процедура, и вы не включили весь пролог, но он определенно будет включать вызов setpagedevice.

Очевидный способ проверить это, конечно, - это отправьте на принтер простую тестовую программу PostScript «ничего не делать» с командами выбора лотка:

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

Это должно вытолкнуть пустую страницу из каждого лотка. Если это не сработает, тогда вам понадобится какой-нибудь другой magi c для вашего принтера.

Замечу, что PostScript, очевидно, является выводом устройства ps2write от Ghostscript. Вы можете заставить это устройство вводить PostScript за вас с помощью переключателя PSPageOptions. Конечно, PostScript все еще должен соответствовать устройству.

...