javafx - MathML 标签在 JavaFX WebView 中无法正确呈现

标签 javafx java-8 javafx-8 mathml javafx-webengine

MathML 标签在 JavaFX WebView 中无法正确呈现

JDK版本:1.8.0_192

例如,

<math xmlns="http://www.w3.org/1998/Math/MathML"> 
   <msub> 
    <mi>
      S 
    </mi> 
    <mi>
      n 
    </mi> 
   </msub> 
   <mo>
     &lt; 
   </mo> 
   <mstyle displaystyle="true" scriptlevel="0"> 
    <mfrac> 
     <mi>
       π 
     </mi> 
     <mrow> 
      <mn>
        3 
      </mn>     
      <msqrt> 
       <mn>
         3 
       </mn> 
      </msqrt> 
     </mrow> 
    </mfrac> 
   </mstyle> 
 </math>

上面的代码呈现为:

Chrome rendering

在 Google Chrome 中,它呈现为:

WebView version

在 JavaFX WebView 中。

如何解决这个问题?

最佳答案

使用您发布的代码在我的计算机上得到的结果? ?

Screenshot CaptainIRS MathML Code

首先,请确保您至少使用 Java/JavaFX 8 192 build 04 或 JavaFX 11(Java/JavaFX 9 和 10 中的 MathML 支持已损坏,并且不会在这些版本中修复)。

其次,验证您的字体列表。可能是您计算机上的字体配置问题?

必须至少安装以下字体之一(按优先顺序):

  • 拉丁现代数学

  • STIX 两个数学

  • XITS 数学
  • STIX 数学
  • 自由数学
  • TeX Gyre Termes 数学

  • TeX Gyre Bonum 数学

  • TeX Gyre Schola

  • DejaVu Math TeX Gyre

  • TeX Gyre Pagella 数学

  • 体式数学

  • 坎布里亚数学

  • Lucida Bright 数学
  • 小黄人数学

  • Times New Roman

我的电脑上也有结果,但在安装Latin Modern Math字体之后:

enter image description here

代码示例:您使用过这样的代码吗?

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

public class NavigateurTest extends Application {

    final StackPane root = new StackPane();
    final WebView webView =  new WebView();
    String ContentStackOverFlow = ""
            + "<math xmlns=\"http://www.w3.org/1998/Math/MathML\">"
            + "   <msub>"
            + "      <mi>S</mi>"
            + "      <mi>n</mi>"
            + "   </msub>"
            + "   <mo>&lt;</mo>"
            + "   <mstyle displaystyle=\"true\" scriptlevel=\"0\">"
            + "      <mfrac>"
            + "         <mi>π</mi>"
            + "         <mrow>"
            + "            <mn>3</mn>"
            + "            <msqrt>"
            + "               <mn>3</mn>"
            + "            </msqrt>"
            + "         </mrow>"
            + "      </mfrac>"
            + "   </mstyle>"
            + "</math>";

    public void init() {    
        root.getChildren().add(webView);
    }

    @Override
    public void start(Stage primaryStage) {

        //webView.getEngine().load("https://www.qwant.com");
        webView.getEngine().loadContent(ContentStackOverFlow);

        primaryStage.setTitle("OpenJFX MathML Rendering WebBrowser Test");
        primaryStage.setScene(new Scene(root));
        primaryStage.show();

    }

}

关于javafx - MathML 标签在 JavaFX WebView 中无法正确呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52098692/

相关文章:

JavaFX TreeView 的多种对象类型? (和更多)

应用程序构造函数中的 JavaFX 异常(未找到此类方法异常)

java - 访问由 Spring 的类转换器创建的对象上的 getter 时出现 ArrayIndexOutOfBoundsException

java - 如何在javafx中重复同一场景中的节点

JavaFX :Default Message for Empty ListView

java - 当对象属于某种类型时在桌面 View 上显示图像

java - "__ Cannot be resolved to a type"- JavaFX 无法在 Eclipse 中使用 e(fx)clipse 插件工作

java - 对列表中对象的特定字段的值求和

java.lang.NullPointerException 在 org.datafx.provider.PublishingTask$1.run(PublishingTask.java :41)

java - 自动调整 JavaFX TextArea 的宽度