JavaFX以编程方式设置目标路径,以直接将节点打印到pdf文件

 2023-02-16    352  

问题描述

我想使用” Microsoft打印到PDF”打印机将节点打印到PDF文件.假设打印机对象已经提取了,我具有完美工作的下一个功能.

public static void printToPDF(Printer printer, Node node) {

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

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

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

我在这里遇到的唯一问题是,一个对话框正在弹出,并要求找到一个保存PDF的目标路径.我一直在努力寻找解决方案以编程设置路径,但没有成功.有什么建议么?预先感谢您.

JavaFX以编程方式设置目标路径,以直接将节点打印到pdf文件

推荐答案

在进行了更多研究之后,我带来了一个丑陋的技巧.我从Printerjob访问了Jobimpl Private字段,然后从中删除了属性.因此,我插入了目标属性,显然它正在按要求工作.我知道这不是很好,但是…有点可行.如果您有更好的建议,请随时发布它们.

try {
            java.lang.reflect.Field field = job.getClass().getDeclaredField("jobImpl");
            field.setAccessible(true);
            PrinterJobImpl jobImpl = (PrinterJobImpl) field.get(job);
            field.setAccessible(false);

            field = jobImpl.getClass().getDeclaredField("printReqAttrSet");
            field.setAccessible(true);
            PrintRequestAttributeSet printReqAttrSet = (PrintRequestAttributeSet) field.get(jobImpl);
            field.setAccessible(false);

            printReqAttrSet.add(new Destination(new java.net.URI("file:/C:/deleteMe/wtv.pdf")));
        } catch (Exception e) {
            System.err.println(e);
        }

以上所述是小编给大家介绍的JavaFX以编程方式设置目标路径,以直接将节点打印到pdf文件,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/33959.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。