ch_alex сказал(а):Нельзя.
Что нужно получить? Сделать этакий листоподбор?
/pageNum 0 def
/myTrays [1 2 3] def
/_setpagedevice {setpagedevice} bind def
/setpagedevice {
currentpagedevice /InputAttributes get myTrays pageNum get ………
/pageNum pageNum 1 add def
pageNum 3 eq (/pageNum 0 def) if
_setpagedevice} bind def
Arkady сказал(а):В общем-то можно. Если принтер PostScript, то подача бумаги описывается обычно или спец. комментариями, либо определением соотвествующих InputAttributes в операторе setpagedevice (см. PPD принтера). В последнем случае достаточно в начале PostScript-файла переопределить setpagedevice, включив в него к.-л. счетчик (setpagedevice вызывается в начале каждой страницы) и некую процедуру, определяющую InputAttributes в зависимости от значения этого счетчика. Сам Postscript должен писаться с общего pdf-файла, составленного из трех исходных pdf-файлов т. обр., чтобы сначала в нем шли три первые страницы, взятые из трех исходных файлов, затем три вторые и т.д.
В общем, в начало postscript-файла нужно добавить что-то типа этого:
Код:/pageNum 0 def /myTrays [1 2 3] def /_setpagedevice {setpagedevice} bind def /setpagedevice { currentpagedevice /InputAttributes get myTrays pageNum get ……… /pageNum pageNum 1 add def pageNum 3 eq (/pageNum 0 def) if _setpagedevice} bind def
Не совсем верно. «Курс молодого бойца» можно прочесть здесь.Arkady сказал(а):На русском, боюсь, что нигде…
Arkady сказал(а):Не совсем верно. «Курс молодого бойца» можно прочесть здесь.
Arkady сказал(а):
Arkady сказал(а):C изучения PPD принтера в той его части, где выбираются лотки подачи (Trays).
Arkady сказал(а):А лотки (в данном случае) выбираются с помощью задания MediaColor в настройках принтера?
Эта строка связывает размер листа с лотком, с которого этот формат может быть подан, т.е. является своего рода «защитой от дурака».abc сказал(а):Так пишется в PPD...
Код:UIConstraints: *InputSlot 1stTray *PageSize XRPostcard
*InputSlot 1stTray/Tray 1: "
3 dict begin
/MediaPosition 0 def
currentpagedevice /InputAttributes get dup 0 known
{0 get dup null eq
{ pop }
{ /MediaClass get /MediaClass exch def } ifelse
}
{ pop } ifelse
/DeferredMediaSelection true def
/ManualFeed false def
currentdict end setpagedevice
"
*End
Правда, возникают сомнения в его правильности — наблюдаются как минимум две с половиной ошибки:Это правильный файл, старый я поставил по ошибке.
/_setPageDevice {setpagedevice} bind def
/traysOrder [0 1 2] def
/pageCounter 0 def
/setpagedevice {
<<
/MediaPosition traysOrder pageCounter get
/DeferredMediaSelection true
/ManualFeed false >> _setPageDevice
/pageCounter pageCounter 1 add
dup traysOrder length eq {pop 0} if
def
_setPageDevice} bind def
Arkady сказал(а):Эта строка связывает размер листа с лотком, с которого этот формат может быть подан, т.е. является своего рода «защитой от дурака».
Сам выбор лотка (в данном примере первого) производится здесь:
Код:*InputSlot 1stTray/Tray 1: " 3 dict begin /MediaPosition 0 def currentpagedevice /InputAttributes get dup 0 known {0 get dup null eq { pop } { /MediaClass get /MediaClass exch def } ifelse } { pop } ifelse /DeferredMediaSelection true def /ManualFeed false def currentdict end setpagedevice " *End
Правда, возникают сомнения в его правильности — наблюдаются как минимум две с половиной ошибки:
словаря, а не эл-т массива.
1. 0 known — вместо нуля должно использоваться имя ключа, а оно пишется вместе со слешем, т.е. так: /0 known
2. При определенном расположении звезд на небе данный код может произвести словарь из 4-х элементов, в то время как в начале определена размерность три эл-та — 3 dict. Возможно предполагалось, что взяв /MediaClass из другого словаря, мы туда же его и определим (положим), но мне кажется, что это не так.
2,5. 0 get — синтаксически допустимо, но в данном контексте должно быть /0 get, т.к. извлекается ключ из
[/INDENT]
М.б. на конкретной реализации RIP'а это все и работает, но это как-то не совсем правильно.
Собственно, для выбора лотка нужно определить для pagedevice ключ /MediaPosition и задать его занчение на единицу меньшее, чем № лотка. Если занчение null, то используется лоток по умолчанию.
Код для выбора лотка в зависимости от № выводимой страницы может в данном случае выглядеть так:
Порядок следования лотков — в квадратных скобках за /traysOrder. В данном случае подача бумаги будет последовательно с первого, второго, третьего, первого и т.д. лотков.Код:/_setPageDevice {setpagedevice} bind def /traysOrder [0 1 2] def /pageCounter 0 def /setpagedevice { << /MediaPosition traysOrder pageCounter get /DeferredMediaSelection true /ManualFeed false >> _setPageDevice /pageCounter pageCounter 1 add dup traysOrder length eq {pop 0} if def _setPageDevice} bind def
Этот кусок кода надо вставить в начало PostScript-файла. Девятистраничный PostScript-файл со вставленным фрагментом в attach'е.
Акробатом.abc сказал(а):Но файлы разные, как их объединить в общий поток?
ch_alex сказал(а):Акробатом.
Пример оттестированного файла здесь (209K)Arkady сказал(а):…Девятистраничный PostScript-файл со вставленным фрагментом в attach'е.