5

JavaFX TableView の内容を印刷する方法を探しています。JavaFX にはまだ印刷機能がないことを理解しています (なんと残念なことでしょう)。たとえば、WebView のスクリーンショットを撮り、それを画像として印刷する方法に関する情報をいくつか見つけました。

テーブルビューでそのようなことをすることは可能ですか? 多くのデータを含むテーブルで複数のページを処理する方法。

ご協力いただきありがとうございます

4

4 に答える 4

3

必要な領域を切り取る

Rectangle rect = new Rectangle(0,0,dataDisplayAreaAnchorPane.getWidth(),dataDisplayAreaAnchorPane.getHeight());
            dataDisplayAreaAnchorPane.setClip(rect);
            WritableImage writableImage;
            writableImage = new WritableImage((int) dataDisplayAreaAnchorPane.getPrefWidth(),
                    (int) dataDisplayAreaAnchorPane.getPrefHeight());
            dataDisplayAreaAnchorPane.snapshot(null, writableImage);        
            eventDispatcher.printLandscape(writableImage);

**------------------------------------**

A4用紙サイズに合わせてリサイズして印刷

public void print(WritableImage writableImage, Stage primaryStage) {
            ImageView imageView =new ImageView(writableImage);
            Printer printer = Printer.getDefaultPrinter();
            PageLayout pageLayout = printer.createPageLayout(Paper.A4, PageOrientation.LANDSCAPE, Printer.MarginType.DEFAULT);
            double scaleX = pageLayout.getPrintableWidth() / imageView.getBoundsInParent().getWidth();
            double scaleY = pageLayout.getPrintableHeight() / imageView.getBoundsInParent().getHeight();
            imageView.getTransforms().add(new Scale(scaleX, scaleY));

            PrinterJob job = PrinterJob.createPrinterJob();
            if (job != null) {
                boolean successPrintDialog = job.showPrintDialog(primaryStage.getOwner());
                if(successPrintDialog){
                    boolean success = job.printPage(pageLayout,imageView);
                    if (success) {
                        job.endJob();
                    }
                }
            }
        }
于 2015-04-14T07:02:08.120 に答える
0

JavaFX にはまだ印刷機能がないことを理解しています (なんと残念なことでしょう)。

Java 8 には、JavaFX の印刷機能が含まれています。 https://jdk8.java.net/download.html

Java 8 印刷機能はRT-17383 印刷の下で実装され、@Asimaruk の回答で説明されているように機能します。

たとえば、WebView のスクリーンショットを撮り、それを画像として印刷する方法に関する情報をいくつか見つけました。テーブルビューでそのようなことをすることは可能ですか?

Java 8 を使用できない場合は、これを行うことができます。

JavaFX スナップショット API を使用し、SwingFXUtils を使用して JavaFX イメージを BufferedImage に変換し、Swing 印刷メソッドを使用して BufferedImage を印刷します。

多くのデータを含むテーブルで複数のページを処理する方法。

Java 8 を使用できない場合は、各ページに上記のスナップショット メソッドを使用し、各スナップショット間でテーブル データをスクロールします。


RT-17665も参照してください。一部の UI コントロールが、一部のコントロール (TableView など) に追加された直接印刷 API の要求であるコンテンツの印刷をサポートするようにします。 . この印刷用の便利な API は現在実装されていませんが、関連する問題に投票またはコメントして、機能への関心を示すことができます。

于 2013-05-24T16:49:55.020 に答える