通过FileChooser保存pdf格式会提示在java中出现第二个对话框
我设置了一个保存对话框,可以将文件保存为PDF和PNG格式。另存为PNG没有任何问题,但另存为PDF将在保存PDF文件之前提示另一个保存对话框。下面是我的代码:
fc.setFilter(new ExtensionFilter("PDF Files", "*.pdf"), new extensionFilter("PNG Files", "*.png"));
File file = fc.showSaveDialog(null);
String fileName = file.getCanonicalPath();
PdfPrinter printer = new PdfPrinter();
if (fileName.endsWith(".pdf")) {
printer.PrintPDF(canvasForPrint, fileName);
} else {
//save as PNG
}
然后PrintPDF()方法:
public void PrintPDF(Node node, String name) throws PdfPrintException {
Printer thePdfPrinter = null;
if (printer.getName().equals("Microsoft Print to PDF")) {
thePdfPrinter = printer;
}
PrinterJob job = null;
job = PrinterJob.createPrinterJob(thePdfPrinter);
try {
job.getJobSettings().setPageLayout(layout);
if (name.isEmpty()) {
job.getJobSettings().setJobName("PlaneXYChart");
} else {
job.getJobSettings().setJobName(name);
}
} finally {
if (job != null) {
job.endJob();
}
为了简洁起见,代码被最小化。我不明白为什么参数不起作用,它再次要求第二次保存pdf文件。如果有人有同样的问题,请分享你的解决方案
更新:在调试过程中,第二个对话框在^{
# 1 楼答案
经过一番研究,我得出结论,没有一种通用的方法来实现这一点。它似乎是特定于打印机的
有人发布here的丑陋方式将适用于您的虚拟打印机(“Microsoft打印到PDF”)。他正在使用java反射来实现它,正如他所说,这似乎“不好,但可行”
这个SuperUser问题列出了一些免费的(free as in free speech and as in free beer)虚拟打印机。将它们与JavaFX结合使用可以帮助您解决问题
(如果你想购买一个非常好的解决方案,用于以编程方式制作PDF,但是它是封闭源代码的,你可以先看一下Aspose,然后再看定价。:-)