2014-02-25 32 views
1

這是關於iText 2.1.6的。iText - 如何識別可打印字符串中所有字符的單個字體?

我有一個字符串包含來自不同語言的字符,我希望爲所有這些字符選擇一種字體(註冊字體之間)的字形。如果我已經有一種可以顯示所有這些字形的字體,我想避免出現字符串中的不同子字符串使用不同字體打印的情況。

如果沒有這樣的單一字體,我仍然希望選擇一小部分覆蓋字符串中字符的字體。

我知道FontSelector,但它似乎沒有嘗試爲給定的文本找到最小的一組字體。正確?我該怎麼做呢?

回答

2

iText 2.1.6已過時。請停止使用:http://itextpdf.com/salesfaq

我看到一個兩個問題:

是否有包含所有語言的所有字符的字體?

請允許我解釋爲什麼這是不可能的:

  • 有以Unicode 1,114,112代碼點。並非所有這些代碼點都被使用,但不同字形的可能數量是巨大的。
  • 簡單字體只包含256個字符(每種字體1個字節),複合字體使用0到65,535之間的CID。

65,535比1,114,112小得多,這意味着在技術上不可能擁有包含所有可能字形的單個字體。

FontSelector找不到最小的字體!

FontSelector不尋找最小的一組字體。您必須告訴FontSelector您要使用哪種字體,並且的順序是!假設你有這樣的代碼:

FontSelector selector = new FontSelector(); 
selector.addFont(font1); 
selector.addFont(font2); 
selector.addFont(font3); 

在這種情況下,FontSelector會先看看font1爲每個特定的符號。如果它不在那裏,它會看到font2等......很顯然font1,font2font3將有相同的字符共同不同的字形。例如:a,aa。使用哪種字形將取決於添加字體的順序。

底線:

選擇範圍廣泛,涵蓋所有你需要的字形,並將它們添加到FontSelector例如字體。不要指望找到一個包含所有需要的字形的字體。

+0

非常感謝,布魯諾。一個不同的方式來解釋我的問題是:是否有一個類似FontSelector的類試圖找到一組最小的字體?我實際上知道FontSelector的行爲。 –

+0

Define'minimal set of fonts';-)如果你使用'registerDirectories()','FontFactory'將會抓住可能的字體目錄(通常的嫌疑犯)。但是:軟件無法決定你喜歡哪種字體。例如:字體如何知道您是否偏好Arial而不是Times Roman(反之亦然)? –

+0

通過最小的字體集合,我的意思是,「如果一種字體足以呈現給定的字符串,則不要使用兩個或更多字體。如果輸入字符串使用英語和孟加拉語,並且在已註冊的目錄中有字體這些字符的字形,使用該字體,而不是使用一種字體的英文和一種孟加拉語「這是關於貪婪vs最佳。 –

相關問題