3

我在一个项目中,一个收入管理系统,由于某些原因,它需要在 WebView 上显示并打印一些报告,而设计概念要求 WebView 透明。我能够在这里解决 WebView 透明问题:JavaFX 中 WebView 中的透明背景归功于Harry Hur1,因为我无法通过 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>");

结果 透明 WebView,内容加载到它上面

…但问题是当我尝试打印时,它会在纸上打印一个深色背景矩形图像,我想纸上的黑色部分是包含报告的 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”字体和相同的字体大小打印出整个内容:下面是显示:

结果: 加载了黑色文本内容的白色背景 WebView

打印输出: 因为我是新来的,并且没有达到 10 个声誉,所以我无法提供打印输出图像链接,但无论如何,帖子都解释了它。

问题是:

  1. 请问有没有一种方法可以让我的 WebView 透明并打印 WebEngine 而没有背景渲染打印输出,就像它使用 css 的样式一样?如果有人能在这里帮助我,我将不胜感激,因为我在 JavaFX 方面只有 8 个月的经验。

  2. 仍然在打印时,还要求某些报表在(TableView)上以常规方式显示。我已经应用了一些在线帮助(关于如何打印节点),但我认为它没有为我提供解决问题的确切方法。请有人帮我写一些代码,这些代码可以帮助我打印一个 TableView,即使它溢出,我也可以打印整个数据,即使是那些像 Java Swing Table 一样不在视图中的数据?

4

0 回答 0