gpt4 book ai didi

java - 打印文本时如何处理分页?

转载 作者:行者123 更新时间:2023-11-30 10:46:22 25 4
gpt4 key购买 nike

我正在尝试将一些可能很长的文本发送到打印机以进行……好吧,打印。这是一个演示我当前如何打印文本的最小示例:

@FXML
private void print() {
Text printText = new Text(textArea.getText());
TextFlow printArea = new TextFlow(printText);
printArea.setTextAlignment(TextAlignment.LEFT);
printArea.setMaxHeight(Region.USE_COMPUTED_SIZE);

PrinterJob printerJob = PrinterJob.createPrinterJob();

if (printerJob != null && printerJob.showPrintDialog(textArea.getScene().getWindow())) {

PageLayout pageLayout = printerJob.getJobSettings().getPageLayout();
printArea.setMaxWidth(pageLayout.getPrintableWidth());

if (printerJob.printPage(pageLayout, printArea)) {
printerJob.endJob();
// done printing
} else {
System.err.println("Printing failed!");
}

} else {
System.err.println("Unable to create printer job or printer dialog cancelled by user");
}
}

上面的代码按预期打印文本,除了无论打印多少文本,它总是只打印一页。在显示的打印对话框中,在“打印范围”部分下,我选择了“全部”选项。我曾尝试选择“页数”选项(由于某种原因默认为 1 到 9999——这有点奇怪,因为文本最多应有两页长),但打印超过单页。我也尝试过在 JobSettings 对象上手动设置页面范围,但这似乎也没有做任何事情。

enter image description here

如何使用 PrinterJob 及其相关类将一段较长的文本正确地打印在多个页面上?

最佳答案

据我所知,您需要向 PrinterJob 提供多个节点(在您的情况下为 printAreas),并事先在您的代码中将它们分开(不幸的是......)将您的 TextFlow 放在样式化的场景中将为您提供大小,您可以根据 PageLayout.getPrintableWidth 和 getPrintableHeight 将其划分,前提是用户可以在打印设置对话框中更改它们。

job.getJobSettings().setPageRanges(new PageRange(1, numPages));

告诉作业您可以提供多少页。通常在显示打印对话框之前设置此项,以便用户可以选择要打印的页数、范围等。

显示对话框后,JobSettings 将使用用户选择的所选 PageRanges 进行更新,然后您可以循环并单独打印。

if (job.showPrintDialog(null)) {
JobSettings js = job.getJobSettings();
for (PageRange pr : js.getPageRanges()) {
for (int p = pr.getStartPage(); p <= pr.getEndPage(); p++) {
boolean ok = job.printPage(...code to get your node for the page...);
...take action on success/failure etc.
}
}
}

关于java - 打印文本时如何处理分页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36559924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com