Печать из трех файлов pdf

Статус
Закрыто для дальнейших ответов.

abc

Участник
Топикстартер
Сообщения
31
Реакции
0
При помощи какой программы можно печатать из трех файлов pdf так чтобы каждая новая страница была взята с разных лотков и с разных файлов по очереди ?
 

ch_alex

Погулять вышел.
15 лет на форуме
Сообщения
8 420
Реакции
2 709
Ответ: Печать из трех файлов pdf

Нельзя.

Что нужно получить? Сделать этакий листоподбор?
 

abc

Участник
Топикстартер
Сообщения
31
Реакции
0
Ответ: Печать из трех файлов pdf

ch_alex сказал(а):
Нельзя.

Что нужно получить? Сделать этакий листоподбор?

Это печать бланков, три цвета бумаги и три разных изображения.
 

1998

Участник
Сообщения
1 895
Реакции
1 321
Ответ: Печать из трех файлов pdf

это задача для скрипта, перебирать три открытых документа, каждый раз отсылать на печать по одной странице. См. руководство по скриптингу для акробата
 

Arkady

Участник
Сообщения
697
Реакции
2
Ответ: Печать из трех файлов pdf

В общем-то можно. Если принтер 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
 

abc

Участник
Топикстартер
Сообщения
31
Реакции
0
Ответ: Печать из трех файлов pdf

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

Участник
Сообщения
697
Реакции
2
Ответ: Печать из трех файлов pdf

На русском, боюсь, что нигде. Оригинал — «Postscript language reference…»,— здесь . «Динозавры»-программисты говорят, что напоминает Форт. Тебе, по большому счету, нужно только заменить многоточие и содержимое myTrays в приведенном фрагменте (это зависит от конкретного принтера).
 

abc

Участник
Топикстартер
Сообщения
31
Реакции
0
Ответ: Печать из трех файлов pdf

Arkady сказал(а):
На русском, боюсь, что нигде. Оригинал — «Postscript language reference…»,— здесь . «Динозавры»-программисты говорят, что напоминает Форт. Тебе, по большому счету, нужно только заменить многоточие и содержимое myTrays в приведенном фрагменте (это зависит от конкретного принтера).

я просто чайник в использовании пост скрипт, файлы пдф, машина Херох4110 ps и pcl. Помогите с чего начать?
 

Arkady

Участник
Сообщения
697
Реакции
2
Ответ: Печать из трех файлов pdf

C изучения PPD принтера в той его части, где выбираются лотки подачи (Trays).
 

abc

Участник
Топикстартер
Сообщения
31
Реакции
0
Ответ: Печать из трех файлов pdf

Arkady сказал(а):
C изучения PPD принтера в той его части, где выбираются лотки подачи (Trays).

Это я нашел и изучил. Что дальше?
 

Вложения

  • xrd41101.rar
    8 КБ · Просм.: 262

Arkady

Участник
Сообщения
697
Реакции
2
Ответ: Печать из трех файлов pdf

А лотки (в данном случае) выбираются с помощью задания MediaColor в настройках принтера?
 

abc

Участник
Топикстартер
Сообщения
31
Реакции
0
Ответ: Печать из трех файлов pdf

Arkady сказал(а):
А лотки (в данном случае) выбираются с помощью задания MediaColor в настройках принтера?

Так пишется в PPD...

UIConstraints: *InputSlot 1stTray *PageSize XRPostcard
*UIConstraints: *InputSlot 2ndTray *PageSize XRPostcard
*UIConstraints: *InputSlot 3rdTray *PageSize XRPostcard
*UIConstraints: *InputSlot 4thTray *PageSize XRPostcard
*UIConstraints: *InputSlot HCF1 *PageSize XRPostcard
*UIConstraints: *InputSlot HCF2 *PageSize XRPostcard

Это правильный файл, старый я поставил по ошибке.
 

Вложения

  • XR411EE1.rar
    28.5 КБ · Просм.: 251

Arkady

Участник
Сообщения
697
Реакции
2
Ответ: Печать из трех файлов pdf

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
Это правильный файл, старый я поставил по ошибке.
Правда, возникают сомнения в его правильности — наблюдаются как минимум две с половиной ошибки:

1. 0 known — вместо нуля должно использоваться имя ключа, а оно пишется вместе со слешем, т.е. так: /0 known
2. При определенном расположении звезд на небе данный код может произвести словарь из 4-х элементов, в то время как в начале определена размерность три эл-та — 3 dict. Возможно предполагалось, что взяв /MediaClass из другого словаря, мы туда же его и определим (положим), но мне кажется, что это не так.
2,5. 0 get — синтаксически допустимо, но в данном контексте должно быть /0 get, т.к. извлекается ключ из​
словаря, а не эл-т массива.
[/INDENT]

М.б. на конкретной реализации RIP'а это все и работает, но это как-то не совсем правильно.
Собственно, для выбора лотка нужно определить для pagedevice ключ /MediaPosition и задать его занчение на единицу меньшее, чем № лотка. Если занчение null, то используется лоток по умолчанию.
Код для выбора лотка в зависимости от № выводимой страницы может в данном случае выглядеть так:
Код:
/_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
Порядок следования лотков — в квадратных скобках за /traysOrder. В данном случае подача бумаги будет последовательно с первого, второго, третьего, первого и т.д. лотков.
Этот кусок кода надо вставить в начало PostScript-файла. Девятистраничный PostScript-файл со вставленным фрагментом в attach'е.
 

Вложения

  • sample.zip
    166.3 КБ · Просм.: 333

abc

Участник
Топикстартер
Сообщения
31
Реакции
0
Ответ: Печать из трех файлов pdf

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, то используется лоток по умолчанию.
Код для выбора лотка в зависимости от № выводимой страницы может в данном случае выглядеть так:
Код:
/_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
Порядок следования лотков — в квадратных скобках за /traysOrder. В данном случае подача бумаги будет последовательно с первого, второго, третьего, первого и т.д. лотков.
Этот кусок кода надо вставить в начало PostScript-файла. Девятистраничный PostScript-файл со вставленным фрагментом в attach'е.

Но файлы разные, как их объединить в общий поток?
 

ch_alex

Погулять вышел.
15 лет на форуме
Сообщения
8 420
Реакции
2 709
Ответ: Печать из трех файлов pdf

abc сказал(а):
Но файлы разные, как их объединить в общий поток?
Акробатом.
 

abc

Участник
Топикстартер
Сообщения
31
Реакции
0
Ответ: Печать из трех файлов pdf

ch_alex сказал(а):

Каждый из файлов может состоять от 50 до 1000 страниц, необходимо автоматическое соединение, это неразовое задание.
 

Arkady

Участник
Сообщения
697
Реакции
2
Ответ: Печать из трех файлов pdf

Acrobat JavaScript
 
Статус
Закрыто для дальнейших ответов.