Java 将动态XFA转换为静态PDF

Java 将动态XFA转换为静态PDF,java,pdf,itext,converter,xfa,Java,Pdf,Itext,Converter,Xfa,要求:在移动设备上查看基于XFA的PDF。 我尝试过的选项: 由于Adobe mobile reader不支持XFA,因此我将XFA展平为静态PDF。我尝试过,但是动态XFA无法使用iText转换为静态PDF 后来我尝试使用“AdobePDF”作为打印服务打印XFA表单。这在手动执行时正常工作,但在通过代码执行时以某种方式清除表单数据 下面是打印任务的示例代码。Adobe Acrobat DC是为“Adobe PDF”打印服务安装的 import java.awt.print.Printer

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

  • 由于Adobe mobile reader不支持XFA,因此我将XFA展平为静态PDF。我尝试过,但是动态XFA无法使用iText转换为静态PDF
  • 后来我尝试使用“AdobePDF”作为打印服务打印XFA表单。这在手动执行时正常工作,但在通过代码执行时以某种方式清除表单数据
下面是打印任务的示例代码。Adobe Acrobat DC是为“Adobe PDF”打印服务安装的

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;
    }

请有人提出一个解决方案,以达到预期的效果。谢谢

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


还尝试通过Ghostscript使用Adobe PDF和Microsoft Print to PDF打印机,但它只打印“请稍候…”页面。

不允许在服务器环境中使用Adobe DC(阅读EULA)。iText可以使用XFAWorker展平XFA表单。你拿到试用许可证了吗?XFAWorker和Adobe LC可能是您唯一的选择,而XFAWorker是最便宜的。或者,在这种情况下,您可以做Adobe希望您做的事情……获取LiveCycle Forms$Server……我试过了,但对于动态XFA,这似乎不起作用。另一个链接需要额外的依赖项。我没有添加额外专有软件的规定。请建议使用现有的工具集。在这种情况下,请不要使用XFA表单。请分享详细信息。这是我想要的perform@VivekSharma-最好不要花时间使用PDF打印机,最后尝试使用pdfXFA的iText,效果不错,但有些文档的布局有问题。指示我们的用户使用AdobeReader进行扁平化,虽然很愚蠢,但很有效。