Javafx - 打印 DPI 大于 72 的节点

标签 java javafx printing resolution dpi

我正在尝试用非常基本的东西打印一个节点

private void print(Node node) {
    System.out.println("Creating a printer job...");

    PrinterJob job = PrinterJob.createPrinterJob();
    if (job != null && job.showPrintDialog(node.getScene().getWindow()) ) {
        System.out.println(job.jobStatusProperty().asString());

        PageLayout pageLayout = Printer.getDefaultPrinter().createPageLayout(Paper.A4, PageOrientation.PORTRAIT, Printer.MarginType.HARDWARE_MINIMUM);

        boolean printed = job.printPage(pageLayout, node);
        if (printed) {
            System.out.println("Printed.");
            job.endJob();
        } else {
            System.out.println("Printing failed.");
        }
    } else {
        System.out.println("Could not create a printer job.");
    }
}

问题是我被 DPI 分辨率设置为 72。这是一种在其他 DPI 分辨率中更改它的方法(无需将尺寸与 72.0/wanted_dpi_resolution 相乘)吗? (我的屏幕也是 96 DPI)我非常希望能够以至少 96 DPI 的 DPI 值进行打印。

谢谢您,等待您的回复。

最佳答案

嗯,简短的回答是,这是不可能的。

希望这能帮助其他和我遇到同样问题的人。 请查找附上的下一个代码。

public static void printReport(ArrayList<MyPane> nodeList) {
    System.out.println("Creating a printer job...");

    String printerName = CachedComponents.getPrinterName();

    Printer printer = null;
    for (Printer p : Printer.getAllPrinters()) {
        if (p.getName().equals(printerName)) {
            printer = p;
            break;
        }
    }

    PrinterJob job = PrinterJob.createPrinterJob(printer);
    if (job != null) {
        job.getJobSettings().setPrintQuality(PrintQuality.HIGH);

        PageLayout pageLayout = printer.createPageLayout(Paper.A4, PageOrientation.PORTRAIT,
                Printer.MarginType.HARDWARE_MINIMUM);

        boolean fail = false;
        for (int i=0; i<nodeList.size(); i++) {
            MyPane node = nodeList.get(i);

            double scaleX = pageLayout.getPrintableWidth() / node.getBoundsInParent().getWidth();
            node.getTransforms().add(new Scale(scaleX, scaleX));

            boolean printed = job.printPage(pageLayout, node);

            if (printed) {
                System.out.println("Printed.");
            } else {
                System.out.println("Printing failed.");
                fail = true;
            }
        }
        if (!fail) {
            job.endJob();
        }
    } else {
        System.out.println("Could not create a printer job.");
    }
}

检查空值检查。

干杯!

关于Javafx - 打印 DPI 大于 72 的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44652988/

相关文章:

JavaFX Node.lookup() 仅对使用 FXMLLoader 加载的 Parent 中的某些元素返回 null

c# - 如何通过代码设置 Crystal 报表的准确长度?

java - 为什么 PriorityQueue.toString 返回错误的元素顺序?

javascript - 如何动态地将CSS媒体类型添加到页面

java - JVM 在 hadoop reducer 上崩溃

java - 如何强制在 Maven 测试目标期间运行的 testNG 测试超时?

java - 如何获取完全加载页面的 html(使用 javascript)作为 java 中的输入?

java - 为什么 For 循环不终止?

在 fragment 中使用 Butterknife 时出现 java.lang.NullPointerException

java - Maven javafx 插件 : generate MANIFEST