将文档传递到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服务。
步骤摘要 summary-of-steps
要将从Content Services(已弃用)获得的文档传递到Forms服务,请执行以下任务:
- 包括项目文件。
- 创建Forms和文档管理客户端API对象。
- 从Content Services检索表单设计(已弃用)。
- 呈现交互式PDF表单。
- 对表单数据流执行操作。
包含项目文件
在开发项目中包含必要的文件。 如果使用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服务。
com.adobe.idp.Document传递到Forms服务。 两个名为renderPDFForm2和renderHTMLForm2的新方法接受包含表单设计的com.adobe.idp.Document对象。对表单数据流执行操作
根据客户端应用程序的类型,可以将表单写入客户端Web浏览器或将表单另存为PDF文件。 基于Web的应用程序通常将表单写入Web浏览器。 但是,桌面应用程序通常将表单保存为PDF文件。
另请参阅
使用Java API将文档传递到Forms服务 pass-documents-to-the-forms-service-using-the-java-api
使用Forms服务和内容服务(已弃用)API (Java)传递从内容服务(已弃用)获得的文档:
-
包含项目文件
在Java项目的类路径中包含客户端JAR文件,例如adobe-forms-client.jar和adobe-contentservices-client.jar。
-
创建Forms和Document Management客户端API对象
- 创建包含连接属性的
ServiceClientFactory对象。 (请参阅设置连接属性。) - 使用构造函数创建
FormsServiceClient对象并传递ServiceClientFactory对象。 - 使用对象的构造函数创建
DocumentManagementServiceClientImpl对象并传递ServiceClientFactory对象。
- 创建包含连接属性的
-
从Content Services检索表单设计(已弃用)
调用
DocumentManagementServiceClientImpl对象的retrieveContent方法并传递以下值:- 一个字符串值,它指定添加内容的存储。 默认存储为
SpacesStore。 此值是必需参数。 - 一个字符串值,它指定要检索的内容的完全限定路径(例如,
/Company Home/Form Designs/Loan.xdp)。 此值是必需参数。 - 指定版本的字符串值。 此值是一个可选参数,您可以传递空字符串。 在这种情况下,将检索最新版本。
retrieveContent方法返回包含XDP文件的CRCResult对象。 通过调用CRCResult对象的getDocument方法获取com.adobe.idp.Document实例。 - 一个字符串值,它指定添加内容的存储。 默认存储为
-
呈现交互式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浏览器的表单数据流。 - 包含从Content Services检索到的表单设计的
-
对表单数据流执行操作
- 通过调用
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方法。
- 通过调用
另请参阅
使用Web服务API将文档传递到Forms服务 pass-documents-to-the-forms-service-using-the-web-service-api
使用Forms服务和内容服务(已弃用)API(Web服务)传递从内容服务(已弃用)获得的文档:
-
包含项目文件
创建使用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地址。 -
创建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。
- 将AEM表单用户名分配给字段
-
将常量值
BasicHttpSecurityMode.TransportCredentialOnly分配给字段BasicHttpBindingSecurity.Security.Mode。
note note NOTE 对 DocumentManagementServiceClient服务客户端重复这些步骤。 -
-
从Content Services检索表单设计(已弃用)
通过调用
DocumentManagementServiceClient对象的retrieveContent方法并传递以下值来检索内容:- 一个字符串值,它指定添加内容的存储。 默认存储为
SpacesStore。 此值是必需参数。 - 一个字符串值,它指定要检索的内容的完全限定路径(例如,
/Company Home/Form Designs/Loan.xdp)。 此值是必需参数。 - 指定版本的字符串值。 此值是一个可选参数,您可以传递空字符串。 在这种情况下,将检索最新版本。
- 用于存储浏览链接值的字符串输出参数。
- 用于存储内容的
BLOB输出参数。 您可以使用此输出参数检索内容。 - 用于存储内容属性的
ServiceReference1.MyMapOf_xsd_string_To_xsd_anyType输出参数。 CRCResult输出参数。 您可以使用BLOB输出参数来获取内容,而不是使用此对象。
- 一个字符串值,它指定添加内容的存储。 默认存储为
-
呈现交互式PDF表单
调用
FormsServiceClient对象的renderPDFForm2方法并传递以下值:- 包含从Content Services检索到的表单设计的
BLOB对象(已弃用)。 - 包含要与表单合并的数据的
BLOB对象。 如果不想合并数据,请传递一个空的BLOB对象。 - 存储运行时选项的
PDFFormRenderSpec对象。 此值是一个可选参数,如果您不想指定运行时选项,则可以指定null。 - 包含URI值的
URLSpec对象。 此值是可选参数,您可以指定null。 - 存储文件附件的
Map对象。 此值是一个可选参数,如果您不想将文件附加到表单,则可以指定null。 - 用于存储页数的长输出参数。
- 用于存储区域设置值的字符串输出参数。
- 用于存储交互PDF表单
.的FormsResult输出参数
renderPDFForm2方法返回包含交互式PDF表单的FormsResult对象。 - 包含从Content Services检索到的表单设计的
-
对表单数据流执行操作
- 通过获取
FormsResult对象的outputContent字段的值来创建包含表单数据的BLOB对象。 - 通过调用其构造函数创建
System.IO.FileStream对象。 传递一个字符串值,该值表示交互式PDF文档的文件位置以及打开文件的模式。 - 创建一个字节数组,用于存储从
FormsResult对象检索的BLOB对象的内容。 通过获取BLOB对象的MTOM数据成员的值填充字节数组。 - 通过调用其构造函数并传递
System.IO.FileStream对象来创建System.IO.BinaryWriter对象。 - 通过调用
System.IO.BinaryWriter对象的Write方法并传递字节数组,将字节数组的内容写入PDF文件。
- 通过获取
另请参阅