Javafx ¿Cómo mostrar una fuente personalizada en la vista web?

La página web utiliza una fuente personalizada que no está instalada en mi PC. En tal caso, WebView parece usar la fuente predeterminada del sistema operativo.

Pero tengo el archivo de fuente "xx.ttf". ¿Cómo puedo incrustar la fuente en mi aplicación y decirle a WebView que la use para identificar la fuente en la página?

preguntado el 04 de julio de 12 a las 10:07

1 Respuestas

Cargue la fuente:

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

antes de usarlo en WebView:

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

Aquí hay un ejemplo completo. El ejemplo se basa en una fuente TRON.TTF que puede descargar desde dafont. Una vez que haya descargado la fuente TRON.TTF, colóquela en el mismo directorio que CustomFontWebView.java y asegúrese de que su sistema de compilación copie el archivo TRON.TTF en el directorio de salida de la clase.

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

Sobre el uso de la fuente Microsoft YaHei específicamente

Microsoft YaHei funciona bien para mí (Windows 7). Mi instalación de Win7 viene con la fuente (y no se puede eliminar), por lo que no es necesario cargarla explícitamente; solo haga referencia a la familia de fuentes correcta de su html y funcionará para una instalación de Win7 de este tipo. Tengo una edición estadounidense estándar de Win7 Pro, no una versión china. Copié el archivo msyh.ttf de mi directorio windows/fonts en mi proyecto y lo cargué a través de JavaFX solo para asegurarme de que la carga a través de JavaFX funciona y eso también funcionó bien. La familia de fuentes que usé para configurar el especificador de familia de fuentes css de estilo html fue "Microsoft YaHei" (en lugar de TRON utilizado en el ejemplo de respuesta anterior). El texto que mostré para probarlo fue 微软雅黑 y comparé el texto representado por la aplicación JavaFX con el mismo texto representado en WordPad con Microsoft YaHei seleccionado y los glifos eran idénticos.


Tenga en cuenta que con JavaFX 3.0 parece que podrá usar el css @fuente-cara mecanismo, lo que significa que podría declarar la referencia de la fuente en el css de la página web en lugar de en el código Java como hice en el ejemplo anterior. Aquí hay un enlace a la asunto relevante de jira para realizar un seguimiento del progreso en la implementación de esta función.

Respondido el 06 de junio de 16 a las 15:06

Gracias por la respuesta. He intentado esto antes con mi fuente msyh.ttf (Microsoft YaHei) pero no funcionó en la PC que no tiene esta fuente instalada. Pero tu fuente funciona perfectamente... ¿Qué le pasa a Microsoft YaHei? - otorgar zhu

Hola Juan, gracias por tu paciencia. No funciona en el sistema que no tiene instalado Microsoft YaHei, como Windows XP. Estoy probando en una máquina virtual con Windows XP. Tal vez haya una versión específica de esta fuente para trabajar con XP. No tengo mucho conocimiento sobre esto. De todos modos, Font.loadFont es el método correcto, así que aceptaré su respuesta. Gracias de nuevo.. - otorgar zhu

Mi conjetura es correcta. Hay otra versión de la fuente para XP... Simplemente copiar el archivo de fuente de win7 a XP no funcionará... - otorgar zhu

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.