如何在 JavaFX 中打印窗格?

How to print Pane in JavaFX?

如何打印里面有 LabelPane?我想使用我的 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();
    }
}

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

  • 我 运行 遇到页边距问题。如果我需要对整个打印区域进行绝对控制,我将打印机边距全部设置为 0,并根据打印机格式精确定义页面布局。
  • 我会尝试定义适合 POS 55m 打印机的页面 layout/paper 大小。也许 Paper.A6 会给你带来麻烦,因为它是 "oversized"。我不是在使用 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();
  }
}

希望对您有所帮助!