Теги MathML неправильно отображаются в JavaFX WebView
Теги 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.
Как исправить эту проблему?
1 ответ
Результат на моем компьютере с кодом, который вы разместили??
Во-первых, убедитесь, что вы используете хотя бы Java/JavaFX 8 192 build 04 или JavaFX 11 (поддержка MathML не работает, в Java/JavaFX 9 и 10 и не будет исправлена в этих версиях).
Во-вторых, проверьте свой список шрифтов. Может быть проблема с настройкой шрифтов на вашем компьютере?
По крайней мере один из этих шрифтов должен быть установлен (в порядке предпочтения):
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();
}
}