创建PDF文档

您可以使用Output服务创建基于表单设计和您提供的XML表单数据的PDF文档。 Output服务创建的PDF文档不是交互式PDF文档;用户无法输入或修改表单数据。

如果要创建用于长期存储的PDF文档,建议您创建一个PDF/A文档。 (请参阅创建PDF/A文档。)

要创建可让用户输入数据的交互式PDF表单,请使用Forms服务。 (请参阅渲染交互式PDF forms。)

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

步骤摘要

要创建PDF文档,请执行以下步骤:

  1. 包括项目文件。
  2. 创建输出客户端对象。
  3. 引用XML数据源。
  4. 设置PDF运行时选项。
  5. 设置渲染运行时选项。
  6. 生成PDF文档。
  7. 检索操作的结果。

包含项目文件

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

必须将以下JAR文件添加到项目的类路径中:

  • adobe-livecycle-client.jar
  • adobe-usermanager-client.jar
  • adobe-output-client.jar
  • adobe-utilities.jar (如果在JBoss上部署了AEM Forms,则此为必填字段)
  • jbossall-client.jar(如果在JBoss上部署了AEM Forms,则此为必填字段)

如果将AEM Forms部署在受支持的J2EE应用程序服务器而不是JBoss上,则必须将adobe-utilities.jar和jbossall-client.jar文件替换为特定于已部署AEM Forms的J2EE应用程序服务器的JAR文件。

创建输出客户端对象

必须先创建输出服务客户端对象,然后才能以编程方式执行输出服务操作。 如果您使用的是Java API,请创建一个OutputClient对象。 如果您使用输出Web服务API,请创建一个OutputServiceService对象。

引用XML数据源

要将数据与表单设计合并,必须引用包含数据的XML数据源。 您计划使用数据填充的每个表单字段都必须存在XML元素。 XML元素名称必须与字段名称匹配。 如果XML元素与表单字段不对应,或者如果XML元素名称与字段名称不匹配,则忽略该元素。 如果指定了所有XML元素,则不必匹配XML元素的显示顺序。

考虑以下示例贷款申请表。

cp_cp_loanformdata

要将数据合并到此表单设计,必须创建与表单相对应的XML数据源。 以下XML表示与示例抵押应用程序表单相对应的XDP XML数据源。

 <?xml version="1.0" encoding="UTF-8" ?>
 - <xfa:datasets xmlns:xfa="https://www.xfa.org/schema/xfa-data/1.0/">
 - <xfa:data>
 - <data>
     - <Layer>
         <closeDate>1/26/2007</closeDate>
         <lastName>Johnson</lastName>
         <firstName>Jerry</firstName>
         <mailingAddress>JJohnson@NoMailServer.com</mailingAddress>
         <city>New York</city>
         <zipCode>00501</zipCode>
         <state>NY</state>
         <dateBirth>26/08/1973</dateBirth>
         <middleInitials>D</middleInitials>
         <socialSecurityNumber>(555) 555-5555</socialSecurityNumber>
         <phoneNumber>5555550000</phoneNumber>
     </Layer>
     - <Mortgage>
         <mortgageAmount>295000.00</mortgageAmount>
         <monthlyMortgagePayment>1724.54</monthlyMortgagePayment>
         <purchasePrice>300000</purchasePrice>
         <downPayment>5000</downPayment>
         <term>25</term>
         <interestRate>5.00</interestRate>
     </Mortgage>
 </data>
 </xfa:data>
 </xfa:datasets>

设置PDF运行时选项

创建PDF文档时设置文件URI选项。 此选项指定Output服务生成的PDF文件的名称和位置。

注意
您可以用编程方式从输出服务返回的复杂数据类型检索PDF文档,而不是设置文件URI运行时选项。 但是,通过设置文件URI运行时选项,您无需创建以编程方式检索PDF文档的应用程序逻辑。

设置渲染运行时选项

创建PDF文档时,可以设置渲染运行时选项。 虽然这些选项不是必需的(与所需的PDF运行时选项不同),但您可以执行诸如提高输出服务性能的任务。 例如,您可以缓存Output服务用于提高性能的表单设计。

如果您使用已标记的Acrobat表单作为输入,则无法使用输出服务Java或Web服务API来关闭已标记的设置。 如果您尝试以编程方式将此选项设置为false,则仍会标记结果PDF文档。

注意
如果未指定渲染运行时选项,则使用默认值。 有关渲染运行时选项的信息,请参阅RenderOptionsSpec类引用。 (请参阅AEM Forms API引用)。

生成PDF文档

在引用包含表单数据的有效XML数据源并设置运行时选项后,可以调用Output服务,从而生成PDF文档。

在生成PDF文档时,您可以指定Output服务创建PDF文档所需的URI值。 窗体设计可以存储在服务器文件系统等位置或作为AEM Forms应用程序的一部分进行存储。 可以使用内容根URI值repository:///引用作为Forms应用程序一部分的表单设计(或其他资源,如图像文件)。 例如,考虑位于名为​ Applications/FormsApplication ​的Forms应用程序中的以下名为​ Loan.xdp ​的表单设计:

