簡體   English   中英

使用 Java(.ttf 文件)將字體寫入磁盤

[英]Write a font to disk with Java (.ttf-file)

我正在制作各種安裝程序,基本上需要將字體從計算機上已安裝的字體復制到外部目錄。 這是我想要的一個例子:

Font f = new Font("Arial Black", Font.PLAIN, 20);
FontWriter.write(f, new File("C:\temp\ariblk.ttf"));

字體被加載到 Java 程序中,然后作為“ariblk.ttf”寫入磁盤,並且可以在另一個程序中使用。 注意:我需要這樣做是因為這個其他程序無法從系統安裝的字體中加載,句號。 請不要嘗試提出解決方法或詢問原因。

那么,我怎樣才能做到這一點? 有任何想法嗎?

Java 中是否有內置功能或我可以從某處下載的功能? 我希望我不需要自己編寫代碼,因為我必須閱讀 ttf 文件的結構。

自己想了個辦法。 不漂亮!

try {
    Font font = new Font("Arial Black", Font.PLAIN, 20);
    File physicalFont = null;
    Method method = font.getClass().getDeclaredMethod("getFont2D");
    method.setAccessible(true);
    String str = method.invoke(font).toString();
    if (str.contains(" fileName=")) {
        str = str.substring(str.indexOf(" fileName=")+10).replace("\r\n", "\n")+"\n";
        str = str.substring(0, str.indexOf("\n"));
        physicalFont = new File(str);
    }
    if (physicalFont==null || !physicalFont.isFile()) {
        System.out.println("not found");
    } else {
        System.out.println("font file: "+ physicalFont.getAbsolutePath());
    }
} catch (Throwable t) {
    t.printStackTrace();
}

基本上,反射用於破解 Font 類,以便可以訪問有關文件的信息。 關於這一點的愚蠢之處在於,在 Java 1.6 中可以輕松訪問此信息,但是當他們停止使用 FontManager 時,出於某種原因,在 Java 1.7 中無法訪問它。 很煩人。

除了這個,我找不到其他方法來做到這一點。 我希望黑客在未來不會中斷! 只要目標 Java 平台是 1.7 就可以了?

編輯:“您可以在 2 天內接受自己的答案。” 真的是 StackOverflow 嗎? 你還這樣做嗎? 等待一段時間,意識到這一點並讓新用戶隨時接受他們自己的答案,這絕非愚蠢之舉。 我什至不知道我是否會在 2 天內記住此帳戶的登錄信息。 如此糟糕的系統設計……太可惜了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM