正在组合多个XDP片段

您可以将多个XDP片段组合到一个XDP文档中。 例如,考虑XDP片段,其中每个XDP文件包含一个或多个用于创建健康表单的子表单。 下图显示了大纲视图(表示​组合多个XDP片段​快速开始中使用的tuc018_template_frued.xdp文件):

am_am_forma

下图显示了患者部分(表示​组合多个XDP片段​快速开始中使用的tuc018_contact.xdp文件):

am_am_formb

下图显示了患者健康部分(表示​组合多个XDP片段​快速开始中使用的tuc018_patient.xdp文件):

am_am_formc

此片段包含名为​subPatientPhysical​和​subPatientHealth​的两个子表单。 这两个子表单都在传递给Assembler服务的DDX文档中引用。 使用Assembler服务,您可以将所有这些XDP片段合并为一个XDP文档,如下图所示。

am_am_formd

以下DDX文档将多个XDP片段组合为XDP文档。

 <?xml version="1.0" encoding="UTF-8"?>
 <DDX xmlns="https://ns.adobe.com/DDX/1.0/">
         <XDP result="tuc018result.xdp">
            <XDP source="tuc018_template_flowed.xdp">
             <XDPContent insertionPoint="ddx_fragment" source="tuc018_contact.xdp" fragment="subPatientContact" required="false"/>
               <XDPContent insertionPoint="ddx_fragment" source="tuc018_patient.xdp" fragment="subPatientPhysical" required="false"/>
               <XDPContent insertionPoint="ddx_fragment" source="tuc018_patient.xdp" fragment="subPatientHealth" required="false"/>
            </XDP>
         </XDP>
 </DDX>

DDX文档包含一个XDP result标签,它指定结果的名称。 在这种情况下,该值为tuc018result.xdp。 该值在Assembler服务返回结果后用于检索XDP文档的应用程序逻辑中引用。 例如,请考虑以下用于检索已装配的XDP文档的Java应用程序逻辑(注意,该值被加粗):

 //Iterate through the map object to retrieve the result XDP document
 for (Iterator i = allDocs.entrySet().iterator(); i.hasNext();) {
     // Retrieve the Map object’s value
     Map.Entry e = (Map.Entry)i.next();
     //Get the key name as specified in the
     //DDX document
     String keyName = (String)e.getKey();
     if (keyName.equalsIgnoreCase("tuc018result.xdp"))
                 {
         Object o = e.getValue();
         outDoc = (Document)o;
         //Save the result PDF file
         File myOutFile = new File("C:\\AssemblerResultXDP.xdp");
         outDoc.copyToFile(myOutFile);
     }
 }

XDP source标签指定表示完整XDP文档的XDP文件,该XDP容器可用作添加XDP片段的,或作为按顺序附加到一起的多个文档之一。 在这种情况下,XDP文档仅用作容器(在​组合多个XDP片段​中显示的第一个插图)。 即,其他XDP文件将放在XDP容器中。

对于每个子表单,可以添加XDPContent元素(此元素为可选元素)。 在上例中,请注意有三个子表单:subPatientContactsubPatientPhysicalsubPatientHealthsubPatientPhysical子表单和subPatientHealth子表单都位于同一个XDP文件tuc018_patient.xdp中。 片段元素指定子表单的名称,如设计器中所定义。

注意

有关Assembler服务的详细信息,请参阅AEM Forms的服务参考

注意

有关DDX文档的详细信息,请参阅Assembler Service和DDX Reference

步骤的摘要

要组合多个XDP片段,请执行以下任务:

  1. 包括项目文件。
  2. 创建PDF Assembler客户端。
  3. 引用现有DDX文档。
  4. 引用XDP文档。
  5. 设置运行时选项。
  6. 组合多个XDP文档。
  7. 检索装配的XDP文档。

包括项目文件

在开发项目中包含必要的文件。 如果要使用Java创建客户端应用程序,请包含必要的JAR文件。 如果您使用Web服务,请确保包含代理文件。

必须将以下JAR文件添加到项目的类路径中:

  • adobe-livecycle-client.jar
  • adobe-usermanager-client.jar
  • adobe-assembler-client.jar
  • adobe-utilities.jar(在JBoss上部署AEM Forms时为必需)
  • jbossall-client.jar(如果在JBoss上部署了AEM Forms,则为必需)

创建PDF Assembler客户端

在以编程方式执行Assembler操作之前,请先创建一个Assembler服务客户端。

引用现有DDX文档

必须引用DDX文档来组合多个XDP文档。 此DDX文档必须包含XDP resultXDP sourceXDPContent元素。

引用XDP文档

