为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 JavaFX 中打印窗格?

如何在 JavaFX 中打印窗格?

蓝山帝景 2022-06-30 11:47:46
我怎样才能打印我Pane的Label里面有它?我想用我的 POS 打印机 55 毫米打印它。我有这种代码要打印,但它什么也没给我打印出来: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();    }}
查看完整描述

1 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

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

  • 我遇到了页边距问题。如果我需要对整个打印区域进行绝对控制,我将打印机边距全部设置为 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();

  }

}


查看完整回答
反对 回复 2022-06-30
  • 1 回答
  • 0 关注
  • 149 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号