3

私はプロジェクト、収益管理システムに参加しています。何らかの理由で、いくつかのレポートを WebView に表示して印刷する必要がありますが、デザイン コンセプトでは WebView を透明にする必要があります。ここで WebView の透過的な問題を解決することができました: JavaFXクレジットのWebViewの透明な背景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>");

コンテンツがロードされた透明な 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) で表示することも必要です。オンラインで入手したヘルプ (ノードを印刷する方法) を適用しましたが、問題の正確な解決策が得られなかったと思います。Java Swing Table のように、フローがオーバーフローした場合でも、表示されていないデータでもデータ全体を印刷できる TableView を印刷するのに役立つコードを教えてください。

4

0 に答える 0