簡體   English   中英

如何從具有多個TTF文件的Font系列導入自定義java.awt.Font? (包括一個例子)

[英]How to import a custom java.awt.Font from a Font family with multiple TTF files? (An example is included)

我知道您可以使用以下內容導入Java中的Font:

File file = new File(fontPath);
Font font = Font.createFont(Font.TRUETYPE_FONT, file);
// alternative:
// Font font = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream(file));
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(font);

然后你會使用例如font.deriveFont(Font.PLAIN, 20); 獲得所需的風格和大小。


但現在讓我們看一下Consolas字體的例子,那里有四個TTF文件:

  • consola.ttf (Plain)
  • consolab.ttf (Bold)
  • consolai.ttf (Italic)
  • consolaz.ttf (Bold&Italic)

當然你可以用上面consola.ttf的方法導入consola.ttf ,然后使用font.deriveFont(Font.BOLD, 20); 是不一樣的使用consolab.ttf因為普通的字體簡單地轉化為看起來像一個大膽的字體。


示例圖片

  1. 這里我用new Font("Consolas", Font.PLAIN, 20);安裝了new Font("Consolas", Font.PLAIN, 20); new Font("Consolas", Font.BOLD, 20); (作為旁注,如果您在系統上安裝了字體,那么如果使用deriveFont(Font.BOLD);您也會獲得正確的粗體字體deriveFont(Font.BOLD); ):

使用已安裝的TTF字體

  1. 這是consola.ttf ,使用createFont和派生的粗體字體導入(兩者的大小均為20,如上例所示):

使用導入的TTF和派生的粗體字體


好吧,安裝時沒問題,但我不希望別人有自定義字體,所以我想把TTF放到jar文件中,以便我可以在初始化期間通過getResourceAsStream(path)導入它們。

有沒有辦法導入所有相關的TTF,然后只需調用new Font("Custom Font Name", fontStyle, fontSize); 所以它像安裝的字體一樣使用(圖1),它看起來不像派生的'假'粗體字(圖2)?

我不確定究竟是什么問題。 你得到了所有的TTF文件,你必須導入並注冊它們。 以下測試使用未安裝在我的系統上的DejaVu Sans字體。


測試1

Font f = Font.createFont(Font.TRUETYPE_FONT, new File("dvs.ttf"));

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(f);

Font dvs = new Font("DejaVu Sans", Font.PLAIN, 20);

這是一個帶有plain( dvs )和派生粗體dvs.deriveFont(Font.BOLD) )字體的圖像。

在此輸入圖像描述

測試2

Font f = Font.createFont(Font.TRUETYPE_FONT, new File("dvs.ttf"));
Font fb = Font.createFont(Font.TRUETYPE_FONT, new File("dvsb.ttf"));

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(f);
ge.registerFont(fb);

Font dvs = new Font("DejaVu Sans", Font.PLAIN, 20);
Font dvsb = new Font("DejaVu Sans", Font.BOLD, 20);

這是一個普通( dvs )和真正粗體dvsb )字體的圖像。

在此輸入圖像描述

您可以通過查看font2DHandle來確認使用了正確的文件。

在此輸入圖像描述在此輸入圖像描述


我還測試了斜體粗體斜體 ,並且與Font#createFont(int, InputStream)方法一樣有效。

上面的方法是有效的,因為字體是按其全名映射的(例如Arial,Arial Bold等),因此只要您的字體名稱正確,您就可以注冊一個系列的多個成員。

暫無
暫無

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

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