有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

通过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) 个答案

  1. # 1 楼答案

    经过一番研究,我得出结论,没有一种通用的方法来实现这一点。它似乎是特定于打印机的

    有人发布here的丑陋方式将适用于您的虚拟打印机(“Microsoft打印到PDF”)。他正在使用java反射来实现它,正如他所说,这似乎“不好,但可行”

    这个SuperUser问题列出了一些免费的(free as in free speech and as in free beer)虚拟打印机。将它们与JavaFX结合使用可以帮助您解决问题

    (如果你想购买一个非常好的解决方案,用于以编程方式制作PDF,但是它是封闭源代码的,你可以先看一下Aspose,然后再看定价。:-)