JavaFX: печать узла на нескольких страницах
Я попытался связаться с новым API печати JavaFX, который был представлен в JDK 8.
Рассмотрим следующую тестовую программу:
import javafx.application.Application;
import javafx.print.PrinterJob;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ToolBar;
import javafx.scene.layout.BorderPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class SimplePrintingTest extends Application {
private PrinterJob job = PrinterJob.createPrinterJob();
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
BorderPane pane = new BorderPane();
final Rectangle rect = new Rectangle(0, 0, 1000, 1000);
pane.setCenter(rect);
final ToolBar value = new ToolBar();
final Button print = new Button("print");
final Button dialog = new Button("print dialog");
final Button pageLayout = new Button("page layout settings");
value.getItems().add(print);
value.getItems().add(dialog);
value.getItems().add(pageLayout);
print.setOnAction(event -> print(pane));
dialog.setOnAction(event -> showPrintDialog(primaryStage));
pageLayout.setOnAction(event -> showPageSetupDialog(primaryStage));
pane.setTop(value);
Scene scene = new Scene(pane, 1200, 1024, Color.GRAY);
primaryStage.setScene(scene);
primaryStage.show();
}
public void print(Node node) {
if (job != null) {
// -- ???
boolean success = job.printPage(node);
if (success) {
job.endJob();
job = PrinterJob.createPrinterJob();
}
}
}
public void showPageSetupDialog(Stage stage) {
if (job != null) {
job.showPageSetupDialog(stage);
}
}
public void showPrintDialog(Stage stage) {
if (job != null) {
job.showPrintDialog(stage);
}
}
}
Теперь у меня вопрос: как настроить или использовать задание принтера для печати содержимого сцены, которое (очевидно) слишком велико для одной страницы на нескольких страницах? Я пытался установить диапазоны страниц, как это
job.getJobSettings().setPageRanges(new PageRange(1, 5));
или это
job.getJobSettings().setPageRanges(new PageRange(1, 1), new PageRange(2, 2));
или измените диапазон страниц на вызовы printPage, как это
job.getJobSettings().setPageRanges(new PageRange(1, 1));
boolean success = job.printPage(node);
job.getJobSettings().setPageRanges(new PageRange(2, 2));
success &= job.printPage(node);
но ничего не работает. Всегда только левая половина содержимого видна в напечатанном документе каждый раз, когда я вызываю printPage. Для ясности: я не хочу уменьшать размер узла, который печатается, чтобы поместиться на одной странице, я хочу сохранить размер узла и полностью распечатать его на нескольких страницах. Это было возможно в Swing. Разве это невозможно в JavaFX?