JavaFX 8 WebEngine打印方法无法在横向打印

aut*_*red 0 printing javafx javafx-8 javafx-webengine

我正在尝试在横向A4纸上的JavaFX WebView(JavaFX 8_25)中打印HTML页面,但它以纵向打印,字体很小

printer.createPageLayout(Paper.A4, PageOrientation.LANDSCAPE, Printer.MarginType.DEFAULT);
PrinterJob job = PrinterJob.createPrinterJob(printer);
if (job != null) {
    System.out.println(job.getJobSettings().getPageLayout());
    webEngine.print(job);
    job.endJob();
}
Run Code Online (Sandbox Code Playgroud)

System.out显示纵向方向

纸张=纸张:A4(210 x 297毫米)尺寸= 594.90087890625x841.3598022460938 MM Orient = PORTRAIT leftMargin = 54.0 rightMargin = 54.0 topMargin = 54.0 bottomMargin = 54.0

我发现在横向模式下打印HTML页面的唯一方法是在打印之前调用打印作业的showPageSetupDialog方法.

printer.createPageLayout(Paper.A4, PageOrientation.LANDSCAPE, Printer.MarginType.DEFAULT);
PrinterJob job = PrinterJob.createPrinterJob(printer);
if (job != null) {
    if(job.showPageSetupDialog(null)) {
        System.out.println(job.getJobSettings().getPageLayout());
        webEngine.print(job);
        job.endJob();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我在"页面设置"对话框中选择"横向",则会显示System.out

纸张=纸张:A4尺寸= 210.0x297.0 MM东方= LANDSCAPE leftMargin = 54.0 rightMargin = 53.11810302734375 topMargin = 51.995269775390625 bottomMargin = 54.0

我对话的问题在于我每次都必须设置A4和风景.

我有3个问题: -

  1. 为什么webEngine.print没有使用我传入打印机的PageLayout?

  2. 是否可以在webEngine.print(作业)上获得横向方向; 无需通过页面设置对话框设置它?

  3. 如果我必须使用页面设置对话框,JavaFX有什么方法可以记住我为下一个打印作业(即A4和横向)的页面设置设置的内容?

打字时我也试过了

print{@page {size: landscape}}
Run Code Online (Sandbox Code Playgroud)

在HTML页面上的样式标记内,但也不起作用.

谢谢

Ita*_*iha 6

您需要设置PageLayoutJobSettings您的PrinterJob使用方法job.getJobSettings().setPageLayout(PageLayout)

试试这段代码:

PageLayout pageLayout = printer.createPageLayout(Paper.A4, 
                                PageOrientation.LANDSCAPE, Printer.MarginType.DEFAULT);
PrinterJob job = PrinterJob.createPrinterJob(printer);
job.getJobSettings().setPageLayout(pageLayout);
if (job != null) {
    System.out.println(job.getJobSettings().getPageLayout());
    webEngine.print(job);
    job.endJob();
}
Run Code Online (Sandbox Code Playgroud)

  • `printer.createPageLayout()`创建一个`pageLayout`。它没有设置。 (2认同)