我在一个项目中,一个收入管理系统,由于某些原因,它需要在 WebView 上显示并打印一些报告,而设计概念要求 WebView 透明。我能够在这里解决 WebView 透明问题:JavaFX 中 WebView 中的透明背景归功于“ Harry Hur ” 1,因为我无法通过 FX CSS 实现这一点,而且我还能够在 WebView 上显示我的报告,如下所示:
代码:
WebView reportView = new WebView();
engine = reportView.getEngine();
engine.setUserAgent("Mozilla/5.0 (Linux; Android 4.1.1; HTC One X Build/JRO03C) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Mobile Safari/537.31");
//document property listener to make my webview transparent whenever a new document is loaded in
engine.documentProperty().addListener((ObservableValue<? extends Document> observable, Document oldValue, Document newValue) -> {
try{
// Use reflection to retrieve the WebEngine's private 'page' field.
Field f = engine.getClass().getDeclaredField("page");
f.setAccessible(true);
com.sun.webkit.WebPage page = (com.sun.webkit.WebPage) f.get(engine);
page.setBackgroundColor((new java.awt.Color(0, 0, 0, 0)).getRGB());
}catch(Exception ex){
ex.printStackTrace();
}
});
//enables javascript on the webengine after load
engine.getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>() {
@Override
public void changed(ObservableValue ov, Worker.State oldState, Worker.State newState) {
if(newState == Worker.State.SUCCEEDED) {
System.out.println("complete load.");
try {
engine.setJavaScriptEnabled(true);
} catch(Exception ex){
ex.printStackTrace();
}
}
}
});
engine.loadContent("<body style='background : rgba(0,0,0,0);'>My Html Content...</body>");
…但问题是当我尝试打印时,它会在纸上打印一个深色背景矩形图像,我想纸上的黑色部分是包含报告的 html 页面。下面是显示:
打印代码:
PrinterJob job = PrinterJob.createPrinterJob();
if (job != null && job.showPrintDialog(null) {
engine.print(job);
job.endJob();
}
打印输出: 因为我是新来的,并且没有达到 10 个声誉,所以我无法提供打印输出图像链接,但无论如何,帖子都解释了它。
但是,当我尝试注释使 WebView 透明的代码时,这将使 WebView 保留其默认背景颜色(白色)并将报告文本颜色更改为黑色,它通常会打印到纸上,但实际上不是用 css 呈现的方式。我的样式使用“Segoe UI Light”和“Segoe UI Bold”渲染文本字体,但它以“Times New Roman”字体和相同的字体大小打印出整个内容:下面是显示:
打印输出: 因为我是新来的,并且没有达到 10 个声誉,所以我无法提供打印输出图像链接,但无论如何,帖子都解释了它。
问题是:
请问有没有一种方法可以让我的 WebView 透明并打印 WebEngine 而没有背景渲染打印输出,就像它使用 css 的样式一样?如果有人能在这里帮助我,我将不胜感激,因为我在 JavaFX 方面只有 8 个月的经验。
仍然在打印时,还要求某些报表在(TableView)上以常规方式显示。我已经应用了一些在线帮助(关于如何打印节点),但我认为它没有为我提供解决问题的确切方法。请有人帮我写一些代码,这些代码可以帮助我打印一个 TableView,即使它溢出,我也可以打印整个数据,即使是那些像 Java Swing Table 一样不在视图中的数据?