本文档中的示例和示例仅适用于AEM Forms on JEE环境。
Forms服务可以渲染基于您使用Designer创建的片段的表单。 A 片段 是表单的可重用部分,并另存为可插入到多个表单设计中的单独XDP文件。 例如,片段可以包含地址块或合法文本。
使用片段可简化并加速大量表单的创建和维护。 创建新表单时,插入对所需片段的引用,片段将显示在表单中。 片段引用包含指向物理XDP文件的子表单。 有关基于片段创建表单设计的信息,请参阅 Forms设计器
一个片段可以包含多个包在选择子表单集中的子表单。 选择子表单集根据来自数据连接的数据流控制子表单的显示。 可使用条件语句确定集合中的哪个子表单出现在交付的表单中。 例如,集合中的每个子表单可以包含特定地理位置的信息,并且显示的子表单可以根据用户的位置确定。
A 脚本片段 包含可重复使用的JavaScript函数或与任何特定对象(如日期解析器或Web服务调用)分开存储的值。 这些片段包括一个脚本对象,该对象在层次结构面板中显示为变量的子项。 无法从作为其他对象属性的脚本(如验证、计算或初始化等事件脚本)创建片段。
使用片段的优点如下:
您可以组合表单设计,以基于多个片段传递到Forms服务。 要组装多个片段,请使用Assembler服务。 要查看使用Assemble服务创建其他Forms服务(Output服务)使用的表单设计的示例,请参阅 使用片段创建PDF文档. 您可以使用Forms服务执行相同的工作流,而不是使用输出服务。
使用Assembler服务时,传递使用片段装配的表单设计。 创建的表单设计未引用其他片段。 相反,本主题讨论将引用其他片段的表单设计传递到Forms服务。 然而,Assembler没有组装表单设计。 它是在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浏览器
com.adobe.idp.Document
对象 FormsResult
对象 getOutputContent
方法。com.adobe.idp.Document
对象,调用其 getContentType
方法。javax.servlet.http.HttpServletResponse
对象的内容类型(通过调用其 setContentType
方法和传递的内容类型 com.adobe.idp.Document
对象。javax.servlet.ServletOutputStream
用于通过调用 javax.servlet.http.HttpServletResponse
对象的 getOutputStream
方法。java.io.InputStream
对象 com.adobe.idp.Document
对象的 getInputStream
方法。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
存储运行时选项的对象。 请注意,如果输入文档是PDFPDF,则无法设置标记文档选项。 如果输入文件是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
方法填充 com.adobe.idp.services.holders.FormsResultHolder
作为最后一个参数值(具有必须写入客户端Web浏览器的表单数据流)传递的对象。
将表单数据流写入客户端Web浏览器
FormResult
对象,方法是获取 com.adobe.idp.services.holders.FormsResultHolder
对象的 value
数据成员。BLOB
通过调用 FormsResult
对象的 getOutputContent
方法。BLOB
对象,调用其 getContentType
方法。javax.servlet.http.HttpServletResponse
对象的内容类型(通过调用其 setContentType
方法和传递的内容类型 BLOB
对象。javax.servlet.ServletOutputStream
用于通过调用 javax.servlet.http.HttpServletResponse
对象的 getOutputStream
方法。BLOB
对象的 getBinaryData
方法。 此任务分配 FormsResult
对象。javax.servlet.http.HttpServletResponse
对象的 write
方法将表单数据流发送到客户端Web浏览器。 将字节数组传递到 write
方法。另请参阅