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

  • Автор темы Автор темы abc
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

abc

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

Нельзя.

Что нужно получить? Сделать этакий листоподбор?
 
Ответ: Печать из трех файлов pdf

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

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

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

это задача для скрипта, перебирать три открытых документа, каждый раз отсылать на печать по одной странице. См. руководство по скриптингу для акробата
 
Ответ: Печать из трех файлов 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
 
Ответ: Печать из трех файлов 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

а где можно прочесть доку на руском
 
Ответ: Печать из трех файлов pdf

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

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

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

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

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

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

Вложения

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

А лотки (в данном случае) выбираются с помощью задания MediaColor в настройках принтера?
 
Ответ: Печать из трех файлов 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

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

Вложения

Ответ: Печать из трех файлов 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'е.
 

Вложения

Ответ: Печать из трех файлов 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'е.

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

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

ch_alex сказал(а):

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

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