Как мне остановить .EPS файл от разбиения текста на несколько строк в PostScript? - PullRequest
1 голос
/ 04 февраля 2011

Я пытаюсь специально изменить текст из файла .EPS, созданного таким продуктом Adobe, как Illustrator или InDesign. По какой-то причине некоторые шрифты разбиты на отдельные строки и перемещены чуть-чуть. Это не TrueType против OpenType.

Вот пример, текст «$$ tag1 $$»:

%ADOEndSubsetFont
/ZDCMCB+NiagaraSolid-Reg /NiagaraSolid-Reg findfont ct_VMDictPut
/ZDCMCB+NiagaraSolid-Reg*1 
[36{/.notdef}rp /dollar 12{/.notdef}rp /one 47{/.notdef}rp /a 5{/.notdef}rp /g 
12{/.notdef}rp /t 139{/.notdef}rp]
ZDCMCB+NiagaraSolid-Reg nf
ZDCMCB+NiagaraSolid-Reg*1 [9 0 0 -9 0 0 ]msf
264.206 109.1 mo
($$t)sh
270.916 109.1 mo
(ag1$$)
[2.42188 2.51758 1.45117 2.53906 0 ]xsh

Вот пример, где он не ломается, текст «$$ tag1 $$»:

%ADOEndSubsetFont
/ZDCMCC+Utsaah-BoldItalic /Utsaah-BoldItalic findfont ct_VMDictPut
/ZDCMCC+Utsaah-BoldItalic*1 
[36{/.notdef}rp /dollar 13{/.notdef}rp /two 46{/.notdef}rp /a 5{/.notdef}rp /g 
12{/.notdef}rp /t 139{/.notdef}rp]
ZDCMCC+Utsaah-BoldItalic nf
ZDCMCC+Utsaah-BoldItalic*1 [9 0 0 -9 0 0 ]msf
264.206 118.1 mo
($$tag2$$)sh
%ADOBeginSubsetFont: Garamond-Bold Initial
%ADOt1write: (1.0.24)

Мы используем PHP для замены переменных и сохранения файла с новыми значениями. Проблема в том, что мы не можем надежно определить, где текст будет разрываться, и если это произойдет, мы не сможем заменить его, или файл выдаст ошибку при попытке преобразовать его во что-то вроде PDF.

Любая помощь очень ценится!

1 Ответ

3 голосов
/ 04 февраля 2011

Постскриптум, сгенерированный продуктами, обычно - как и в случае - не может быть прочитан или отредактирован.

В качестве полнофункционального языка, если действительно создать файл postscript более или менее с нуля, он оказывается гораздо более читабельным, чем примеры выше, и в этом случае он редактируемый.

Постскриптум сам по себе не сложный - поскольку вы генерируете EPS, возможно, вам будет проще сделать все части, генерирующие текст, в виде созданного человеком фрагмента кода, а не полагаться на автоматически сгенерированный код, как описано выше.Вы потеряете некоторые тонкости, связанные с набором текста, так как расстояние между каждой парой букв, по-видимому, рассчитано (за пределами PostScript) и жестко задано выше.Возможно, вы просто захотите сохранить неизменность файла EPS и заменить части «текстового ядра», после чего выделение будет настраиваться на читаемые человеком части, как в обычной программе на любом языке.

Пример рендеринга может бытькак:

%!PS-Adobe EPSF-3.0
%%BoundingBox: 0 0 800 200

(VeraSeeBd.ttf) findfont 70 scalefont setfont
10 10 moveto
(Hello World!) show

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

...