Forms服务可以渲染基于您使用Designer创建的片段的表单。 片段是表单的可重用部分,另存为可插入多个表单设计中的单独XDP文件。 例如,片段可以包含地址块或法律文本。
使用片段可简化和加快大量表单的创建和维护。 创建新表单时,需要插入对所需片段的引用,该片段将显示在表单中。 片段引用包含指向物理XDP文件的子表单。 有关基于片段创建表单设计的信息,请参阅Forms Designer
片段可以包括封装在选择子表单集中的多个子表单。 选择子表单集基于来自数据连接的数据流控制子表单的显示。 您可以使用条件语句确定集合中的哪个子表单显示在提交表单中。 例如,集合中的每个子表单可以包括关于特定地理位置的信息,并且所显示的子表单可以基于用户的位置来确定。
脚本片段包含可重用的JavaScript函数或值,这些函数或值与任何特定对象(如日期解析器或Web服务调用)分开存储。 这些片段包含一个脚本对象,该对象在“层级”面板中显示为变量的子项。 无法从属于其他对象属性的脚本(例如验证、计算或初始化等事件脚本)中创建片段。
以下是使用片段的优势:
您可以基于多个片段组合表单设计以传递到Forms服务。 要组合多个片段,请使用汇编程序服务。 要查看使用组合服务创建供其他Forms服务(输出服务)使用的表单设计的示例,请参阅使用片段创建PDF文档。 您可以使用Forms服务来执行相同的工作流,而不是使用输出服务。
使用汇编程序服务时,您将传递使用片段组合的表单设计。 创建的表单设计不引用其他片段。 相反,本主题讨论如何传递引用其他片段的表单设计到Forms服务。 但是,表单设计不是由汇编程序组装的。 它是在Designer中创建的。
有关Forms服务的更多信息,请参阅AEM Forms的服务参考。
有关创建基于Web的应用程序以根据片段呈现表单的信息,请参阅创建呈现Forms的Web应用程序。
要根据片段渲染表单,请执行以下任务:
包含项目文件
在开发项目中包含必需的文件。 如果您使用Java创建客户端应用程序,请包含必需的JAR文件。 如果您使用的是Web服务,请确保包含代理文件。
创建Forms客户端API对象
您必须先创建Forms服务客户端,然后才能以编程方式执行Forms服务客户端API操作。
指定URI值
要成功渲染基于片段的表单,您必须确保Forms服务能够找到表单设计引用的表单和片段(XDP文件)。 例如,假定表单名为PO.xdp,并且此表单使用名为FooterUS.xdp和FooterCanada.xdp的两个片段。 在这种情况下,Forms服务必须能够找到所有三个XDP文件。
您可以将表单及其片段放置在一个位置,将片段放置在另一个位置,或将所有XDP文件放置在同一位置,从而组织表单及其片段。 就本节而言,假定所有XDP文件都位于AEM Forms存储库中。 有关将XDP文件放置到AEM Forms存储库的信息,请参阅编写资源。
在基于片段呈现表单时,必须仅引用表单本身,而不引用片段。 例如,您必须引用PO.xdp,而不是FooterUS.xdp或FooterCanada.xdp。 确保将片段放置在Forms服务可以找到它们的位置。
渲染表单
基于片段的表单可以以与非碎片表单相同的方式呈现。 即,您可以将表单渲染为PDF、HTML或表单指南(已弃用)。 本节中的示例将基于片段的表单呈现为交互式PDF表单。 (请参阅渲染交互式PDF forms。)
将表单数据流写入客户端Web浏览器
当Forms服务呈现表单时,它会返回一个必须写入客户端Web浏览器的表单数据流。 写入客户端Web浏览器时,用户可以看到该表单。
另请参阅
使用Forms API(Java)渲染基于片段的表单:
包含项目文件
在Java项目的类路径中包含客户端JAR文件,如adobe-forms-client.jar。
创建Forms客户端API对象
ServiceClientFactory
对象。FormsServiceClient
对象,并传递ServiceClientFactory
对象。指定URI值
URLSpec
的构造函数创建一个用于存储URI值的对象。URLSpec
对象的setApplicationWebRoot
方法,并传递表示应用程序Web根的字符串值。URLSpec
对象的setContentRootURI
方法并传递指定内容根URI值的字符串值。 确保表单设计和片段位于内容根URI中。 如果没有,则Forms服务会引发异常。 要引用存储库,请指定repository://
。URLSpec
对象的setTargetURL
方法,并传递一个字符串值,该字符串值指定将表单数据发布到的目标URL值。 如果在表单设计中定义目标URL,则可以传递一个空字符串。 您还可以指定将表单发送到的URL,以执行计算。渲染表单
调用FormsServiceClient
对象的renderPDFForm
方法并传递以下值:
Applications/FormsApplication/1.0/FormsFolder/Loan.xdp
。com.adobe.idp.Document
对象,其中包含要与表单合并的数据。 如果不想合并数据,请传递一个空的com.adobe.idp.Document
对象。PDFFormRenderSpec
对象。URLSpec
对象,其中包含Forms服务根据片段渲染表单所需的URI值。java.util.HashMap
对象。 这是一个可选参数,如果您不想将文件附加到表单,可以指定null
。renderPDFForm
方法返回一个FormsResult
对象,该对象包含必须写入客户端Web浏览器的表单数据流。
将表单数据流写入客户端Web浏览器
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 API(Web服务)渲染基于片段的表单:
包含项目文件
创建Forms客户端API对象
创建FormsService
对象并设置身份验证值。
指定URI值
URLSpec
的构造函数创建一个用于存储URI值的对象。URLSpec
对象的setApplicationWebRoot
方法,并传递表示应用程序Web根的字符串值。URLSpec
对象的setContentRootURI
方法并传递指定内容根URI值的字符串值。 确保表单设计位于内容根URI中。 如果没有,则Forms服务会引发异常。 要引用存储库,请指定repository://
。URLSpec
对象的setTargetURL
方法,并传递一个字符串值,该字符串值指定将表单数据发布到的目标URL值。 如果在表单设计中定义目标URL,则可以传递一个空字符串。 您还可以指定将表单发送到的URL,以执行计算。渲染表单
调用FormsService
对象的renderPDFForm
方法并传递以下值:
Applications/FormsApplication/1.0/FormsFolder/Loan.xdp
。BLOB
对象,其中包含要与表单合并的数据。 如果不想合并数据,请传递null
。PDFFormRenderSpec
对象。 请注意,如果输入文档是PDF文档,则无法设置标记的PDF选项。 如果输入文件是XDP文件,则可以设置标记的PDF选项。URLSpec
对象,其中包含Forms服务所需的URI值。java.util.HashMap
对象。 这是一个可选参数,如果您不想将文件附加到表单,可以指定null
。com.adobe.idp.services.holders.BLOBHolder
对象。 此参数用于存储渲染的表单。javax.xml.rpc.holders.LongHolder
对象。 此参数将以表单存储页数。javax.xml.rpc.holders.StringHolder
对象。 此参数将存储区域设置值。com.adobe.idp.services.holders.FormsResultHolder
对象。renderPDFForm
方法使用必须写入客户端Web浏览器的表单数据流填充作为最后一个参数值传递的com.adobe.idp.services.holders.FormsResultHolder
对象。
将表单数据流写入客户端Web浏览器
com.adobe.idp.services.holders.FormsResultHolder
对象value
数据成员的值,创建FormResult
对象。FormsResult
对象的getOutputContent
方法,创建包含表单数据的BLOB
对象。getContentType
方法获取BLOB
对象的内容类型。setContentType
方法并传递BLOB
对象的内容类型来设置javax.servlet.http.HttpServletResponse
对象的内容类型。javax.servlet.http.HttpServletResponse
对象的getOutputStream
方法,创建一个javax.servlet.ServletOutputStream
对象,用于将表单数据流写入客户端Web浏览器。BLOB
对象的getBinaryData
方法来填充该数组。 此任务将FormsResult
对象的内容分配给字节数组。javax.servlet.http.HttpServletResponse
对象的write
方法,将表单数据流发送到客户端Web浏览器。 将字节数组传递到write
方法。另请参阅