Webページは、私のPCにインストールされていないカスタムフォントを使用しています。このような場合、WebViewはオペレーティングシステムのデフォルトフォントを使用しているようです。
しかし、私はフォントファイル「xx.ttf」を持っています。フォントをアプリケーションに埋め込み、それを使用してページ上のフォントを識別するようにWebViewに指示するにはどうすればよいですか?
フォントをロードします。
Font.loadFont(
CustomFontWebView.class.getResource("TRON.TTF").toExternalForm(),
10
);
WebView で使用する前に:
style='font-family:"TRON"';
これが完全な例です。この例は、 dafont からダウンロードできる TRON.TTF フォントに依存しています。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();
}
}
特に Microsoft YaHei フォントの使用について
Microsoft YaHei は問題なく動作します (Windows 7)。私の Win7 インストールにはフォントが付属しているため (削除できません)、明示的にロードする必要はありません。HTML から正しいフォント ファミリを参照するだけで、そのような Win7 インストールで機能します。中国語版ではなく、標準の US 版の Win7 Pro を持っています。msyh.ttf ファイルを windows/fonts ディレクトリからプロジェクトにコピーし、JavaFX 経由でロードして、JavaFX 経由のロードが機能し、それも正常に機能することを確認しました。html スタイルの css font-family 指定子を設定するために使用した font-family は、「Microsoft YaHei」でした (上記の回答例で使用されている TRON の代わりに)。テストのために表示したテキストは微软雅黑で、JavaFX アプリでレンダリングされたテキストと、Microsoft YaHei を選択してワードパッドでレンダリングされた同じテキストを比較したところ、グリフは同一でした。
JavaFX 3.0 では、 css @font-faceメカニズムを使用できるようになることに注意してください。つまり、上記の例で行ったように、Java コードではなく Web ページの css でフォント参照を宣言できます。この機能の実装の進捗状況を追跡するための、関連する jira 課題へのリンクを次に示します。