如何在JavaFX中打印窗格?

问题描述 投票:0回答:1

如何打印我的Pane里面有Label?我想用我的POS打印机55mm打印它。我有这种代码要打印,但它没有打印给我:

void print2(Node node){
    PrinterJob job = PrinterJob.createPrinterJob();
    Printer printer = Printer.getDefaultPrinter().getDefaultPrinter();
    PageLayout pageLayout = printer.createPageLayout(Paper.A6, PageOrientation.PORTRAIT, Printer.MarginType.DEFAULT);
    JobSettings jobSettings = job.getJobSettings();
    jobSettings.setPageLayout(pageLayout);
    boolean printed = job.printPage(node);
    if (printed) {
        job.endJob();
    }
}
java javafx javafx-8 javafx-2
1个回答
1
投票

代码看起来不错。我建议您查看以下几点:

  • 我遇到了页边距问题。如果我需要对整个打印区域进行绝对控制,我将打印机页边距全部设置为0,并将页面布局完全定义为打印机格式。
  • 我会尝试定义适合POS 55m打印机的页面布局/纸张尺寸。也许Paper.A6给你带来麻烦,因为它是“超大”的。我在使用JavaFX和打印时遇到过这种情况,但是使用Delphi中的Windows GDI打印。由于驱动程序层相同,因此可能存在类似问题。
  • 这是一个很好的起点,定义布局节点大小,记住打印机点,即72ppi。简单地将像素大小视为打印机点大小。

事实上,我对这样一个稍微简单的代码有很好的体验(对不起,它是DIN A5纸张尺寸示例,但有效):

PrinterJob printerJob = PrinterJob.createPrinterJob();
if (printerJob != null) {
  PageLayout pageLayout = printerJob.getPrinter().createPageLayout(Paper.A5, PageOrientation.LANDSCAPE, 0, 0, 0, 0);

  boolean success = printerJob.printPage(pageLayout, root);
  if (success) {
    printerJob.endJob();
  }
}

希望有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.