【问题标题】:Javafx - Print a node with a DPI larger than 72Javafx - 打印 DPI 大于 72 的节点
【发布时间】:2017-06-20 12:23:57
【问题描述】:

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

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.");
    }
}

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

谢谢您,等待您的回复。

【问题讨论】:

    标签: java javafx printing resolution dpi


    【解决方案1】:

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

    希望这将帮助其他与我有相同问题的人。 请找到附上的下一个代码。

    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.");
        }
    }
    

    检查空值检查。

    干杯!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-02
      • 2020-04-24
      • 1970-01-01
      • 1970-01-01
      • 2015-03-17
      • 1970-01-01
      相关资源
      最近更新 更多