如何将数据合并到 XDP 文件并返回 PDF(通过 .NET)?

mbr*_*ion 5 .net serialization livecycle

我的团队有一个我们使用 Adob​​e LiveCycle 设计器创建的模板 (XDP)。

情况:

  • 作为更大升级的一部分,我们正在用此 LiveCycle 表单替换旧的 Acrobat 表单(XFDF 格式)

  • 当前的 Acrobat 表单使用基本数据动态填充并以 PDF 格式交付给用户(用户单击链接,并在其机器上打开一个预填充有基本人口统计详细信息的 PDF)

  • 当前流程类似于:用户点击,.NET 应用程序检索数据,.NET 应用程序从文件系统检索 PDF,.NET 应用程序将数据序列化为 XFDF 形式的模板,ASP.NET 应用程序将 HTTP 响应发送回 XFDF 中的用户格式,用户在 Adob​​e Reader 中查看 PDF

我们希望使用新的 XDP 格式保持一个大致类似的过程。

为了记录在案,我们不要有机会获得的LiveCycle服务,做这种类型的工作(如劳务)。也就是说,出于以下几个原因,我们希望在 .NET 中创建这种类型的序列化:我们的 LiveCycle 许可证有限,并且由于它们在企业中的位置,很难访问 LiveCycle 服务。

任何想法(甚至“停止这样做,你疯了”)都值得赞赏。

Dea*_*n J 3

嘿嘿,抱歉回复慢了,没看到。

创建 PDF。将其编码为 base64。

创建一个文本文件 foo.xdp:

<?xml version='1.0' encoding='UTF-8'?>
<?xfa generator='AdobeDesigner_V7.0' APIVersion='2.2.4333.0'?>
<xdp:xdp xmlns:xdp='http://ns.adobe.com/xdp/'>
    <xfa:datasets xmlns:xfa='http://www.xfa.org/schema/xfa-data/1.0/'>
        <xfa:data>
Run Code Online (Sandbox Code Playgroud)

在此处插入作为动态数据的 XML,与 PDF 中的动态字段相匹配。

        </xfa:data>
    </xfa:datasets>
    <pdf xmlns=\"http://ns.adobe.com/xdp/pdf/\"><document>
       <chunk>
Run Code Online (Sandbox Code Playgroud)

不要在标签后放置任何字符,插入 base64 编码的 PDF。

        </chunk>
    </document></pdf>
</xdp:xdp>
Run Code Online (Sandbox Code Playgroud)

而且,您瞧,您拥有了有效的 XDP。Adobe Reader 将接受此信息并显示包含您的值的 PDF。

在 Java 中,如果您有一个包含连接详细信息的属性,则以下代码可以使用 Livecycle 将 XDP 转换为 PDF,尽管在 C# 中您的情况可能有所不同。

        // Create a ServiceClientFactory object
        ServiceClientFactory myFactory = ServiceClientFactory
                .createInstance(connectionProperties);

        // Create a PDF Utility client
        PDFUtilityServiceClient pdfClient = new PDFUtilityServiceClient(myFactory);

        // Specify an XDP file to convert to a PDF document
        ByteArrayInputStream bais = new ByteArrayInputStream(xdp.getBytes("ASCII"));
        Document inDoc = new Document(bais);

        // Convert the XDP file to a PDF document
        Document pdf = pdfClient.convertXDPtoPDF(inDoc);

        // Return the PDF as an InputStream.
        return pdf.getInputStream();
Run Code Online (Sandbox Code Playgroud)