使用已提交的XML数据创建PDF文档

本文档中的示例和示例仅适用于JEE环境上的AEM Forms。

使用已提交的XML数据创建PDF文档

使用户能够填写交互式表单的基于Web的应用程序需要将数据提交回服务器。 使用Forms服务,您可以检索用户在交互式表单中输入的表单数据。 然后,您可以将表单数据传递到另一个AEM Forms服务操作,并使用该数据创建PDF文档。

注意

在阅读此内容之前,建议您对处理已提交表单有一定的了解。 表单设计与提交的XML数据之间的关系等概念在处理提交的Forms中进行了介绍。

请考虑以下涉及三个AEM Forms服务的工作流:

  • 用户从基于Web的应用程序向Forms服务提交XML数据。
  • Forms服务用于处理提交的表单和提取表单字段。 可以处理表单数据。 例如,数据可提交到企业数据库。
  • 表单数据将发送到输出服务以创建非交互式PDF文档。
  • 非交互式PDF文档存储在Content Services(已弃用)中。

下图提供了此工作流的直观表示形式。

cd_cd_finsrv_architecture_xml_pdf1

用户从客户端Web浏览器提交表单后,非交互式PDF文档将存储在Content Services(已弃用)中。 下图显示了存储在Content Services中的PDF文档(已弃用)。

cd_cd_cs_gui

步骤的摘要

要使用提交的XML数据创建非交互式PDF文档并存储在Content Services的PDF文档中(已弃用),请执行以下任务:

  1. 包括项目文件。
  2. 创建Forms、输出和文档管理对象。
  3. 使用Forms服务检索表单数据。
  4. 使用“输出”服务创建非交互式PDF文档。
  5. 使用文档管理服务将PDF表单存储在Content Services(已弃用)中。

包括项目文件

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

创建Forms、输出和文档管理对象

在以编程方式执行Forms服务API操作之前,请先创建Forms Client API对象。 同样,由于此工作流调用输出和文档管理服务,因此请同时创建输出客户端API对象和文档管理客户端API对象。

使用Forms服务检索表单数据

检索已提交到Forms服务的表单数据。 您可以处理提交的数据以满足您的业务需求。 例如,您可以将表单数据存储在企业数据库中。 但是,要创建非交互式PDF文档,表单数据将传递到输出服务。

使用“输出”服务创建非交互式PDF文档。

使用“输出”服务创建基于表单设计和XML表单文档的非交互式PDF文档。 在工作流中,从Forms服务检索表单数据。

使用文档管理服务将PDF表单存储在Content Services(已弃用)中

使用文档管理服务API在Content Services中存储PDF文档(已弃用)。

另请参阅

包括AEM Forms Java库文件

设置连接属性

Forms Service API快速开始

使用Java API使用提交的XML数据创建PDF文档

