私はプロジェクト、収益管理システムに参加しています。何らかの理由で、いくつかのレポートを 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>");
…しかし問題は、印刷しようとすると、紙に暗い背景の長方形の画像が印刷され、紙の黒い部分がレポートを含む 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 に達していないため、プリントアウトの画像リンクを提供できませんでしたが、とにかく投稿で説明されています。
質問は:
WebView を透明にし、WebEngine を背景なしで印刷して、css でスタイルを設定した方法で印刷する方法はありますか? 私は JavaFX の経験が 8 か月しかないので、ここで私を助けてくれる人がいれば幸いです。
印刷中ですが、一部のレポートは従来の方法 (TableView) で表示することも必要です。オンラインで入手したヘルプ (ノードを印刷する方法) を適用しましたが、問題の正確な解決策が得られなかったと思います。Java Swing Table のように、フローがオーバーフローした場合でも、表示されていないデータでもデータ全体を印刷できる TableView を印刷するのに役立つコードを教えてください。