2015-05-06 48 views
0

是否可以從字節數組註冊字體,而不是使用文件路徑?從iText中的字節數組註冊字體

FontFactory類有兩種註冊字體的方法。兩者都使用文件/文件夾路徑註冊字體:

我看着iText的源線索,但我不知道如何將字體文件最終在PDF文件中結束。

有誰知道如何註冊並從字節數組中嵌入字體(.ttf)? 我正在使用iTextSharp。

在此先感謝!

回答

2

是的,你可以從byte[]創建一個Font,但在這種情況下,你不能使用FontFactory。相反,您需要使用createFont方法創建一個BaseFont實例,請參閱http://api.itextpdf.com/itext/com/itextpdf/text/pdf/BaseFont.html瞭解不同的選項。

一旦你有一個BaseFont例如,你可以很容易地創建一個Font對象:

假設fBytesbyte[],那麼你就必須:

BaseFont bf = BaseFont.createFont(
    "myFont", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 
    true, fBytes, null); 
Font font = new Font(bf, 12); 

方法接受兩個byte[]參數,因爲Type 1字體由兩個文件組成:度量文件(AFM或PFM)和字體二進制文件(PFB)。對於所有其他字體(TTF,OTF,...),第二個byte[]參數應爲null

目前沒有辦法將這種字體作爲「註冊字體」添加到FontFactory

+0

謝謝!如果FontFactory可以「註冊」它們會很好,但至少我現在有一個解決方案:) – Robert

1

當給你的字體,你需要一個名字的.ttf添加到末尾,否則您將收到以下錯誤:

字體「myFont」與「身份-H」無法識別。

添加.ttf修復了這個錯誤。

BaseFont bf = BaseFont.createFont(
    "myFont.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 
    true, fBytes, null); 
Font font = new Font(bf, 12);