2016-05-04 237 views
0

所以我有以下問題。我收到一個包含一組字體的PDF文件。這些字體沒有嵌入到文件中。下面是一個簡單的例子:用IText在PDF中嵌入非嵌入字體

non embedded font

我想嵌入PDF內這些字體,所以他們自成一體,隨時可用。但事情似乎並不那麼簡單。我正在使用IText來處理我的PDF

我已閱讀並嘗試了以下問題/回答:這本書的

但最接近我的是以下例子:EmbedFontPostFacto.java(來自該書)。在提供Arial.ttf文件時,我能夠嵌入Arial字體。

embedded font

但有了這個,跟其他的例子,我需要的字體的源文件,以嵌入它。在我的情況下,我沒有源文件。但是,我可能會讓他們在系統上。所以我想在系統上查詢我的可用字體,並查看它是否與給定的字體相對應。

喜歡的東西作爲

GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
java.awt.Font[] fonts = e.getAllFonts(); 
for(java.awt.Font f : fonts){ 
    System.out.println(f.getFontName()); 
} 

但我不能改變給定java.awt.FontRandomAccessFilebyte[],以便嵌入字體文件本身使用。是否有另一種方法將字體嵌入到PDF中,而不需要自己的字體源文件?

回答

1

對於Windows C:\Windows\Fonts等包含所有字體文件,並在資源管理器中顯示字體名稱。所以手動搜索是可行的。

在java中,您有GraphicsEnvironment.getAvailableFontFamilyNames()Font.getFamilyName()來檢查PDF中的名稱,如「Arial MT」。

但是,字體中缺少該文件的getter。

因此,列出字體目錄的所有文件,並連續加載每個文件作爲字體。

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
Font font = Font.createFont(Font.TRUETYPE_FONT, ttfFile); 
ge.registerFont(font); // If you want to load the font. 

if (pdfFontName.startsWith(font.getFamilyName()) { 
    System.out.printf("%s - %s/%s%n", ttfFile.getName(), font.getFamilyName(), 
      font.getName()); 
}