我正在尝试将一些文本发送到打印机。我只需要打印的文本,包裹在页面边距并在必要时流向另一个页面。
以下是我现在正在做的最简单的例子:
@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。
下面的示例图片来自我的手机相机,因此白纸最终看起来有点浅灰色,但您仍然可以看到来自控件和滚动条的灰色背景。
答案 0 :(得分:3)
而不是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。