【问题标题】:Printing a javafx WebEngine's content on multiple pages在多个页面上打印 javafx WebEngine 的内容
【发布时间】:2021-07-07 02:14:04
【问题描述】:

我想打印一个 WebEngine 的内容:

PrinterJob job = PrinterJob.createPrinterJob();
job.getJobSettings().setJobName("Print WebEngine");
job.getJobSettings().setPageLayout(job.getPrinter().createPageLayout(Paper.A4, PageOrientation.PORTRAIT, MarginType.DEFAULT));

webEngine.print(job);

job.endJob();

不幸的是,我的打印机只打印了一页,尽管加载了更多内容,应该在其他页面上打印。此外,打印在单页上的内容在结果上会失真。

有谁知道我如何在许多页面上打印 WebEngine 的全部内容,这样它就不会被缩放或类似的东西?

【问题讨论】:

标签: java javafx javafx-webengine


【解决方案1】:

我可以使用您拥有的代码打印多页。第一次打印将打印 Google 的主页。那是一页。在搜索栏中输入 test 并按回车键。这应该返回两个可打印的页面。

//https://docs.oracle.com/javase/8/javafx/embedded-browser-tutorial/printing.htm
//http://tutorials.jenkov.com/javafx/webview.html



import javafx.application.Application;
import javafx.concurrent.Worker;
import javafx.print.PrinterJob;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

public class App extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("JavaFX WebView Example");

        WebView webView = new WebView();
        WebEngine webEngine = webView.getEngine();        
        webEngine.getLoadWorker().stateProperty().addListener((observable, oldValue, newValue) -> {
            System.out.println("oldValue: " + oldValue);
            System.out.println("newValue: " + newValue);
            
            if (newValue == Worker.State.SUCCEEDED) {
                PrinterJob printerJob = PrinterJob.createPrinterJob();
                if(printerJob != null)
                {
                    printerJob.showPrintDialog(primaryStage);
                    webEngine.print(printerJob);
                    printerJob.endJob();
                }                
            }
        });
        
        webEngine.load("http://google.com");
        

        VBox vBox = new VBox(webView);
        Scene scene = new Scene(vBox, 960, 600);

        primaryStage.setScene(scene);
        primaryStage.show();

    }
}

【讨论】:

  • 谢谢!那行得通。我忘记将 PrinterJob 写入 StatusListener。
猜你喜欢
  • 2015-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 1970-01-01
  • 2013-05-20
  • 1970-01-01
相关资源
最近更新 更多