cp_cp_formrepository

要访问上图所示的Loan.xdp文件,请将repository:///Applications/FormsApplication/1.0/FormsFolder/指定为传递给OutputClient对象的generatePDFOutput方法的第三个参数。 将表单名称(Loan.xdp)指定为传递给OutputClient对象的generatePDFOutput方法的第二个参数。

如果XDP文件包含图像(或其他资源,如片段),请将资源放置在与XDP文件相同的应用程序文件夹中。 AEM Forms使用内容根URI作为基本路径来解析对图像的引用。 例如,如果Loan.xdp文件包含图像,请确保将该图像放在Applications/FormsApplication/1.0/FormsFolder/中。

注意
调用OutputClient对象的generatePDFOutputgeneratePrintedOutput方法时,您可以引用Forms应用程序URI。
注意
要查看通过引用Forms应用程序中的XDP来创建PDF文档的完整快速入门,请参阅快速入门(EJB模式):使用Java API基于应用程序XDP文件创建PDF文档

检索操作的结果

在Output服务执行操作之后,它会返回各种数据项,如指定操作是否成功的状态XML数据。

另请参阅

使用Java API创建PDF文档

使用Web服务API创建PDF文档

包括AEM Forms Java库文件

设置连接属性

输出服务API快速启动

使用Java API创建PDF文档

使用输出API (Java)创建PDF文档:

  1. 包括项目文件。

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

  2. 创建输出客户端对象。

    • 创建包含连接属性的ServiceClientFactory对象。
    • 使用构造函数创建OutputClient对象并传递ServiceClientFactory对象。
  3. 引用XML数据源。

    • 创建一个java.io.FileInputStream对象,该对象表示用于填充PDF文档的XML数据源,方法是使用其构造函数并传递一个指定XML文件位置的字符串值。
    • 使用构造函数创建com.adobe.idp.Document对象。 传递java.io.FileInputStream对象。
  4. 设置PDF运行时选项。

    • 使用构造函数创建PDFOutputOptionsSpec对象。
    • 通过调用PDFOutputOptionsSpec对象的setFileURI方法来设置文件URI选项。 传递一个字符串值,该值指定Output服务生成的PDF文件的位置。 文件URI选项相对于托管AEM Forms的J2EE应用程序服务器,而不是客户端计算机。
  5. 设置渲染运行时选项。

    • 使用构造函数创建RenderOptionsSpec对象。
    • 通过调用RenderOptionsSpec对象的setCacheEnabled并传递true,缓存表单设计以提高输出服务的性能。
    注意
    如果输入文档是Acrobat表单(在Acrobat中创建的表单)或已签名或认证的XFA文档,则无法使用RenderOptionsSpec对象的setPdfVersion方法设置PDF文档的版本。 输出PDF文档保留原始PDF版本。 同样,如果输入文档是Acrobat表单或已签名或认证的XFA文档,则无法通过调用RenderOptionsSpec对象的setTaggedPDF方法来设置已标记的Adobe PDF选项。
    注意
    如果输入PDF文档经过验证或数字签名,则不能使用RenderOptionsSpec对象的setLinearizedPDF方法设置线性化PDF选项。 (请参阅对PDF文档进行数字签名​。)
  6. 生成PDF文档。

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

    • TransformationFormat枚举值。 要生成PDF文档,请指定TransformationFormat.PDF
    • 一个字符串值,它指定窗体设计的名称。
    • 一个字符串值,它指定表单设计所在的内容根。
    • 包含PDF运行时选项的PDFOutputOptionsSpec对象。
    • 包含渲染运行时选项的RenderOptionsSpec对象。
    • 包含要与表单设计合并的数据的XML数据源的com.adobe.idp.Document对象。

    generatePDFOutput方法返回包含该操作结果的OutputResult对象。

    注意
    通过调用generatePDFOutput方法生成PDF文档时,不能将数据与已签署或已验证的XFAPDF表单合并。 (请参阅对文档进行数字签名和认证​。)
    注意
    OutputResult对象的getRecordLevelMetaDataList方法返回​null.
    注意
    您还可以通过调用OutputClient对象的generatePDFOutput2方法创建PDF文档。 (请参阅将Content Services中的文档(已弃用)传递给输出服务​。)
  7. 检索操作的结果。

    • 通过调用OutputResult对象的getStatusDoc方法,检索表示generatePDFOutput操作状态的com.adobe.idp.Document对象。 此方法返回指定操作是否成功的状态XML数据。
    • 创建包含操作结果的java.io.File对象。 确保文件扩展名为.xml。
    • 调用com.adobe.idp.Document对象的copyToFile方法以将com.adobe.idp.Document对象的内容复制到文件中(确保您使用getStatusDoc方法返回的com.adobe.idp.Document对象)。

    虽然Output服务将PDF文档写入传递到PDFOutputOptionsSpec对象的setFileURI方法的参数指定的位置,但可以通过调用OutputResult对象的getGeneratedDoc方法以编程方式检索PDF/A文档。