2011-02-03 74 views
1

我试图从Adobe产品生成的.EPS文件(如Illustrator或InDesign)中专门更改文本。无论出于何种原因,某些字体被分解到不同的行上并移动一点点。这不是一个TrueType与OpenType的东西。如何在PostScript中停止将文本分割为多行的.EPS文件?

下面是一个例子,该文本是 “$$标签1 $$”:

%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 

下面是一个例子它不破,文字是 “$$标签1 $$”:

%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之类时会出错。

任何帮助非常感谢!

回答

3

由产品生成的Postscript通常是 - 情况 - 不是人的可读或可编辑的。

作为一种全功能的语言,如果确实创建了一个或多或少从头开始的postscript文件,它最终会比上面的示例更具可读性,并且在这种情况下,它是可编辑的。

Postscript本身并不难 - 因为您正在生成一个EPS,所以您可能会更容易将所有文本生成部分作为人为生成的代码片段来执行,而不是像上面那样依赖自动生成的代码。由于每个字母对之间的距离似乎是计算出来的(在附录之外)并且在上面进行了硬编码,所以您会丢失一些排版的细微差别。您可能只想保留EPS文件的剩余部分,并替换“文本核心”部分 - 然后,按照您在任何语言的常规程序中进行的调整,即可对可读部分进行调整。

样本渲染可能是这样的:

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

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

这是一个容易得多,以纪念你的文字休息从那里。 如果你想要更复杂的东西,并有postscrit照顾 换行符本身,而不是从发生器代码估计, 它是可能的 - 但你必须编写该逻辑到postscript本身。

+0

干杯,我们会研究一下。我相信我已经通过确保文本的跟踪不是0来解决问题。在我的所有测试中,这确保文本保持在同一行。 – 2011-02-04 18:15:12