JavaFX WebView背景透明度和WebEngine打印问题

时间:2015-12-17 15:15:18

标签: java printing javafx webview webengine

我正在进行一个项目,一个收入管理系统,由于某些原因,它需要在WebView上显示一些报告并打印,而设计概念要求WebView变得透明。我能够在这里解决WebView透明问题:Transparent background in the WebView in JavaFX对“ 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>");

结果 Transparent WebView with content loaded onto it

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

结果: White background WebView with blac text content loaded into it

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

问题是:

  1. 请问有没有办法让我的WebView透明并打印WebEngine,没有背景渲染打印输出就像用css设置样式一样?如果有人能帮助我,我会很感激,因为我在JavaFX上只有8个月的经验。

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

    < / LI>

0 个答案:

没有答案