2011-02-03 47 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

相關問題