2015-03-07 5 views
0

Для целей тестирования, подведем некоторые бессмысленные прямоугольники:Можно ли использовать EPS-файл (созданный с помощью eps2write) в процедуре EndPage?

gswin32c -q -o f.pdf -sDEVICE=pdfwrite -c "<</PageSize[595 842]>>setpagedevice 0 0 595 842 rectfill showpage" 

+

gswin32c -q -o f.eps -sDEVICE=eps2write -f f.pdf 

И ps.ps файл:

<< 
    /EndPage { 
     exch pop 
     2 ne dup { 
      1 dict begin 
      /showpage {} def 
      (f.eps) run 
      end 
     } if 
    } 
>> setpagedevice 

а затем

gswin32c -q -o out.pdf -sDEVICE=pdfwrite -f ps.ps -f f.pdf 

выдает сообщение об ошибке:

%%[ Error handled by opdfread.ps : GPL Ghostscript 9.15: Unrecoverable error, exit code 1 Unrecoverable error: typecheck in if Operand stack: typecheck ebuf false false --nostringval--

С другой стороны, если я создаю EPS с другим инструментом, например, xpdf «ы pdftops:

pdftops -eps f.pdf f.eps 

... тогда EPS могут быть размещены как, например, водяной знак или логотип с указанной команды:

gswin32c -q -o out.pdf -sDEVICE=pdfwrite -f ps.ps -f f.pdf 

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

Я попытался кронштейну (f.eps) run с призывами BeginEPSF и EndEPSF, как определено в EPSF Формат спецификации компании Adobe, но это не помогло. И после декодирования пролога, который создает eps2write (который сам по себе дает ту же ошибку, если он работает от EndPage), мне кажется, что он нарушает раздел на Незаконные и ограниченные операторы упомянутой Спецификации.

Edit: Я думаю, что есть проблема с Сразу Оценивается Имена если код выполняется из EndPage. В прологе, что создает eps2write, есть фрагмент не очень далеко от начала:

//SetPageSize{ 
//RotatePages//FitPages or//CenterPages or{ 
mark(/RotatePages, /FitPages and CenterPages are not allowed with /SetPageSize)//error exec 
}if 
} 
{ 
//FitPages//CenterPages and{ 
mark(CenterPages is not allowed with /FitPages)//error exec 
}if 
} 
ifelse 

Если я кадр так:

SetPageSize == 
//SetPageSize == 
{ 

//SetPageSize{ 
//RotatePages//FitPages or//CenterPages or{ 
mark(/RotatePages, /FitPages and CenterPages are not allowed with /SetPageSize)//error exec 
}if 
} 
{ 
//FitPages//CenterPages and{ 
mark(CenterPages is not allowed with /FitPages)//error exec 
}if 
} 
ifelse 

} stopped { (***\n) print } if 

И изменить ps.ps немного:

<< 
    /EndPage { 
     exch pop 
     2 ne dup { 
      1 dict begin 
      /showpage {} def 
      (prologue.ps) run 
      end 
     } if 
    } 
>> setpagedevice 

Затем эту команду:

gswin32c -q -o out.pdf -sDEVICE=pdfwrite -f ps.ps -f f.pdf 

... дает этот вывод:

false 
/SetPageSize 
*** 
%%[ Error handled by opdfread.ps : GPL Ghostscript 9.14: Unrecoverable error, exit code 1 

И.Э. он терпит неудачу в вышеприведенном фрагменте (и по очевидной причине, я думаю), а затем сбой в другом месте ниже в пределах prologue.ps.

+0

Можете ли вы рассказать о том, что, по вашему мнению, нарушает ограниченные операторы, пожалуйста? т.е. какой оператор используется? – KenS

+0

Хмм, мне придется немного подумать ... – KenS

ответ

1

ОК, поэтому я сделал что-то похожее на ваш опыт. Я начал с простого файла PostScript (testeps.пс):

%! 
0 1 0 setrgbcolor 
0 0 100 100 rectfill 
showpage 

Я побежал, что через Ghostscript с помощью eps2write устройства:

./gs -sDEVICE=eps2write -sOutputFile=out.eps -dCompressPages=false testeps.ps 

Затем я построил еще один тестовый файл (test.ps):

%! 

<< 
    /EndPage { 
     exch pop 
     2 ne dup { 
      1 dict begin 
      /showpage {} def 
      (/temp/out.eps) run 
      end 
     } if 
    } 
>> setpagedevice 

1 0 0 setrgbcolor 
0 100 100 100 rectfill 

showpage 

и побежал, что через GS:

./gs test.ps 

Файл запустился до завершения и содержал соответствующие цветные прямоугольники в правильных положениях на странице.

full page A4 PNG output

Его можно это то, что было исправлено (вы не говорите, какую версию Ghostscript вы используете). Следующий выпуск (9.16) должен быть выполнен в ближайшее время, или вы можете построить себя из источника, я предлагаю вам попробовать его, когда он будет доступен.

+0

Идея заключалась в том, чтобы «штамповать» существующий многостраничный ** PDF ** с помощью «штампа» (например, логотипа), который содержит только вызов 'setpagedevice' (плюс внешний EPS). Тогда команда ** терпит неудачу **, как я описал (версии GS 9.14, 9.15). Но, как я нашел сейчас, глядя на ваш пример, команда ** не ** терпит неудачу, если мы нажмем ** postcript ** файл (в отличие от штамповки PDF). Итак, есть простой способ обхода, я должен был проверить его, прежде чем публиковать этот вопрос. И у меня есть еще одна небольшая проблема, на этот раз с использованием 'BeginPage', может быть, это будет еще один вопрос, хотя я сделаю еще несколько проверок перед отправкой :) – user2846289

+0

Переводчик Ghostscript PDF делает сложный материал, я не уверен Я бы опирался на поведение BeginPage и EndPage с ним, хотя он работает «обычно» .... – KenS

 Смежные вопросы

  • Нет связанных вопросов^_^