在客户端处呈现Forms

在客户端处呈现Forms

您可以使用Acrobat或Adobe Reader的客户端渲染功能优化PDF内容的投放并改进Forms服务处理网络负载的能力。 此过程称为在客户端渲染表单。 要在客户端渲染表单,客户端设备(通常是Web浏览器)必须使用Acrobat 7.0或Adobe Reader 7.0或更高版本。

服务器端脚本执行对表单所做的更改不会反映在客户端呈现的表单中,除非根子表单包含设置为autorestoreState属性。 有关此属性的详细信息,请参阅Forms Designer。

注意

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

步骤的摘要

要在客户端渲染表单,请执行以下任务:

  1. 包括项目文件。
  2. 创建Forms Client API对象。
  3. 设置客户端渲染运行时选项。
  4. 在客户端渲染表单。
  5. 将表单写入客户端Web浏览器。

包括项目文件

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

创建Forms Client API对象

在以编程方式执行Forms服务客户端API操作之前,必须创建Forms服务客户端。 如果您使用Java API,请创建FormsServiceClient对象。 如果您使用Forms Web服务API,请创建FormsService对象。

设置客户端渲染运行时选项

您必须设置客户端渲染运行时选项,以通过将RenderAtClient运行时选项设置为true在客户端渲染表单。 这会导致表单被传送到呈现表单的客户端设备。 如果RenderAtClientauto(默认值),则表单设计将确定表单是否在客户端呈现。 表单设计必须是具有可流动布局的表单设计。

可以设置的可选运行时选项是SeedPDF选项。 SeedPDF选项将PDF容器(种子PDF文档)与表单设计和XML数据相结合。 表单设计和XML数据都会交付到Acrobat或Adobe Reader,在那里可以呈现表单。 当客户端计算机中没有表单中使用的字体时(例如,当最终用户未获得使用表单所有者有权使用的字体的许可时),可以使用SeedPDF选项。

您可以使用设计器创建简单的动态PDF文件,以用作种子PDF文件。 执行此任务需要执行以下步骤:

  1. 确定是否需要在种子PDF文件中嵌入任何字体。 种子PDF文件需要包含要渲染的表单所需的其他字体。 在将字体嵌入种子PDF文件时,请确保您没有违反任何字体许可协议。 在Designer中,您可以确定是否可以合法嵌入字体。 在保存时,如果存在无法嵌入到表单中的字体,Designer会显示一条消息,其中列出了您无法嵌入的字体。 对于静态PDF文档,此消息不在Designer中显示。
  2. 如果您是在Designer中创建种子PDF文件,建议至少添加一个包含消息的文本字段。 此消息应针对Adobe Reader早期版本的用户,这些用户声明他们需要Acrobat 7.0或更高版本,或Adobe Reader 7.0或更高版本才能视图文档。
  3. 将种子PDF文件另存为具有PDF文件扩展名的动态PDF文件。
注意

您无需定义种子PDF运行时选项即可在客户端上渲染表单。 如果未指定种子PDF,Forms服务将创建一个外壳pdf,它将不包含COS对象,但将包含一个PDF包装器,实际XDP内容嵌入其中。 本节中的步骤不会设置种子PDF运行时选项。 有关COS对象的信息,请参阅《Adobe PDF参考指南》。

在客户端上呈现表单

要在客户端渲染表单,必须确保在渲染表单时应用程序逻辑中包含客户端渲染运行时选项。

将表单数据流写入客户端Web浏览器

Forms服务会创建一个表单数据流,您必须将其写入客户端Web浏览器。 当写入到客户端Web浏览器时,表单由Acrobat 7.0或Adobe Reader 7.0或更高版本渲染,并且对用户可见。

另请参阅

使用Java API在客户端渲染表单

使用Web服务API在客户端渲染表单

包括AEM Forms Java库文件

设置连接属性

Forms Service API快速开始

将文档传递到Forms服务

创建渲染Forms的Web 应用程序

使用Java API在客户端渲染表单

使用Forms API(Java)在客户端渲染表单:

  1. 包括项目文件

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

  2. 创建Forms Client API对象

    • 创建包含连接属性的ServiceClientFactory对象。
    • 使用FormsServiceClient对象的构造函数并传递ServiceClientFactory对象,创建对象。
  3. 设置客户端渲染运行时选项

    • 使用PDFFormRenderSpec对象的构造函数创建对象。
    • 通过调用PDFFormRenderSpec对象的setRenderAtClient方法并传递枚举值RenderAtClient.Yes来设置RenderAtClient运行时选项。
  4. 在客户端上呈现表单

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

    • 一个字符串值,它指定表单设计名称,包括文件扩展名。 如果引用的表单设计是AEM 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方法。

另请参阅

快速开始(SOAP模式):使用Java API在客户端呈现表单

包括AEM Forms Java库文件

设置连接属性

使用Web服务API在客户端渲染表单

使用Forms API(Web服务)在客户端渲染表单:

  1. 包括项目文件

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

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

  3. 设置客户端渲染运行时选项

    • 使用PDFFormRenderSpec对象的构造函数创建对象。
    • 通过调用PDFFormRenderSpec对象的setRenderAtClient方法并传递字符串值RenderAtClient.Yes来设置RenderAtClient运行时选项。
  4. 在客户端上呈现表单

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

    • 一个字符串值,它指定表单设计名称,包括文件扩展名。 如果引用的表单设计是Forms应用程序的一部分,请确保指定完整路径,如Applications/FormsApplication/1.0/FormsFolder/Loan.xdp
    • BLOB对象,其中包含要与表单合并的数据。 如果不想合并数据,请传递null。 (请参阅使用可流式布局预填充Forms。)
    • 一个PDFFormRenderSpec对象,用于存储在客户端呈现表单所需的运行时选项。
    • URLSpec对象,其中包含Forms服务所需的URI值。
    • 存储文件附件的java.util.HashMap对象。 这是可选参数,如果不想将文件附加到表单,可以指定null
    • 由方法填充的空com.adobe.idp.services.holders.BLOBHolder对象。 此参数用于存储呈现的PDF表单。
    • 由方法填充的空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 Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
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