使用户能够填写交互式表单的基于Web的应用程序需要将数据提交回服务器。 使用Forms服务,您可以检索用户在交互式表单中输入的数据。 在检索数据后,您可以处理数据以满足您的业务要求。 例如,您可以将数据存储在数据库中,将数据发送到另一个应用程序,将数据发送到另一个服务,将数据合并到表单设计中,在Web浏览器中显示数据,等等。
表单数据将作为XML或PDF数据提交到Forms服务,这是在Designer中设置的选项。 以XML形式提交的表单允许您提取单个字段数据值。 即,您可以提取用户在表单中输入的每个表单字段的值。 作为PDF数据提交的表单是二进制数据,而不是XML数据。 您可以将表单另存为PDF文件,或将表单发送到其他服务。 如果要从以XML形式提交的表单中提取数据,然后使用该表单数据创建PDF文档,请调用另一个AEM Forms操作。 (请参阅 使用提交的XML数据创建PDF文档)
下图显示了提交到名为的Java Servlet的数据 HandleData
从Web浏览器中显示的交互式表单。
下表说明了图中的步骤。
步骤 |
描述 |
---|---|
1 |
用户填写交互式表单并单击表单的“提交”按钮。 |
2 |
数据会提交到 |
3 |
的 |
将表单数据作为XML提交时,您可以检索表示已提交数据的XML数据。 所有表单字段都以节点形式显示在XML架构中。 节点值与用户填充的值相对应。 考虑使用贷款表单,其中表单中的每个字段在XML数据中显示为一个节点。 每个节点的值对应于用户填入的值。 假定用户在贷款表单中填写如下表所示的数据。
下图显示了使用Forms服务客户端API检索到的相应XML数据。
贷款表单中的字段。 这些值可以使用Java XML类进行检索。
表单设计必须在Designer中正确配置,才能作为XML数据提交数据。 要正确配置表单设计以提交XML数据,请确保将表单设计上的“提交”按钮设置为提交XML数据。 有关设置“提交”按钮以提交XML数据的信息,请参阅 AEM Forms Designer.
考虑调用Forms服务的Web应用程序。 在Forms服务将交互式PDF表单呈现给客户端Web浏览器后,用户将填写表单并将其作为PDF数据提交回来。 当Forms服务收到PDF数据时,它可以将PDF数据发送到其他服务或将其另存为PDF文件。 下图显示了应用程序的逻辑流程。
下表介绍了此图中的步骤。
步骤 |
描述 |
---|---|
1 |
网页包含一个链接,用于访问调用Forms服务的Java Servlet。 |
2 |
Forms服务向客户端Web浏览器呈现交互式PDF表单。 |
3 |
用户填写交互式表单并单击提交按钮。 表单将作为PDF数据提交回Forms服务。 此选项在Designer中设置。 |
4 |
Forms服务将PDF数据另存为PDF文件。 |
如果表单数据以URL UTF-16数据形式提交,则客户端计算机需要Adobe Reader或Acrobat 8.1或更高版本。 此外,如果表单设计包含具有URL编码数据(HTTP Post)的提交按钮,且数据编码选项为UTF-16,则必须在文本编辑器(如记事本)中修改表单设计。 您可以将编码选项设置为 UTF-16LE
或 UTF-16BE
,以查看“提交”按钮。 Designer不提供此功能。
有关Forms服务的更多信息,请参阅 AEM Forms服务参考.
要处理提交的表单,请执行以下任务:
包含项目文件
在开发项目中包含必需的文件。 如果您使用Java创建客户端应用程序,请包含必需的JAR文件。 如果您使用的是Web服务,请确保包含代理文件。
创建Forms客户端API对象
您必须先创建Forms服务客户端,然后才能以编程方式执行Forms服务客户端API操作。 如果您使用的是Java API,请创建 FormsServiceClient
对象。 如果您使用的是Forms Web服务API,请创建 FormsService
对象。
检索表单数据
要检索提交的表单数据,请调用 FormsServiceClient
对象 processFormSubmission
方法。 调用此方法时,必须指定提交表单的内容类型。 当数据从客户端Web浏览器提交到Forms服务时,它可以以XML或PDF数据的形式提交。 要检索输入到表单字段中的数据,可以将数据作为XML数据提交。
您还可以通过设置以下运行时选项,从作为PDF数据提交的表单中检索表单字段:
processFormSubmission
方法作为内容类型参数: CONTENT_TYPE=application/pdf
.RenderOptionsSpec
对象 PDFToXDP
值 true
RenderOptionsSpec
对象 ExportDataFormat
值 XMLData
在调用 processFormSubmission
方法。 以下列表指定了适用的内容类型值:
您会注意到,有三个与处理提交的Forms部分相关的相应快速入门。 使用Java API快速入门将处理作为PDF提交的PDF forms,演示了如何处理提交的PDF数据。 此快速入门中指定的内容类型是 application/pdf
. 使用Java API快速入门处理作为XML提交的PDF forms,演示了如何处理从PDF表单提交的已提交XML数据。 此快速入门中指定的内容类型是 text/xml
. 同样,使用Java API快速入门将处理作为XML提交的HTML表单,演示了如何处理从HTML表单提交的已提交XML数据。 此快速入门中指定的内容类型是application/x-www-form-urlencoded。
您可以检索发布到Forms服务的表单数据,并确定其处理状态。 即,在将数据提交到Forms服务时,它不一定意味着Forms服务已完成数据处理,并且数据已准备好进行处理。 例如,可以将数据提交到Forms服务,以便执行计算。 计算完成后,表单会呈现回用户并显示计算结果。 在处理提交的数据之前,建议您确定Forms服务是否已完成数据处理。
Forms服务会返回以下值,以指示它是否已完成数据处理:
计算和验证必须重新呈现给用户。 (请参阅 计算表单数据.)
确定表单提交是否包含文件附件
Forms已提交到Forms服务可以包含文件附件。 例如,使用Acrobat的内置附件窗格,用户可以选择要与表单一起提交的文件附件。 此外,用户还可以使用随HTML文件一起呈现的HTML工具栏来选择文件附件。
确定表单是否包含文件附件后,即可处理数据。 例如,可以将文件附件保存到本地文件系统。
必须将表单作为PDF数据提交,才能检索文件附件。 如果表单以XML数据形式提交,则不会提交文件附件。
处理提交的数据
根据提交数据的内容类型,您可以从提交的XML数据中提取单个表单字段值,或将提交的PDF数据另存为PDF文件(或将其发送到其他服务)。 要提取单个表单字段,请将提交的XML数据转换为XML数据源,然后使用 org.w3c.dom
类。
另请参阅
使用Forms API(Java)处理提交的表单:
包含项目文件
在Java项目的类路径中包含客户端JAR文件,如adobe-forms-client.jar。
创建Forms客户端API对象
ServiceClientFactory
包含连接属性的对象。FormsServiceClient
对象,并使用其构造函数进行传递 ServiceClientFactory
对象。检索表单数据
com.adobe.idp.Document
对象,并调用 javax.servlet.http.HttpServletResponse
对象 getInputStream
方法。RenderOptionsSpec
对象。 通过调用 RenderOptionsSpec
对象 setLocale
方法和传递指定区域设置值的字符串值。您可以通过调用 RenderOptionsSpec
对象 setPDF2XDP
方法和传递 true
同时调用 setXMLData
传递 true
. 然后,您可以调用 FormsResult
对象 getOutputXML
方法检索与XDP/XML数据相对应的XML数据。 ( FormsResult
对象由返回 processFormSubmission
方法,下一子步骤中对此进行说明。)
调用 FormsServiceClient
对象 processFormSubmission
方法并传递以下值:
com.adobe.idp.Document
包含表单数据的对象。CONTENT_TYPE=text/xml
. 要处理PDF数据,请为此参数指定以下字符串值: CONTENT_TYPE=application/pdf
.HTTP_USER_AGENT
标题值,例如。 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
. 此参数值是可选的。RenderOptionsSpec
用于存储运行时选项的对象。的 processFormSubmission
方法返回 FormsResult
包含表单提交结果的对象。
通过调用 FormsResult
对象 getAction
方法。 如果此方法返回值 0
,则数据已准备就绪,可供处理。
确定表单提交是否包含文件附件
FormsResult
对象 getAttachments
方法。 此方法将返回 java.util.List
包含随表单提交的文件的对象。java.util.List
对象,以确定文件附件是否存在。 如果存在文件附件,则每个元素都是 com.adobe.idp.Document
实例。 您可以通过调用 com.adobe.idp.Document
对象 copyToFile
方法和通过 java.io.File
对象。此步骤仅在表单作为PDF提交时才适用。
处理提交的数据
如果数据内容类型为 application/vnd.adobe.xdp+xml
或 text/xml
,请创建应用程序逻辑以检索XML数据值。
com.adobe.idp.Document
对象 FormsResult
对象 getOutputContent
方法。java.io.InputStream
对象 java.io.DataInputStream
构造函数和传递 com.adobe.idp.Document
对象。org.w3c.dom.DocumentBuilderFactory
对象(通过调用静态 org.w3c.dom.DocumentBuilderFactory
对象 newInstance
方法。org.w3c.dom.DocumentBuilder
对象 org.w3c.dom.DocumentBuilderFactory
对象 newDocumentBuilder
方法。org.w3c.dom.Document
对象 org.w3c.dom.DocumentBuilder
对象 parse
方法和通过 java.io.InputStream
对象。org.w3c.dom.Document
对象以及要检索其值的节点的名称。 此方法会返回表示节点值的字符串值。 在此过程后面的代码示例中,此自定义方法称为 getNodeText
. 此方法的正文如下。如果数据内容类型为 application/pdf
,请创建应用程序逻辑,以将提交的PDF数据另存为PDF文件。
com.adobe.idp.Document
对象 FormsResult
对象 getOutputContent
方法。java.io.File
对象。 确保将PDF指定为文件扩展名。com.adobe.idp.Document
对象 copyToFile
方法和通过 java.io.File
对象。另请参阅
快速入门(SOAP模式):使用Java API处理以XML形式提交的PDF forms
快速入门(SOAP模式):使用Java API处理以XML形式提交的HTML表单
快速入门(SOAP模式):使用Java API处理作为PDF提交的PDF forms
使用Forms API(Web服务)处理提交的表单:
包含项目文件
创建Forms客户端API对象
创建 FormsService
对象,并设置身份验证值。
检索表单数据
要检索发布到Java Servlet的表单数据,请创建 BLOB
对象。
创建 java.io.InputStream
对象 javax.servlet.http.HttpServletResponse
对象 getInputStream
方法。
创建 java.io.ByteArrayOutputStream
对象,并传递 java.io.InputStream
对象。
复制 java.io.InputStream
对象 java.io.ByteArrayOutputStream
对象。
通过调用 java.io.ByteArrayOutputStream
对象 toByteArray
方法。
填充 BLOB
通过调用对象 setBinaryData
方法并将字节数组作为参数进行传递。
创建 RenderOptionsSpec
对象。 通过调用 RenderOptionsSpec
对象 setLocale
方法和传递指定区域设置值的字符串值。
调用 FormsService
对象 processFormSubmission
方法并传递以下值:
BLOB
包含表单数据的对象。CONTENT_TYPE=text/xml
. 要处理PDF数据,请为此参数指定以下字符串值: CONTENT_TYPE=application/pdf
.HTTP_USER_AGENT
标题值;例如, Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
.RenderOptionsSpec
用于存储运行时选项的对象。BLOBHolder
由方法填充的对象。javax.xml.rpc.holders.StringHolder
由方法填充的对象。BLOBHolder
由方法填充的对象。BLOBHolder
由方法填充的对象。javax.xml.rpc.holders.ShortHolder
由方法填充的对象。MyArrayOf_xsd_anyTypeHolder
由方法填充的对象。 此参数用于存储随表单一起提交的文件附件。FormsResultHolder
由方法使用提交的表单填充的对象。的 processFormSubmission
方法填充 FormsResultHolder
参数。
通过调用 FormsResult
对象 getAction
方法。 如果此方法返回值 0
,则表单数据已准备就绪,可供处理。 你可以 FormsResult
对象,方法是获取 FormsResultHolder
对象 value
数据成员。
确定表单提交是否包含文件附件
获取的值 MyArrayOf_xsd_anyTypeHolder
对象 value
数据成员( MyArrayOf_xsd_anyTypeHolder
对象被传递到 processFormSubmission
方法)。 此数据成员返回 Objects
. 中的每个元素 Object
数组是 Object
对应于随表单一起提交的文件。 您可以获取数组中的每个元素,并将其转换为 BLOB
对象。
处理提交的数据
如果数据内容类型为 application/vnd.adobe.xdp+xml
或 text/xml
,请创建应用程序逻辑以检索XML数据值。
BLOB
对象 FormsResult
对象 getOutputContent
方法。BLOB
对象 getBinaryData
方法。java.io.InputStream
对象 java.io.ByteArrayInputStream
构造函数和传递字节数组。org.w3c.dom.DocumentBuilderFactory
对象(通过调用静态 org.w3c.dom.DocumentBuilderFactory
对象 newInstance
方法。org.w3c.dom.DocumentBuilder
对象 org.w3c.dom.DocumentBuilderFactory
对象 newDocumentBuilder
方法。org.w3c.dom.Document
对象 org.w3c.dom.DocumentBuilder
对象 parse
方法和通过 java.io.InputStream
对象。org.w3c.dom.Document
对象以及要检索其值的节点的名称。 此方法会返回表示节点值的字符串值。 在此过程后面的代码示例中,此自定义方法称为 getNodeText
. 此方法的正文如下。如果数据内容类型为 application/pdf
,请创建应用程序逻辑,以将提交的PDF数据另存为PDF文件。
BLOB
对象 FormsResult
对象 getOutputContent
方法。BLOB
对象 getBinaryData
方法。java.io.File
对象。 确保将PDF指定为文件扩展名。java.io.FileOutputStream
对象,并使用其构造函数进行传递 java.io.File
对象。java.io.FileOutputStream
对象 write
方法和传递字节数组。另请参阅