Я вижу какое-то странное поведение в Ghostscript 9.06, и мне интересно, нужно ли это делать с моей PS-структурой или чем-то еще.Ghostscript - использование шрифта в форме делает его недоступным
У нас есть встроенный шрифт, а затем попытайтесь установить форму и использовать ее, как показано ниже. Внизу у меня также есть некоторые строки, которые можно разместить прямо на странице без использования формы.
globaldict
begin
true setglobal
/frm_test <<
/FormType 1 /BBox [-842 -842 596 596] /Matrix [1 0 0 1 0 0] /PaintProc { pop
/ArialMT 7.0 selectfont
0 0 moveto
(Test text form) show
} %endPaintProc
>> /Form defineresource pop
/form_test {/frm_test /Form findresource true setglobal execform false setglobal} bind def
%/form_test {/frm_test /Form findresource execform} bind def
false setglobal
end
gsave
10 820 translate
form_test
grestore
/ArialMT 7.0 selectfont
10 800 moveto
(Test text normal) show
showpage
Проблема здесь состоит в том, что вызов form_test громит определение шрифта для обоих случаев - Ghostscript не может найти названный шрифт. Если я никогда не называю form_test, тогда работает второй случай.
Если я поменяю строку/form_test с прокомментированным ниже, то он отлично работает. Однако что это за линия? Кажется, он заставляет форму работать в глобальной области VM, но я не уверен, почему это имеет значение, и почему любые ошибки распространяются на следующий «selectfont», если они происходят.
Почему Acrobat Distiller справляется с этим - правильно ли он написан Postscript или нет? Благодарю.
Редактирование: По-видимому, изменение окружающих команд для сохранения/восстановления вместо gsave/grestore не позволяет проблеме влиять на второй текст, но это не объясняет, почему шрифт неизвестен в Форме. Также я считаю, что gsave/grestore должно быть достаточным, так как форма не должна иметь побочного эффекта, кроме состояния графики.
ArialMT шрифт Type 1, но я также попробовал его с шрифтами Type 42. Этот файл предоставляется клиентом, моя работа - преобразовать в PDF, но Ghostscript не работает в то время как Distiller. Я только что привел часть его здесь, чтобы воспроизвести проблему. Изменения, о которых я говорил выше, работают, поэтому я должен буду это сделать. Кажется, что весь файл находится в локальном сохранении/восстановлении, но формы являются глобальными, так что это объясняет проблему, но не почему работает дистиллятор. Еще одна из тех вещей, которые я предполагаю. –