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>
<
</mo>
<mstyle displaystyle="true" scriptlevel="0">
<mfrac>
<mi>
π
</mi>
<mrow>
<mn>
3
</mn>
<msqrt>
<mn>
3
</mn>
</msqrt>
</mrow>
</mfrac>
</mstyle>
</math>
上面的代码呈现为:
在 Google Chrome 中,它呈现为:
在 JavaFX WebView 中。
如何解决这个问题?
最佳答案
使用您发布的代码在我的计算机上得到的结果? ?
首先,请确保您至少使用 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
字体之后:
代码示例:您使用过这样的代码吗?
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><</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/