Ich versuche, potenziell langen Text an einen Drucker zu senden, um ... nun, Drucken. Hier ist ein minimales Beispiel, das zeigt, wie ich zur Zeit Text am Druck:Wie handhabe ich Paginierung beim Drucken von Text?
@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");
}
}
Der obige Code druckt den Text wie erwartet, mit der Ausnahme, dass, egal wie viel Text gedruckt wird, ist es immer druckt nur eine einzelne Seite. Im Druckdialog, der angezeigt wird, habe ich unter "Druckbereich" die Option "Alle" ausgewählt. Ich habe versucht, die Option "Seiten" zu wählen (die aus irgendeinem Grund von 1 bis 9999 ausfällt - das ist etwas merkwürdig, da der Text höchstens zwei Seiten lang sein sollte), aber hatte keinen Erfolg beim Drucken von mehr als a einzelne Seite. Ich habe auch versucht, den Seitenbereich auf dem Objekt JobSettings
manuell einzustellen, aber das schien auch nichts zu tun.
Wie kann ich die PrinterJob
und die zugehörigen Klassen ein langes Stück Text erhalten ordnungsgemäß auf mehreren Seiten drucken zu?
Anstatt mehrere Knoten des Druckens, I abgelaufenen in Pixel, die die Höhe des Druckbereichs der Berechnung auf, und unter Verwendung des 'setTranslateY()' Verfahren auf dem übergeordneten Knoten, um „die Seite zu verschieben up“ diesen Betrag vor dem Aufruf 'printPage()' erneut auf demselben Knoten. Nicht sicher, ob das der "richtige" Weg ist, Dinge zu tun, aber ich fand es am besten für meinen Fall. Danke für den Tipp! – Cypher
Eine interessante Herangehensweise, bei der ich denke ... es könnte ein besserer Weg sein, mit Tabellen umzugehen als mein derzeitiger Ansatz. Vielen Dank! – Geoff
@Cypher danke! Denkst du, du könntest ein vollständiges Codebeispiel bereitstellen? – cashmash