gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:58:08 25 4
gpt4 key购买 nike

我想使用“Microsoft Print to PDF”打印机将节点打印到 pdf 文件。假设已经提取了 Printer 对象,我就有了下一个运行良好的函数。

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 的目标路径。我一直在努力寻找以编程方式设置路径的解决方案,但没有成功。有什么建议么?先感谢您。

最佳答案

经过更多研究后,我提出了一个丑陋的黑客。我从 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);
}

关于pdf - JavaFX - 以编程方式设置目标路径以直接将节点打印到 pdf 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52684422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com