Hallo zusammen,
ich habe die letzten Tage versucht eine (Tree)TableView auf eine Seite zu drucken. Leider klappt es bei mir nicht so recht mit der Skalierung. Ich bekomme nie die ganze Tabelle auf eine Seite, obwohl sie nur sehr klein ist.
Habt ihr eine Idee, woran es liegen könnte? Mein Mini-Beispiel ist das folgende:
Der aktuelle Code führt zu dem Ergebnis in Testdruck.pdf. Es ist also viel zu groß skaliert. Leider bekomme ich manuell durch ausprobieren auch nicht auf die richtigen Werte.
Hat jemand ähnlich Erfahrungen mit dem Drucken in JavaFX oder eine Idee woran es liegen könnte? Vielen Dank schon mal für eure Hilfe!
ich habe die letzten Tage versucht eine (Tree)TableView auf eine Seite zu drucken. Leider klappt es bei mir nicht so recht mit der Skalierung. Ich bekomme nie die ganze Tabelle auf eine Seite, obwohl sie nur sehr klein ist.
Habt ihr eine Idee, woran es liegen könnte? Mein Mini-Beispiel ist das folgende:
Java:
public class Main extends Application
{
@Override
public void start(Stage primaryStage) throws Exception
{
BorderPane pane = FXMLLoader.load(getClass().getResource("sample.fxml"));
//Table
ObservableList<String> data = FXCollections.observableArrayList("Item1", "Item2");
TableColumn<String, String> tableCol1 = new TableColumn<>("Col1");
tableCol1.setCellValueFactory(param -> new SimpleStringProperty("Hello"));
TableColumn<String, String> tableCol2 = new TableColumn<>("Col2");
tableCol2.setCellValueFactory(param -> new SimpleStringProperty("World"));
TableView<String> table = new TableView<>(data);
table.getColumns().addAll(tableCol1, tableCol2);
table.getStyleClass().add("style.css");
pane.setCenter(table);
MenuBar menuBar = new MenuBar();
MenuItem menuItem = new MenuItem("Print");
menuItem.setOnAction(param -> doPrintAction(table));
menuBar.getMenus().add(new Menu("Menu", null, menuItem));
pane.setTop(menuBar);
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(pane, 300, 275));
primaryStage.show();
}
public static void main(String[] args)
{
launch(args);
}
private void doPrintAction(TableView tableView)
{
Printer printer = Printer.getDefaultPrinter();
PageLayout pageLayout = printer.createPageLayout(Paper.A4, PageOrientation.PORTRAIT, Printer.MarginType.HARDWARE_MINIMUM);
double scaleX = pageLayout.getPrintableWidth() / tableView.getBoundsInParent().getWidth();
double scaleY = pageLayout.getPrintableHeight() / tableView.getBoundsInParent().getHeight();
tableView.getTransforms().add(new Scale(scaleX, scaleY));
PrinterJob printerJob = PrinterJob.createPrinterJob();
if (printerJob != null && printerJob.showPrintDialog(tableView.getScene().getWindow()))
{
boolean success = printerJob.printPage(pageLayout,tableView);
if (success)
{
printerJob.endJob();
}
}
tableView.getTransforms().clear();
}
}
Der aktuelle Code führt zu dem Ergebnis in Testdruck.pdf. Es ist also viel zu groß skaliert. Leider bekomme ich manuell durch ausprobieren auch nicht auf die richtigen Werte.
Hat jemand ähnlich Erfahrungen mit dem Drucken in JavaFX oder eine Idee woran es liegen könnte? Vielen Dank schon mal für eure Hilfe!