Я пытаюсь распечатать узел из своего приложения, но распечатывается только половина ширины узла

Код:

@FXML
private void print() {
    PrinterJob job = PrinterJob.createPrinterJob();
        if (job != null && job.showPrintDialog(stackPane.getScene().getWindow())){
            boolean success = job.printPage(stackPane);
            if (success) {
                job.endJob();
            }
        }
}

Узел: введите описание изображения здесь

Печатный узел: введите описание изображения здесь

0
Peter 14 Окт 2018 в 23:33

1 ответ

Лучший ответ

Вот моя функция узла печати, в которой уже реализовано масштабирование, я не помню, откуда я это взял, если найду, я свяжу сообщение

private void printImage(Node node) {
    Printer printer = Printer.getDefaultPrinter();
    PageLayout pageLayout = printer.getDefaultPageLayout();

    // Printable area
    double pWidth = pageLayout.getPrintableWidth();
    double pHeight = pageLayout.getPrintableHeight();

    // Node's (Image) dimensions
    double nWidth = node.getBoundsInParent().getWidth();
    double nHeight = node.getBoundsInParent().getHeight();

    // How much space is left? Or is the image to big?
    double widthLeft = pWidth - nWidth;
    double heightLeft = pHeight - nHeight;

    // scale the image to fit the page in width, height or both
    double scale;

    if (widthLeft < heightLeft) scale = pWidth / nWidth;
    else scale = pHeight / nHeight;

    // preserve ratio (both values are the same)
    node.getTransforms().add(new Scale(scale, scale));

    PrinterJob job = PrinterJob.createPrinterJob();
    if (job != null) {
        boolean success = job.printPage(node);
        if (success) {
            System.out.println("PRINTING FINISHED");
            job.endJob();
        }
    }
}
0
Matt 15 Окт 2018 в 13:25