2016-04-21 132 views
0

我想以橫向格式將我的tableView打印到A4上。 我也希望tableView縮放到這個A4頁面。使用PrinterJob打印JavaFX tableview

我成功地做到這一點:

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?

回答

0

檢查這個答案,這可能有助於 hardware limitation issue

從的Javadoc:

,需要知道什麼是空白的值是法律應該首先獲得使用HARDWARE_MINIMUM利潤率頁面佈局客戶端。

如果爲指定的打印機不能支持佈局,它會通過調整返回佈局支持的配置

編輯:我有同樣的問題,this Solution 爲我工作的偉大

Result我有 。