要组合多个XDP文档,请参考用于组合结果XDP文档的所有XDP文件。 确保在fragment属性中指定了由source属性引用的XDP文档中包含的子表单的名称。 子表单在设计器中定义。 例如,请考虑以下XML。

 <XDPContent insertionPoint="ddx_fragment" source="tuc018_contact.xdp" fragment="subPatientContact" required="false"/>

名为​subPatientContact​的子表单必须位于名为​tuc018_contact.xdp​的XDP文件中。

设置运行时选项

您可以设置运行时选项,以在Assembler服务执行作业时控制其行为。 例如,您可以设置一个选项,指示Assembler服务在遇到错误时继续处理作业。

组合多个XDP文档

要组合多个XDP文件,请调用invokeDDX操作。 Assembler服务返回集合对象中已装配的XDP文档。

检索装配的XDP文档

集合对象中会返回一个组合的XDP文档。 遍历集合对象,将XDP文档另存为XDP文件。 您还可以将XDP文档传递给其他AEM Forms服务,如“输出”。

另请参阅

使用Java API组合多个XDP片段

使用Web服务API组合多个XDP片段

包括AEM Forms Java库文件

设置连接属性

以编程方式组合PDF文档

使用片段创建PDF文档

使用Java API组合多个XDP片段

使用Assembler Service API(Java)组合多个XDP片段:

  1. 包括项目文件。

    在Java项目的类路径中包含客户端JAR文件,如adobe-assembler-client.jar。

  2. 创建PDF Assembler客户端。

    • 创建包含连接属性的ServiceClientFactory对象。
    • 使用AssemblerServiceClient对象的构造函数并传递ServiceClientFactory对象,创建对象。
  3. 引用现有DDX文档。

    • 使用DDX文档的构造函数并传递一个指定DDX文件位置的字符串值,创建一个表示DDX文件的java.io.FileInputStream对象。
    • 使用com.adobe.idp.Document对象的构造函数并传递java.io.FileInputStream对象,创建对象。
  4. 引用XDP文档。

    • 创建一个java.util.Map对象,该对象用于使用HashMap构造函数存储输入的XDP文档。

    • 创建一个com.adobe.idp.Document对象,并传递包含输入XDP文件的java.io.FileInputStream对象(对每个XDP文件重复此任务)。

    • 通过调用put方法并传递以下参数,向java.util.Map对象添加一个条目:

      • 表示键名的字符串值。 此值必须与在DDX文档中指定的source元素值匹配(对每个XDP文件重复此任务)。
      • 一个com.adobe.idp.Document对象,其中包含与source元素对应的XDP文档(对每个XDP文件重复此任务)。
  5. 设置运行时选项。

    • 使用AssemblerOptionSpec的构造函数创建存储运行时选项的对象。
    • 通过调用属于AssemblerOptionSpec对象的方法,设置运行时选项以满足您的业务要求。 例如,要指示Assembler服务在发生错误时继续处理作业,请调用AssemblerOptionSpec对象的setFailOnError方法并传递false
  6. 组合多个XDP文档。

    调用AssemblerServiceClient对象的invokeDDX方法并传递以下必需值:

    • 一个com.adobe.idp.Document对象,它表示要使用的DDX文档
    • 包含输入XDP文件的java.util.Map对象
    • 一个com.adobe.livecycle.assembler.client.AssemblerOptionSpec对象,它指定运行时选项,包括默认字体和作业日志级别

    invokeDDX方法返回一个com.adobe.livecycle.assembler.client.AssemblerResult对象,该对象包含已装配的XDP文档。

  7. 检索装配的XDP文档。

    要获取已装配的XDP文档,请执行以下操作:

    • 调用AssemblerResult对象的getDocuments方法。 此方法返回java.util.Map对象。
    • 遍历java.util.Map对象,直到找到生成的com.adobe.idp.Document对象。
    • 调用com.adobe.idp.Document对象的copyToFile方法以提取已装配的XDP文档。

另请参阅

组合多个XDP
片段快速开始(SOAP模式):使用Java API(包括AEM Forms Java库文件)
组合多个XDP片段
设置连接属性

使用Web服务API组合多个XDP片段

