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中。
如何解决此问题?
答案 0 :(得分:3)
使用您发布的代码在我的计算机上显示的结果? ?
首先,请确保您至少使用Java / JavaFX 8192 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><</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();
}
}