将文档传递到Forms服务 passing-documents-to-the-formsservice

本文档中的示例和示例仅适用于JEE环境上的AEM Forms。

AEM Forms服务向客户端设备(通常是Web浏览器)呈现交互式PDF forms,以从用户那里收集信息。 交互式PDF表单基于表单设计,该表单设计通常保存为XDP文件并在Designer中创建。 从AEM Forms开始,您可以将包含表单设计的com.adobe.idp.Document对象传递到Forms服务。 然后,Forms服务渲染com.adobe.idp.Document对象中的表单设计。

com.adobe.idp.Document对象传递到Forms服务的好处是,其他服务操作返回com.adobe.idp.Document实例。 也就是说,您可以从另一个服务操作获取com.adobe.idp.Document实例并对其进行渲染。 例如,假设XDP文件存储在名为/Company Home/Form Designs的Content Services(已弃用)节点中,如下图所示。

您可以以编程方式从内容服务中检索Loan.xdp(已弃用)(已弃用),并将XDP文件传递到com.adobe.idp.Document对象中的Forms服务。

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

步骤摘要 summary-of-steps

要将从Content Services(已弃用)获得的文档传递到Forms服务,请执行以下任务:

  1. 包括项目文件。
  2. 创建Forms和文档管理客户端API对象。
  3. 从Content Services检索表单设计(已弃用)。
  4. 呈现交互式PDF表单。
  5. 对表单数据流执行操作。

包含项目文件

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

创建Forms和文档管理客户端API对象

在以编程方式执行Forms服务API操作之前,请先创建Forms客户端API对象。 此外,由于此工作流从内容服务中检索XDP文件(已弃用),因此请创建文档管理API对象。

从内容服务检索表单设计(已弃用)

使用Java或Web服务API从内容服务中检索XDP文件(已弃用)。 XDP文件在com.adobe.idp.Document实例(或者BLOB实例,如果您使用Web服务)中返回。 然后,您可以将com.adobe.idp.Document实例传递到Forms服务。

渲染交互式PDF表单

要呈现交互式表单,请将从Content Services(已弃用)返回的com.adobe.idp.Document实例传递到Forms服务。

NOTE
您可以将包含表单设计的com.adobe.idp.Document传递到Forms服务。 两个名为renderPDFForm2renderHTMLForm2的新方法接受包含表单设计的com.adobe.idp.Document对象。

对表单数据流执行操作

根据客户端应用程序的类型,可以将表单写入客户端Web浏览器或将表单另存为PDF文件。 基于Web的应用程序通常将表单写入Web浏览器。 但是,桌面应用程序通常将表单保存为PDF文件。

另请参阅

包括AEM Forms Java库文件

设置连接属性

Forms服务API快速启动

使用Java API将文档传递到Forms服务 pass-documents-to-the-forms-service-using-the-java-api

使用Forms服务和内容服务(已弃用)API (Java)传递从内容服务(已弃用)获得的文档:

  1. 包含项目文件

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

  2. 创建Forms和Document Management客户端API对象

    • 创建包含连接属性的ServiceClientFactory对象。 (请参阅设置连接属性。)
    • 使用构造函数创建FormsServiceClient对象并传递ServiceClientFactory对象。
    • 使用对象的构造函数创建DocumentManagementServiceClientImpl对象并传递ServiceClientFactory对象。
  3. 从Content Services检索表单设计(已弃用)

    调用DocumentManagementServiceClientImpl对象的retrieveContent方法并传递以下值:

    • 一个字符串值,它指定添加内容的存储。 默认存储为SpacesStore。 此值是必需参数。
    • 一个字符串值,它指定要检索的内容的完全限定路径(例如,/Company Home/Form Designs/Loan.xdp)。 此值是必需参数。
    • 指定版本的字符串值。 此值是一个可选参数,您可以传递空字符串。 在这种情况下,将检索最新版本。

    retrieveContent方法返回包含XDP文件的CRCResult对象。 通过调用CRCResult对象的getDocument方法获取com.adobe.idp.Document实例。

  4. 呈现交互式PDF表单

    调用FormsServiceClient对象的renderPDFForm2方法并传递以下值:

    • 包含从Content Services检索到的表单设计的com.adobe.idp.Document对象(已弃用)。
    • 包含要与表单合并的数据的com.adobe.idp.Document对象。 如果不想合并数据,请传递一个空的com.adobe.idp.Document对象。
    • 存储运行时选项的PDFFormRenderSpec对象。 此值是一个可选参数,如果您不想指定运行时选项,则可以指定null
    • 包含URI值的URLSpec对象。 此值是可选参数,您可以指定null
    • 存储文件附件的java.util.HashMap对象。 此值是一个可选参数,如果您不想将文件附加到表单,则可以指定null

    renderPDFForm方法返回的FormsResult对象包含必须写入客户端Web浏览器的表单数据流。

  5. 对表单数据流执行操作

    • 通过调用FormsResult对象的getOutputContent方法创建com.adobe.idp.Document对象。
    • 通过调用其getContentType方法获取com.adobe.idp.Document对象的内容类型。
    • 通过调用其setContentType方法并传递com.adobe.idp.Document对象的内容类型来设置javax.servlet.http.HttpServletResponse对象的内容类型。
    • 通过调用javax.servlet.http.HttpServletResponse对象的getOutputStream方法,创建用于将表单数据流写入客户端Web浏览器的javax.servlet.ServletOutputStream对象。
    • 通过调用com.adobe.idp.Document对象的getInputStream方法创建java.io.InputStream对象。
    • 通过调用InputStream对象的read方法,创建字节数组并使用表单数据流填充该数组。 将字节数组作为参数传递。
    • 调用javax.servlet.ServletOutputStream对象的write方法将表单数据流发送到客户端Web浏览器。 将字节数组传递给write方法。

