【问题标题】:MathML tags don't render properly in JavaFX WebViewMathML 标记无法在 JavaFX WebView 中正确呈现
【发布时间】:2019-02-05 11:55:37
【问题描述】:

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>

以上代码呈现为:

在谷歌浏览器中,它呈现为:

在 JavaFX WebView 中。

如何解决这个问题?

【问题讨论】:

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


    【解决方案1】:

    您发布的代码在我的计算机上的结果? ?

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

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

    必须至少安装其中一种字体(按优先顺序):

    • Latin Modern Math

    • STIX Two Math

    • XITS Math
    • STIX Math
    • Libertinus Math
    • TeX Gyre Termes Math

    • TeX Gyre Bonum Math

    • TeX Gyre Schola

    • DejaVu Math TeX Gyre

    • TeX Gyre Pagella Math

    • Asana Math

    • Cambria Math

    • Lucida Bright Math
    • Minion Math

    • Times New Roman

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

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

    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();
    
        }
    
    }
    

    【讨论】:

    • 谢谢。但是,EA 版本中似乎存在一个错误,阻止 IntelliJ 使用 OpenJDK 11。Details here 任何解决方法?
    • 这真的离你最先发的主题很远吗? ? ?
    • 安装了上述字体的 jdk 8u192 build 4 也不起作用。
    • 我不确定你的任务是什么。 JFX 8 和 JFX 11 中的 MathML 支持是相同的。实际上,我很久以前就开始使用 JDK 11 和 JFX 11,所以我从不使用 IDE,因为它们还没有准备好使用 JDK 11 和 JFX11。目前,我正在使用自己的 JFX 构建脚本。
    • 我用 Windows 和 Linux 测试过,结果是一样的。你的操作系统是什么?
    猜你喜欢
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 2012-02-04
    • 1970-01-01
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多