如何仅打印文本?

我正在尝试将一些文本发送到打印机。 我只需要打印的文本,包裹在页边距并在必要时流向另一页。

这是我现在正在做的最小例子:

@FXML private void print() { TextArea printArea = new TextArea(textArea.getText()); printArea.setWrapText(true); printArea.getChildrenUnmodifiable().forEach(node -> node.setStyle("-fx-background-color: transparent")); printArea.setStyle("-fx-background-color: transparent"); PrinterJob printerJob = PrinterJob.createPrinterJob(); if (printerJob != null && printerJob.showPrintDialog(textArea.getScene().getWindow())) { if (printerJob.printPage(printArea)) { printerJob.endJob(); // done printing } else { // failed to print } } else { // failed to get printer job or failed to show print dialog } } 

最终打印的是灰色背景,似乎是控件本身,以及滚动条。 我接近这个错误的方式了吗? 我觉得我通过调整和打印控件而不是仅发送要打印的文本来对抗API。

下面的示例图像来自我的手机相机,因此白纸看起来有点浅灰色,但您仍然可以看到控件和滚动条的灰色背景。

打印结果的示例图像

而不是TextArea,打印TextFlow :

 private void print() { TextFlow printArea = new TextFlow(new Text(textArea.getText())); PrinterJob printerJob = PrinterJob.createPrinterJob(); if (printerJob != null && printerJob.showPrintDialog(textArea.getScene().getWindow())) { PageLayout pageLayout = printerJob.getJobSettings().getPageLayout(); printArea.setMaxWidth(pageLayout.getPrintableWidth()); if (printerJob.printPage(printArea)) { printerJob.endJob(); // done printing } else { System.out.println("Failed to print"); } } else { System.out.println("Canceled"); } } 

请注意,在显示打印对话框后,需要使用PrinterJob的页面布局设置TextFlow的maxWidth。