将文档传递到Forms服务

本文档中的示例和示例仅适用于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(已弃用)节点中,如下图所示。

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

注意

有关Forms服务的更多信息,请参阅AEM Forms的服务参考

步骤的摘要

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

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

包含项目文件

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

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

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

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

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

渲染交互式PDF表单

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

注意

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

对表单数据流执行操作

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

另请参阅

包括AEM Forms Java库文件

设置连接属性

Forms Service API快速入门

使用Java API将文档传递到Forms服务

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

  1. 包含项目文件

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

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

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

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

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

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

  4. 渲染交互式PDF表单

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

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

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

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

    • 通过调用FormsResult对象“s getOutputContent”方法创建com.adobe.idp.Document对象。
    • 通过调用getContentType方法获取com.adobe.idp.Document对象的内容类型。
    • 通过调用setContentType方法并传递com.adobe.idp.Document对象的内容类型来设置javax.servlet.http.HttpServletResponse对象的内容类型。
    • 通过调用javax.servlet.http.HttpServletResponse对象的getOutputStream方法,创建一个javax.servlet.ServletOutputStream对象,用于将表单数据流写入客户端Web浏览器。
    • 通过调用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服务

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

  1. 包含项目文件

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

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

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

    注意

    localhost替换为托管AEM Forms的服务器的IP地址。

  2. 创建Forms和文档管理客户端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

    注意

    DocumentManagementServiceClient服务客户端重复这些步骤。

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

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

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

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

    • BLOB对象,其中包含从Content Services中检索的表单设计(已弃用)。
    • 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.BinaryWriter对象的构造函数并传递System.IO.FileStream对象来创建该对象。
    • 通过调用System.IO.BinaryWriter对象的Write方法并传递字节数组,将字节数组的内容写入PDF文件。

另请参阅

使用MTOM调用AEM Forms

在此页面上