基于片段渲染Forms

基于片段渲染Forms

Forms服务可以渲染基于您使用Designer创建的片段的表单。 fragment​是表单的可重用部分,将其保存为可插入到多个表单设计中的单独XDP文件。 例如,片段可以包括地址块或合法文本。

使用片段可简化和加快大量表单的创建和维护。 创建新表单时,您插入对所需片段的引用,该片段将显示在表单中。 片段引用包含指向物理XDP文件的子表单。 有关创建基于片段的表单设计的信息,请参阅Forms Designer

片段可以包括多个子表单,这些子表单包装在所选子表单集中。 选择子表单集基于来自数据连接的数据流来控制子表单的显示。 您使用条件语句确定集合中显示的子表单在已提交表单中。 例如,集合中的每个子表单可以包括特定地理位置的信息,并且所显示的子表单可以基于用户的位置来确定。

脚本片段​包含可重用的JavaScript函数或值,这些函数或值与任何特定对象(如日期分析器或Web服务调用)分开存储。 这些片段包括单个脚本对象,该对象在“层次结构”调板中显示为变量的子对象。 不能从其他对象(如验证、计算或初始化等事件脚本)的属性脚本创建片段。

以下是使用片段的优势:

  • 内容重用:您可以使用片段在多个表单设计中重复使用内容。当您需要在多个表单中使用某些相同的内容时,使用片段比复制或重新创建内容更快、更简单。 使用片段还可确保表单设计中经常使用的部分在所有引用表单中具有一致的内容和外观。
  • 全局更新:您只能使用片段对一个文件中的多个表单进行一次全局更改。您可以更改片段中的内容、脚本对象、数据绑定、布局或样式,引用片段的所有XDP表单都将反映更改。
  • 例如,跨多种形式的公用元素可能是一个地址块,其中包含国家/地区的下拉列表对象。 如果需要更新下拉式列表对象的值,则必须打开多个表单才能进行更改。 如果将地址块包含在片段中,则只需打开一个片段文件即可进行更改。
  • 要更新PDF表单中的片段,您必须在Designer中重新保存表单。
  • 共享表单创建:您可以使用片段在多个资源之间共享表单的创建。具备脚本或其他高级功能的表单开发人员可以开发和共享利用脚本和动态属性的片段。 表单设计人员可以使用这些片段对表单设计进行布局,并确保表单的所有部分在由多人设计的多个表单上具有一致的外观和功能。

使用片段组装表单设计

您可以组合一个表单设计,以基于多个片段传递到Forms服务。 要组合多个片段,请使用Assembler服务。 要查看使用Assemble服务创建供其他Forms服务(Output服务)使用的表单设计的示例,请参阅使用片段创建PDF文档。 您可以使用Forms服务执行相同的工作流,而不是使用输出服务。

使用Assembler服务时,您正在传递使用片段组合的表单设计。 创建的表单设计不引用其他片段。 与此相反,本主题讨论如何传递引用其他片段到Forms服务的表单设计。 但是,表单设计不是由Assembler装配的。 它是在Designer中创建的。

注意

有关Forms服务的详细信息,请参阅AEM Forms的服务参考。

注意

有关创建基于Web的应用程序以根据片段呈现表单的信息,请参阅创建呈现Forms的Web 应用程序

步骤的摘要

要渲染基于片段的表单,请执行以下任务:

  1. 包括项目文件。
  2. 创建Forms Client API对象。
  3. 指定URI值。
  4. 渲染表单。
  5. 将表单数据流写入客户端Web浏览器。

包括项目文件

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

创建Forms Client API对象

在以编程方式执行Forms服务客户端API操作之前,必须创建Forms服务客户端。

指定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浏览器时,用户可以看到表单。

另请参阅

使用Java API根据片段渲染表单

使用Web服务API根据片段渲染表单

包括AEM Forms Java库文件

设置连接属性

Forms Service API快速开始

渲染交互式PDF forms

