Javafx如何在webview中显示自定义字体?

时间:2012-07-04 09:12:13

标签: javafx javafx-2

网页使用的是我的电脑上未安装的自定义字体。在这种情况下,WebView似乎使用操作系统的默认字体。

但我有字体文件“xx.ttf”。如何将字体嵌入到我的应用程序中并告诉WebView使用它来识别页面上的字体?

1 个答案:

答案 0 :(得分:7)

加载字体:

Font.loadFont(
  CustomFontWebView.class.getResource("TRON.TTF").toExternalForm(), 
  10
);

在WebView中使用它之前:

style='font-family:"TRON"';

这是一个完整的例子。 该示例依赖于TRON.TTF字体,您可以从dafont下载该字体。 下载TRON.TTF字体后,将其放在CustomFontWebView.java所在的目录中,并确保构建系统将TRON.TTF文件复制到类输出目录。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.text.Font;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

// demonstrates the use of a custom font in a WebView.
public class CustomFontWebView extends Application {
  public static void main(String[] args) { launch(args); }
  @Override public void start(Stage stage) {
    stage.setTitle("TRON Synopsis");

    // load the tron font.
    Font.loadFont(
      CustomFontWebView.class.getResource("TRON.TTF").toExternalForm(), 
      10
    );

    // use the tron font in a WebView.
    WebView webView = new WebView();
    webView.getEngine().loadContent(
      "<body bgcolor='silver'>" +   
        "<div align='center'>" +   
          "<p style='font-family:'TRON'; font-size:20;'>" +                 "TRON" + 
          "</p>" +
          "<img src='http://ia.media-imdb.com/images/M/MV5BMTY5NjM2MjAwOV5BMl5BanBnXkFtZTYwMTgyMzA5.V1.SY317.jpg' width='259' height='457'/>" + 
          "<p style='font-family:'TRON'; font-size:10;'>" + 
            "A sci-fi flick set in an alternate reality." + 
          "</p>" +
        "</div>" +   
      "</body>"
    );

    // layout the scene.
    final Scene scene = new Scene(webView, 400, 575);
    stage.setScene(scene);
    stage.show();
  }
}

tron

特别是使用Microsoft YaHei字体

Microsoft YaHei适用于我(Windows 7)。我的Win7安装附带了字体(并且无法删除),因此不需要显式加载 - 只需从您的html引用正确的字体系列,它就可以用于这样的Win7安装。我有一个标准的美国版Win7 Pro,而不是中文版。我确实将msyh.ttf文件从我的windows / fonts目录复制到我的项目中,然后通过JavaFX加载它,以确保通过JavaFX加载并且工作正常。我用来设置html样式css字体系列说明符的font-family是“Microsoft YaHei”(而不是上面答案示例中使用的TRON)。我为测试它而显示的文本是微软雅黑,我将JavaFX应用程序的渲染文本与选择了Microsoft YaHei的WordPad中渲染的相同文本进行了比较,并且字形相同。


请注意,使用JavaFX 3.0似乎可以使用css @font-face机制,这意味着您可以在网页的css中声明字体引用,而不是像上面示例中那样在Java代码中声明。以下是relevant jira issue的链接,用于跟踪此功能的实施进度。