您可以使用Acrobat或Adobe Reader的客户端渲染功能,优化PDF内容的交付,并提高Forms服务处理网络负载的能力。 此过程称为在客户端渲染表单。 要在客户端渲染表单,客户端设备(通常为Web浏览器)必须使用Acrobat 7.0或Adobe Reader 7.0或更高版本。
服务器端脚本执行对表单所做的更改不会反映在呈现在客户端的表单中,除非根子表单包含设置为auto
的restoreState
属性。 有关此属性的更多信息,请参阅Forms Designer。
有关Forms服务的更多信息,请参阅AEM Forms的服务参考。
要在客户端渲染表单,请执行以下任务:
包含项目文件
在开发项目中包含必需的文件。 如果您使用Java创建客户端应用程序,请包含必需的JAR文件。 如果您使用的是Web服务,请确保包含代理文件。
创建Forms客户端API对象
您必须先创建Forms服务客户端,然后才能以编程方式执行Forms服务客户端API操作。 如果您使用的是Java API,请创建一个FormsServiceClient
对象。 如果您使用的是Forms Web服务API,请创建一个FormsService
对象。
设置客户端渲染运行时选项
您必须设置客户端渲染运行时选项以在客户端渲染表单,方法是将RenderAtClient
运行时选项设置为true
。 这会导致表单被传送到呈现表单的客户端设备。 如果RenderAtClient
为auto
(默认值),则表单设计将确定表单是否在客户端呈现。 表单设计必须是具有可流动布局的表单设计。
可设置的可选运行时选项是SeedPDF
选项。 SeedPDF
选项将PDF容器(种子PDF文档)与表单设计和XML数据结合使用。 表单设计和XML数据都会交付到Acrobat或Adobe Reader,表单会在其中呈现。 当客户端计算机没有表单中使用的字体时(例如,未授权最终用户使用表单所有者有权使用的字体),可以使用SeedPDF
选项。
您可以使用Designer创建简单的动态PDF文件,以用作种子PDF文件。 执行此任务需要执行以下步骤:
您无需定义种子PDF运行时选项即可在客户端上渲染表单。 如果您没有指定种子PDF,Forms服务将创建一个外壳PDF,该外壳PDF将不包含COS对象,但将包含一个PDF包装器,其中嵌入了实际的XDP内容。 本节中的步骤不会设置种子PDF运行时选项。 有关COS对象的信息,请参阅《Adobe PDF参考指南》。
在客户端渲染表单
要在客户端渲染表单,必须确保在渲染表单的应用程序逻辑中包含客户端渲染运行时选项。
将表单数据流写入客户端Web浏览器
Forms服务会创建一个必须写入客户端Web浏览器的表单数据流。 将表单写入客户端Web浏览器后,表单将由Acrobat 7.0或Adobe Reader 7.0或更高版本呈现,并且对用户可见。
另请参阅
使用Forms API(Java)在客户端渲染表单:
包含项目文件
在Java项目的类路径中包含客户端JAR文件,如adobe-forms-client.jar。
创建Forms客户端API对象
ServiceClientFactory
对象。FormsServiceClient
对象,并传递ServiceClientFactory
对象。设置客户端渲染运行时选项
PDFFormRenderSpec
对象的构造函数创建对象。PDFFormRenderSpec
对象的setRenderAtClient
方法并传递枚举值RenderAtClient.Yes
来设置RenderAtClient
运行时选项。在客户端渲染表单
调用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
对象并设置身份验证值。
设置客户端渲染运行时选项
PDFFormRenderSpec
对象的构造函数创建对象。PDFFormRenderSpec
对象的setRenderAtClient
方法并传递字符串值RenderAtClient.Yes
来设置RenderAtClient
运行时选项。在客户端渲染表单
调用FormsService
对象的renderPDFForm
方法并传递以下值:
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
对象。
将表单数据流写入客户端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
方法。另请参阅