将文档传递到Forms服务

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

AEM Forms服务将交互式PDF forms呈现到客户端设备(通常是Web浏览器),以从用户收集信息。 交互式PDF表单基于表单设计,该表单设计通常另存为XDP文件并在设计器中创建。 从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. 从Content Services检索表单设计(已弃用)。
  4. 渲染交互式PDF表单。
  5. 对表单数据流执行操作。

包括项目文件

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

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

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

从Content Services检索表单设计(已弃用)

使用Java或Web服务API从Content Services检索XDP文件(已弃用)。 XDP文件在com.adobe.idp.Document实例(或BLOB实例(如果您使用Web服务)中返回。 然后,可以将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服务和Content Services(已弃用)API(Java)传递从Content Services获得的文档(已弃用):

  1. 包括项目文件

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

  2. 创建Forms和文档管理客户端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方法并传递以下值:

    • 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方法,创建一个用于将表单数据流写入客户端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服务

通过使用Forms服务和Content Services(已弃用)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身份验证:

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

    注意

    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方法并传递以下值:

    • 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.FileStream对象,创建System.IO.BinaryWriter对象。
    • 通过调用System.IO.BinaryWriter对象的Write方法并传递字节数组,将字节数组的内容写入PDF文件。

另请参阅

使用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