另请参阅

快速入门(SOAP模式):使用Java API将文档传递到Forms服务

包括AEM Forms Java库文件

设置连接属性

使用Web服务API将文档传递到Forms服务 pass-documents-to-the-forms-service-using-the-web-service-api

使用Forms服务和内容服务(已弃用)API(Web服务)传递从内容服务(已弃用)获得的文档:

  1. 包含项目文件

    创建使用MTOM的Microsoft .NET项目。 由于此客户端应用程序调用两个AEM Forms服务,因此请创建两个服务引用。 对与Forms服务关联的服务引用使用以下WSDL定义: http://localhost:8080/soap/services/FormsService?WSDL&lc_version=9.0.1

    对与Document Management服务关联的服务引用使用以下WSDL定义: http://localhost:8080/soap/services/DocumentManagementService?WSDL&lc_version=9.0.1

    由于BLOB数据类型对两个服务引用都是通用的,因此使用它时,请完全限定BLOB数据类型。 在相应的Web服务快速入门中,所有BLOB实例都是完全限定的。

    note note
    NOTE
    localhost替换为承载AEM Forms的服务器的IP地址。
  2. 创建Forms和Document Management客户端API对象

    • 使用默认构造函数创建FormsServiceClient对象。

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

    • 通过获取FormsServiceClient.Endpoint.Binding字段的值创建一个System.ServiceModel.BasicHttpBinding对象。 将返回值强制转换为BasicHttpBinding

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

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

      • 将AEM表单用户名分配给字段FormsServiceClient.ClientCredentials.UserName.UserName
      • 将相应的密码值分配给字段FormsServiceClient.ClientCredentials.UserName.Password
      • 将常量值HttpClientCredentialType.Basic分配给字段BasicHttpBindingSecurity.Transport.ClientCredentialType
    • 将常量值BasicHttpSecurityMode.TransportCredentialOnly分配给字段BasicHttpBindingSecurity.Security.Mode

    note note
    NOTE
    DocumentManagementServiceClient服务客户端重复这些步骤。
  3. 从Content Services检索表单设计(已弃用)

    通过调用DocumentManagementServiceClient对象的retrieveContent方法并传递以下值来检索内容:

    • 一个字符串值,它指定添加内容的存储。 默认存储为SpacesStore。 此值是必需参数。
    • 一个字符串值,它指定要检索的内容的完全限定路径(例如,/Company Home/Form Designs/Loan.xdp)。 此值是必需参数。
    • 指定版本的字符串值。 此值是一个可选参数,您可以传递空字符串。 在这种情况下,将检索最新版本。
    • 用于存储浏览链接值的字符串输出参数。
    • 用于存储内容的BLOB输出参数。 您可以使用此输出参数检索内容。
    • 用于存储内容属性的ServiceReference1.MyMapOf_xsd_string_To_xsd_anyType输出参数。
    • CRCResult输出参数。 您可以使用BLOB输出参数来获取内容,而不是使用此对象。
  4. 呈现交互式PDF表单

    调用FormsServiceClient对象的renderPDFForm2方法并传递以下值:

    • 包含从Content Services检索到的表单设计的BLOB对象(已弃用)。
    • 包含要与表单合并的数据的BLOB对象。 如果不想合并数据,请传递一个空的BLOB对象。
    • 存储运行时选项的PDFFormRenderSpec对象。 此值是一个可选参数,如果您不想指定运行时选项,则可以指定null
    • 包含URI值的URLSpec对象。 此值是可选参数,您可以指定null
    • 存储文件附件的Map对象。 此值是一个可选参数,如果您不想将文件附加到表单,则可以指定null
    • 用于存储页数的长输出参数。
    • 用于存储区域设置值的字符串输出参数。
    • 用于存储交互PDF表单.FormsResult输出参数

    renderPDFForm2方法返回包含交互式PDF表单的FormsResult对象。

  5. 对表单数据流执行操作

    • 通过获取FormsResult对象的outputContent字段的值来创建包含表单数据的BLOB对象。
    • 通过调用其构造函数创建System.IO.FileStream对象。 传递一个字符串值,该值表示交互式PDF文档的文件位置以及打开文件的模式。
    • 创建一个字节数组,用于存储从FormsResult对象检索的BLOB对象的内容。 通过获取BLOB对象的MTOM数据成员的值填充字节数组。
    • 通过调用其构造函数并传递System.IO.FileStream对象来创建System.IO.BinaryWriter对象。
    • 通过调用System.IO.BinaryWriter对象的Write方法并传递字节数组,将字节数组的内容写入PDF文件。

另请参阅

使用MTOM调用AEM Forms

recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2