使用Assembler Service API(Web服务)组合多个XDP片段:

  1. 包括项目文件。

    创建使用MTOM的Microsoft .NET项目。 请确保在设置服务引用时使用以下WSDL定义:

     https://localhost:8080/soap/services/AssemblerService?WSDL&lc_version=9.0.1.
    
    注意

    localhost替换为承载AEM Forms的服务器的IP地址。

  2. 创建PDF Assembler客户端。

    • 使用AssemblerServiceClient对象的默认构造函数创建一个对象。

    • 使用System.ServiceModel.EndpointAddress构造函数创建AssemblerServiceClient.Endpoint.Address对象。 将指定WSDL的字符串值传递给AEM Forms服务,如https://localhost:8080/soap/services/AssemblerService?blob=mtom。 您无需使用lc_version属性。 在创建服务引用时使用此属性。

    • 通过获取AssemblerServiceClient.Endpoint.Binding字段的值,创建System.ServiceModel.BasicHttpBinding对象。 将返回值转换为BasicHttpBinding

    • System.ServiceModel.BasicHttpBinding对象的MessageEncoding字段设置为WSMessageEncoding.Mtom。 此值确保使用MTOM。

    • 通过执行以下任务,启用基本HTTP身份验证:

      • AssemblerServiceClient.ClientCredentials.UserName.UserName字段指定AEM表单用户名。
      • AssemblerServiceClient.ClientCredentials.UserName.Password字段指定相应的密码值。
      • HttpClientCredentialType.Basic常量值指定给BasicHttpBindingSecurity.Transport.ClientCredentialType字段。
      • BasicHttpSecurityMode.TransportCredentialOnly常量值指定给BasicHttpBindingSecurity.Security.Mode字段。
  3. 引用现有DDX文档。

    • 使用BLOB对象的构造函数创建对象。 BLOB对象用于存储DDX文档。
    • 通过调用System.IO.FileStream对象的构造函数并传递一个字符串值来创建对象,该字符串值表示DDX文档的文件位置以及打开文件的模式。
    • 创建一个字节数组,用于存储System.IO.FileStream对象的内容。 可以通过获取System.IO.FileStream对象的Length属性来确定字节数组的大小。
    • 通过调用System.IO.FileStream对象的Read方法,用流数据填充字节数组。 传递要读取的字节数组、开始位置和流长度。
    • 通过将MTOM属性赋予字节数组的内容,填充BLOB对象。
  4. 引用XDP文档。

    • 对于每个输入XDP文件,使用其构造函数创建一个BLOB对象。 BLOB对象用于存储输入文件。
    • 通过调用System.IO.FileStream对象的构造函数并传递一个字符串值来创建一个对象,该字符串值表示输入文件的文件位置以及打开文件的模式。
    • 创建一个字节数组,用于存储System.IO.FileStream对象的内容。 可以通过获取System.IO.FileStream对象的Length属性来确定字节数组的大小。
    • 通过调用System.IO.FileStream对象的Read方法,用流数据填充字节数组。 传递要读取的字节数组、开始位置和流长度。
    • BLOB对象的MTOM字段指定为字节数组的内容,从而填充该对象。
    • 创建MyMapOf_xsd_string_To_xsd_anyType对象。 此集合对象用于存储创建组合的XDP文档所需的输入文件。
    • 对于每个输入文件,创建一个MyMapOf_xsd_string_To_xsd_anyType_Item对象。
    • MyMapOf_xsd_string_To_xsd_anyType_Item对象的key字段指定表示键名的字符串值。 此值必须与在DDX文档中指定的元素值匹配。 (对每个输入XDP文件执行此任务。)
    • 将存储输入文件的BLOB对象指定到MyMapOf_xsd_string_To_xsd_anyType_Item对象的value字段。 (对每个输入XDP文件执行此任务。)
    • MyMapOf_xsd_string_To_xsd_anyType_Item对象添加到MyMapOf_xsd_string_To_xsd_anyType对象。 调用MyMapOf_xsd_string_To_xsd_anyType对象的Add方法并传递MyMapOf_xsd_string_To_xsd_anyType对象。 (对每个输入XDP任务执行此文档。)
  5. 设置运行时选项。

    • 使用AssemblerOptionSpec的构造函数创建存储运行时选项的对象。
    • 通过为属于AssemblerOptionSpec对象的数据成员分配一个值,设置运行时选项以满足您的业务需求。 例如,要指示Assembler服务在发生错误时继续处理作业,请将false分配给AssemblerOptionSpec对象的failOnError数据成员。
  6. 组合多个XDP文档。

    调用AssemblerServiceClient对象的invokeDDX方法并传递以下值:

    • 表示DDX文档的BLOB对象
    • 包含所需文件的MyMapOf_xsd_string_To_xsd_anyType对象
    • 指定运行时选项的AssemblerOptionSpec对象

    invokeDDX方法返回一个AssemblerResult对象,其中包含作业的结果和发生的任何异常。

  7. 检索装配的XDP文档。

    要获取新创建的XDP文档,请执行以下操作:

    • 访问AssemblerResult对象的documents字段,该字段是一个Map对象,其中包含生成的PDF文档。
    • 循环访问Map对象以获得每个生成文档。 然后,将该数组成员的value转换为BLOB
    • 通过访问PDF文档的BLOB对象的MTOM属性提取表示PDF数据的二进制数据。 这将返回可写入XDP文件的字节数组。

另请参阅

汇编多个XDP片
段使用MTOM调用AEM Forms

On this page

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now