使用PrinterJob打印JavaFX tableview

时间:2016-04-21 21:03:47

标签: javafx printing

我想以横向格式将tableView打印到A4上。 我还希望tableView将itselfe扩展到这个A4页面。

我设法做到了:

Printer printer = Printer.getDefaultPrinter();
PrinterJob printerJob = PrinterJob.createPrinterJob();


//set layout to A4 and landscape
PageLayout pageLayout = printer.createPageLayout(Paper.A4,
        PageOrientation.LANDSCAPE, Printer.MarginType.DEFAULT);

printerJob.getJobSettings().setPageLayout(pageLayout);

System.out.println(pageLayout.getPrintableWidth());
System.out.println(pageLayout.getPrintableHeight());

final double scaleX = pageLayout.getPrintableWidth() / _menuPlanTable.getBoundsInParent().getWidth();
final double scaleY = pageLayout.getPrintableHeight() / _menuPlanTable.getBoundsInParent().getHeight();
_menuPlanTable.getTransforms().add(new Scale(scaleX, scaleY));

if(printerJob.showPrintDialog(_controlStage) && printerJob.printPage(_menuPlanTable)) {
        _menuPlanTable.getTransforms().remove(getTransforms().size());
        printerJob.endJob();
}
else{
        _menuPlanTable.getTransforms().remove(getTransforms().size());
}

结果如下: IMAGE

你可以清楚地看到我的桌子被切断,右边界比左边大。
任何tipps?

1 个答案:

答案 0 :(得分:0)

检查这个答案,这可能有所帮助 hardware limitation issue

来自Javadocs:

  

需要知道哪些保证金值合法的客户应首先使用HARDWARE_MINIMUM保证金获取PageLayout。

     

如果打印机无法支持指定的布局,则会将返回的布局调整为支持的配置

编辑:我遇到了同样的问题this Solution 为我工作很好

Result我得到了。