使用Forms、输出和文档管理API(Java),使用提交的XML数据创建PDF文档:

  1. 包括项目文件

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

  2. 创建Forms、输出和文档管理对象

    • 创建包含连接属性的ServiceClientFactory对象。
    • 使用FormsServiceClient对象的构造函数并传递ServiceClientFactory对象,创建对象。
    • 使用OutputClient对象的构造函数并传递ServiceClientFactory对象,创建对象。
    • 使用DocumentManagementServiceClientImpl对象的构造函数并传递ServiceClientFactory对象,创建对象。
  3. 使用Forms服务检索表单数据

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

      • 包含表单数据的com.adobe.idp.Document对象。
      • 一个字符串值,它指定环境变量,包括所有相关的HTTP头。 通过为CONTENT_TYPE环境变量指定一个或多个值,指定要处理的内容类型。 例如,要处理XML数据,请为此参数指定以下字符串值:CONTENT_TYPE=text/xml
      • 一个字符串值,它指定HTTP_USER_AGENT标头值,如Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
      • 存储运行时选项的RenderOptionsSpec对象。

      processFormSubmission方法返回包含表单提交结果的FormsResult对象。

    • 通过调用FormsResult对象的getAction方法,确定Forms服务是否已完成处理表单数据。 如果此方法返回值0,则数据已准备好进行处理。

    • 通过调用FormsResult对象的getOutputContent方法创建com.adobe.idp.Document对象来检索表单数据。 (此对象包含可发送到输出服务的表单数据。)

    • 通过调用java.io.DataInputStream构造函数并传递com.adobe.idp.Document对象,创建java.io.InputStream对象。

    • 通过调用静态org.w3c.dom.DocumentBuilderFactory对象的newInstance方法创建org.w3c.dom.DocumentBuilderFactory对象。

    • 通过调用org.w3c.dom.DocumentBuilderFactory对象的newDocumentBuilder方法创建org.w3c.dom.DocumentBuilder对象。

    • 通过调用org.w3c.dom.DocumentBuilder对象的parse方法并传递java.io.InputStream对象,创建org.w3c.dom.Document对象。

    • 检索XML文档中每个节点的值。 实现此任务的一种方法是创建接受两个参数的自定义方法:org.w3c.dom.Document对象以及要检索其值的节点的名称。 此方法返回表示节点值的字符串值。 在此过程后面的代码示例中,此自定义方法称为getNodeText。 此方法的正文显示。

  4. 使用“输出”服务创建非交互式PDF文档。

    通过调用OutputClient对象的generatePDFOutput方法并传递以下值,创建PDF文档:

    • TransformationFormat枚举值。 要生成PDF文档,请指定TransformationFormat.PDF
    • 一个字符串值,它指定表单设计的名称。 确保表单设计与从Forms服务检索的表单数据兼容。
    • 一个字符串值,它指定表单设计所在的内容根。
    • 包含PDF运行时选项的PDFOutputOptionsSpec对象。
    • 包含渲染运行时选项的RenderOptionsSpec对象。
    • com.adobe.idp.Document对象,它包含要与表单设计合并的数据的XML数据源。 确保此对象由FormsResult对象的getOutputContent方法返回。
    • generatePDFOutput方法返回包含操作结果的OutputResult对象。
    • 通过调用OutputResult对象的getGeneratedDoc方法检索非交互式PDF文档。 此方法返回一个com.adobe.idp.Document实例,它表示非交互式PDF文档。
  5. 使用文档管理服务将PDF表单存储在Content Services(已弃用)中

    通过调用DocumentManagementServiceClientImpl对象的storeContent方法并传递以下值来添加内容:

    • 一个字符串值,它指定添加内容的存储。 默认存储为SpacesStore。 此值是必需参数。
    • 一个字符串值,它指定添加内容的空间的完全限定路径(例如/Company Home/Test Directory)。 此值是必需参数。
    • 表示新内容的节点名称(例如MortgageForm.pdf)。 此值是必需参数。
    • 指定节点类型的字符串值。 要添加新内容(如PDF文件),请指定{https://www.alfresco.org/model/content/1.0}content。 此值是必需参数。
    • 表示内容的com.adobe.idp.Document对象。 此值是必需参数。
    • 一个字符串值,它指定编码值(例如UTF-8)。 此值是必需参数。
    • 一个UpdateVersionType明细列表值,它指定如何处理版本信息(例如,UpdateVersionType.INCREMENT_MAJOR_VERSION)以增加内容版本。 )此值是必需参数。
    • 一个java.util.List实例,它指定与内容相关的方面。 此值是可选参数,您可以指定null
    • 存储内容属性的java.util.Map对象。

    storeContent方法返回描述内容的CRCResult对象。 例如,使用CRCResult对象,您可以获取内容的唯一标识符值。 要执行此任务,请调用CRCResult对象的getNodeUuid方法。

另请参阅

包括AEM Forms Java库文件

设置连接属性

在此页面上

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