将动态XFA转换为静态PDF

时间:2016-04-08 15:18:38

标签: java pdf itext converter xfa

要求:在移动设备上查看基于XFA的PDF 我尝试过的选项:

  • 由于Adobe移动阅读器不支持XFA,因此我将XFA展平为静态PDF。我试过但是动态XFA无法使用iText转换为静态PDF。
  • 后来我尝试使用'Adobe PDF'作为打印服务打印XFA表单。这可以在手动执行时工作,但不知何故通过代码执行时清除表单数据。

以下是打印任务的示例代码。为“Adobe PDF”打印服务安装了Adobe Acrobat DC。

import java.awt.print.PrinterJob;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;

...
private static void writePDF(long uid, Path path) throws Exception {
        final String inFile = path.toString();
        PDDocument pdfdoc = PDDocument.load(inFile);
        PrinterJob printJob = PrinterJob.getPrinterJob();

        printJob.setPageable(new PDPageable(pdfdoc));
        // printJob.setPrintable(new PDPageable(pdfdoc));
        printJob.setPrintService(getSystemPrinter("Adobe PDF"));

        printJob.setJobName(path.getFileName().toString());
        pdfdoc.silentPrint(printJob);
    }

private static PrintService getSystemPrinter(final String printerName) {
        PrintService desiredPrinter = null;
        for (PrintService printer : PrintServiceLookup.lookupPrintServices(null, null)) {
            if (printerName.equalsIgnoreCase(printer.getName())) {
                desiredPrinter = printer;
                break;
            }
        }
        return desiredPrinter;
    }

有人请建议一个解决方法来实现所需。谢谢!

1 个答案:

答案 0 :(得分:0)

我使用免费的PDF Creator打印机解决了该问题,该打印机配置为将文件存储到某个目录。然后,我创建了一个REST API以打印XFA PDF并将PDF 1.4返回给API客户端。它可以工作,但是工作缓慢。应该说结果PDF的质量很好。

还尝试通过Ghostscript将Adobe PDF和Microsoft Print转换为PDF打印机,但仅打印“请稍候...”页面。