创建渲染Forms的Web 应用程序

使用Java API根据片段渲染表单

使用Forms API(Java)渲染基于片段的表单:

  1. 包括项目文件

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

  2. 创建Forms Client API对象

    • 创建包含连接属性的ServiceClientFactory对象。
    • 使用FormsServiceClient对象的构造函数并传递ServiceClientFactory对象,创建对象。
  3. 指定URI值

    • 创建一个URLSpec对象,该对象使用其构造函数存储URI值。
    • 调用URLSpec对象的setApplicationWebRoot方法并传递一个字符串值,该值表示应用程序的Web根目录。
    • 调用URLSpec对象的setContentRootURI方法并传递一个指定内容根URI值的字符串值。 确保表单设计和片段位于内容根URI中。 否则,Forms服务将引发异常。 要引用存储库,请指定repository://
    • 调用URLSpec对象的setTargetURL方法并传递一个字符串值,该字符串值指定将表单目标发布到的位置。 如果在表单设计中定义目标URL,则可以传递空字符串。 您还可以指定将表单发送到的URL以执行计算。
  4. 渲染表单

    调用FormsServiceClient对象的renderPDFForm方法并传递以下值:

    • 一个字符串值,它指定表单设计名称,包括文件扩展名。 如果引用的表单设计是Forms应用程序的一部分,请确保指定完整路径,如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浏览器的表单数据流。

  5. 将表单数据流写入客户端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方法,创建一个用于将表单数据流写入客户端Web浏览器的javax.servlet.ServletOutputStream对象。
    • 通过调用com.adobe.idp.Document对象的getInputStream方法创建java.io.InputStream对象。
    • 通过调用InputStream对象的read方法并将字节数组作为参数传递,创建一个用表单数据流填充它的字节数组。
    • 调用javax.servlet.ServletOutputStream对象的write方法,将表单数据流发送到客户端Web浏览器。 将字节数组传递给write方法。

另请参阅

渲染基于片段的Forms

快速开始(SOAP模式):使用Java API渲染基于片段的表单

包括AEM Forms Java库文件

设置连接属性

使用Web服务API基于片段渲染表单

使用Forms API(Web服务)渲染基于片段的表单:

  1. 包括项目文件

    • 创建使用Forms服务WSDL的Java代理类。
    • 将Java代理类包含到类路径中。
  2. 创建Forms Client API对象

    创建FormsService对象并设置身份验证值。

  3. 指定URI值

    • 使用其构造函数创建存储URI值的URLSpec对象。
    • 调用URLSpec对象的setApplicationWebRoot方法并传递一个字符串值,该值表示应用程序的Web根目录。
    • 调用URLSpec对象的setContentRootURI方法并传递一个指定内容根URI值的字符串值。 确保表单设计位于内容根URI中。 否则,Forms服务将引发异常。 要引用存储库,请指定repository://
    • 调用URLSpec对象的setTargetURL方法并传递一个字符串值,该字符串值指定将表单目标发布到的位置。 如果在表单设计中定义目标URL,则可以传递空字符串。 您还可以指定将表单发送到的URL以执行计算。
  4. 渲染表单

    调用FormsService对象的renderPDFForm方法并传递以下值:

    • 一个字符串值,它指定表单设计名称,包括文件扩展名。 如果引用的表单设计是Forms应用程序的一部分,请确保指定完整路径,如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对象。

  5. 将表单数据流写入客户端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方法,创建一个用于将表单数据流写入客户端Web浏览器的javax.servlet.ServletOutputStream对象。
    • 创建一个字节数组,并通过调用BLOB对象的getBinaryData方法填充它。 此任务将FormsResult对象的内容分配给字节数组。
    • 调用javax.servlet.http.HttpServletResponse对象的write方法,将表单数据流发送到客户端Web浏览器。 将字节数组传递给write方法。

另请参阅

渲染基于片段的Forms

使用Base64编码调用AEM Forms

On this page

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