创建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文档。

使用Web服务API创建PDF文档

使用输出API(Web服务)创建PDF文档:

  1. 包括项目文件。

    创建使用MTOM的Microsoft .NET项目。 确保使用以下WSDL定义: http://localhost:8080/soap/services/OutputService?WSDL&lc_version=9.0.1

    注意
    localhost替换为承载AEM Forms的服务器的IP地址。
  2. 创建输出客户端对象。

    • 使用默认构造函数创建OutputServiceClient对象。

    • 使用System.ServiceModel.EndpointAddress构造函数创建OutputServiceClient.Endpoint.Address对象。 将指定WSDL的字符串值传递给AEM Forms服务(例如,http://localhost:8080/soap/services/OutputService?blob=mtom)。 您无需使用lc_version属性。 此属性在创建服务引用时使用。 但是,指定?blob=mtom以使用MTOM。

    • 通过获取OutputServiceClient.Endpoint.Binding字段的值创建一个System.ServiceModel.BasicHttpBinding对象。 将返回值强制转换为BasicHttpBinding

    • System.ServiceModel.BasicHttpBinding对象的MessageEncoding字段设置为WSMessageEncoding.Mtom。 此值可确保使用MTOM。

    • 通过执行以下任务启用基本HTTP身份验证:

      • 将AEM表单用户名分配给字段OutputServiceClient.ClientCredentials.UserName.UserName
      • 将相应的密码值分配给字段OutputServiceClient.ClientCredentials.UserName.Password
      • 将常量值HttpClientCredentialType.Basic分配给字段BasicHttpBindingSecurity.Transport.ClientCredentialType
      • 将常量值BasicHttpSecurityMode.TransportCredentialOnly分配给字段BasicHttpBindingSecurity.Security.Mode
  3. 引用XML数据源。

    • 使用构造函数创建BLOB对象。 BLOB对象用于存储将与PDF文档合并的XML数据。
    • 通过调用其构造函数并传递一个字符串值来创建一个System.IO.FileStream对象,该字符串值表示包含表单数据的XML文件的文件位置。
    • 创建用于存储System.IO.FileStream对象的内容的字节数组。 您可以通过获取System.IO.FileStream对象的Length属性来确定字节数组的大小。
    • 通过调用System.IO.FileStream对象的Read方法并传递要读取的字节数组、起始位置和流长度,使用流数据填充字节数组。
    • 使用字节数组的内容分配其MTOM字段以填充BLOB对象。
  4. 设置PDF运行时选项

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

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

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

    • TransformationFormat枚举值。 要生成PDF文档,请指定TransformationFormat.PDF
    • 一个字符串值,它指定窗体设计的名称。
    • 一个字符串值,它指定表单设计所在的内容根。
    • 包含PDF运行时选项的PDFOutputOptionsSpec对象。
    • 包含渲染运行时选项的RenderOptionsSpec对象。
    • 包含要与表单设计合并的数据的XML数据源的BLOB对象。
    • generatePDFOutput方法填充的BLOB对象。 generatePDFOutput方法使用所生成的描述文档的元数据填充此对象。 (只有Web服务调用才需要此参数值)。
    • generatePDFOutput方法填充的BLOB对象。 generatePDFOutput方法使用结果数据填充此对象。 (只有Web服务调用才需要此参数值)。
    • 包含操作结果的OutputResult对象。 (只有Web服务调用才需要此参数值)。
    注意
    通过调用generatePDFOutput方法生成PDF文档时,不能将数据与已签署或已验证的XFAPDF表单合并。 (请参阅对文档进行数字签名和认证​。)
    注意
    您还可以通过调用OutputClient对象的generatePDFOutput2方法创建PDF文档。 (请参阅将Content Services中的文档(已弃用)传递给输出服务​。)
  7. 检索操作的结果。

    • 通过调用其构造函数并传递表示包含结果数据的XML文件位置的字符串值来创建System.IO.FileStream对象。 确保文件扩展名为.xml。
    • 创建一个字节数组,用于存储BLOB对象的数据内容,该对象由OutputServiceService对象的generatePDFOutput方法(第八个参数)用结果数据填充。 通过获取BLOB对象的MTOM field的值填充字节数组。
    • 通过调用其构造函数并传递System.IO.FileStream对象来创建System.IO.BinaryWriter对象。
    • 通过调用System.IO.BinaryWriter对象的Write方法并传递字节数组,将字节数组的内容写入XML文件。

    另请参阅

注意
已弃用OutputServiceService对象的generateOutput方法。

创建PDF/A文档

您可以使用Output服务创建PDF/A文档。 由于PDF/A是用于长期保存文档内容的存档格式,因此所有字体都将嵌入,并且文件是未压缩的。 因此,PDF/A 文档通常比标准 PDF 文档大。此外,PDF/文档不包含音频和视频内容。 与其他“输出”服务任务一样,提供表单设计和数据以与表单设计合并,以创建PDF/文档。

PDF/A-1规范包含两个一致性级别,即a和b。两者之间的主要区别在于对逻辑结构(辅助功能)的支持,一致性级别b不需要该支持。无论一致性级别如何,PDF/A-1都指示所有字体都嵌入到生成的PDF/A文档中。

尽管PDF/A是归档PDF文档的标准,但是如果标准PDF文档满足公司的需要,则不必使用PDF/A进行归档。 PDF/A标准的目的是建立一个PDF文件,它可以长期存储并且满足文档保存要求。 例如,无法将URL嵌入到PDF/A中,因为随着时间的推移,该URL可能会变得无效。

您的组织必须评估自己的需求、您打算保留文档的时间长度、文件大小考虑因素,并确定自己的归档策略。 您可以使用DocConverter服务以编程方式确定PDF文档是否符合PDF/A标准。 (请参阅以编程方式确定PDF/合规性。)

PDF/文档必须使用在表单设计中指定的字体,且不能替换字体。 因此,如果位于PDF文档中的字体在主机操作系统(OS)上不可用,则会发生异常。

在Acrobat中打开PDF/A文档时,将显示一条消息,确认该文档为PDF/A文档,如下图所示。

cp_cp_pdfamessage

注意
AIIM网站有可在https://www.loc.gov/preservation/digital/formats/fdd/fdd000125.shtml访问的PDF/常见问题解答部分。
注意
有关Output服务的详细信息,请参阅AEM Forms的服务参考

步骤摘要

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

  1. 包括项目文件。
  2. 创建输出客户端对象。
  3. 引用XML数据源。
  4. 设置PDF/A运行时选项。
  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元素的显示顺序。

设置PDF/A运行时选项

创建PDF/A文档时,可以设置“文件URI”选项。 URI相对于托管AEM Forms的J2EE应用程序服务器。 也就是说,如果设置C:\Adobe ,文件将写入服务器上的文件夹,而不是客户端计算机。 URI指定Output服务生成的PDF/A文件的名称和位置。

设置渲染运行时选项

在创建PDF/A文档时,可以设置渲染运行时选项。 可以设置的两个PDF/A相关选项是PDFAConformancePDFARevisionNumber值。 PDFAConformance值指的是PDF文档如何遵守指定保留长期电子文档的要求。 此选项的有效值为AB。 有关级别a和b合规性的信息,请参阅标题为​ ISO 19005-1 Document management ​的PDF/A-1 ISO规范。

PDFARevisionNumber值是指PDF/A文档的修订号。 有关PDF/A文档的修订版本号的信息,请参阅标题为​ ISO 19005-1 Document management ​的PDF/A-1 ISO规范。

注意
创建PDF/A 1A文档时,不能将已标记Adobe PDF选项设置为false。 PDF/A 1A将始终是带标签的PDF文档。 此外,在创建PDF/A 1B文档时,不能将已标记的Adobe PDF选项设置为true。 PDF/A 1B将始终是未标记的PDF文档。

生成PDF/文档

在引用包含表单数据的有效XML数据源并设置运行时选项后,可以调用输出服务,使其生成PDF/A文档。

检索操作的结果

在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/A文档的XML数据源,方法是使用其构造函数并传递指定XML文件位置的字符串值。
    • 使用对象的构造函数创建com.adobe.idp.Document对象并传递java.io.FileInputStream对象。
  4. 设置PDF/A运行时选项。

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

    • 使用构造函数创建RenderOptionsSpec对象。
    • 通过调用RenderOptionsSpec对象的setPDFAConformance方法并传递指定一致性级别的PDFAConformance枚举值来设置PDFAConformance值。 例如,要指定一致性级别A,请传递PDFAConformance.A
    • 通过调用RenderOptionsSpec对象的setPDFARevisionNumber方法并传递PDFARevisionNumber.Revision_1来设置PDFARevisionNumber值。
    注意
    PDF/A文档的PDF版本是1.4,无论您为RenderOptionsSpec对象的​setPdfVersion方法指定哪个值。
  6. 生成PDF/文档。

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

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

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

    注意
    OutputResult对象的getRecordLevelMetaDataList方法返回null
    注意
    您还可以通过调用OutputClient对象的generatePDFOutput2方法创建PDF/A文档。 (请参阅将Content Services中的文档(已弃用)传递给输出服务。)
  7. 检索操作的结果。

    • 通过调用OutputResult对象的getStatusDoc方法,创建表示generatePDFOutput方法状态的com.adobe.idp.Document对象。
    • 创建将包含操作结果的java.io.File对象。 确保文件扩展名为.xml。
    • 调用com.adobe.idp.Document对象的copyToFile方法以将com.adobe.idp.Document对象的内容复制到文件中(确保您使用getStatusDoc方法返回的com.adobe.idp.Document对象)。
    注意
    虽然Output服务将PDF/A文档写入传递给PDFOutputOptionsSpec对象的setFileURI方法的参数指定的位置,但可以通过调用OutputResult对象的getGeneratedDoc方法以编程方式检索PDF/A文档。

使用Web服务API创建PDF/文档

使用输出API(Web服务)创建PDF/文档:

  1. 包括项目文件。

    创建使用MTOM的Microsoft .NET项目。 确保使用以下WSDL定义: http://localhost:8080/soap/services/OutputService?WSDL&lc_version=9.0.1

    注意
    localhost替换为承载AEM Forms的服务器的IP地址。
  2. 创建输出客户端对象。

    • 使用默认构造函数创建OutputServiceClient对象。

    • 使用System.ServiceModel.EndpointAddress构造函数创建OutputServiceClient.Endpoint.Address对象。 将指定WSDL的字符串值传递给AEM Forms服务(例如,http://localhost:8080/soap/services/OutputService?blob=mtom)。 您无需使用lc_version属性。 此属性在创建服务引用时使用。 但是,指定?blob=mtom以使用MTOM。

    • 通过获取OutputServiceClient.Endpoint.Binding字段的值创建一个System.ServiceModel.BasicHttpBinding对象。 将返回值强制转换为BasicHttpBinding

    • System.ServiceModel.BasicHttpBinding对象的MessageEncoding字段设置为WSMessageEncoding.Mtom。 此值可确保使用MTOM。

    • 通过执行以下任务启用基本HTTP身份验证:

      • 将AEM表单用户名分配给字段OutputServiceClient.ClientCredentials.UserName.UserName
      • 将相应的密码值分配给字段OutputServiceClient.ClientCredentials.UserName.Password
      • 将常量值HttpClientCredentialType.Basic分配给字段BasicHttpBindingSecurity.Transport.ClientCredentialType
      • 将常量值BasicHttpSecurityMode.TransportCredentialOnly分配给字段BasicHttpBindingSecurity.Security.Mode
  3. 引用XML数据源。

    • 使用构造函数创建BLOB对象。 BLOB对象用于存储将与PDF/A文档合并的数据。
    • 通过调用其构造函数并传递一个字符串值来创建一个System.IO.FileStream对象,该字符串值表示要加密的PDF文档的文件位置以及打开文件的模式。
    • 创建用于存储System.IO.FileStream对象的内容的字节数组。 您可以通过获取System.IO.FileStream对象的Length属性来确定字节数组的大小。
    • 通过调用System.IO.FileStream对象的Read方法并传递要读取的字节数组、起始位置和流长度,使用流数据填充字节数组。
    • 使用字节数组内容分配其MTOM字段以填充BLOB对象。
  4. 设置PDF/A运行时选项。

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

    • 使用构造函数创建RenderOptionsSpec对象。
    • 通过为RenderOptionsSpec对象的PDFAConformance数据成员分配PDFAConformance枚举值来设置PDFAConformance值。 例如,要指定一致性级别A,请将PDFAConformance.A分配给此数据成员。
    • 通过为RenderOptionsSpec对象的PDFARevisionNumber数据成员分配PDFARevisionNumber枚举值来设置PDFARevisionNumber值。 将PDFARevisionNumber.Revision_1分配给此数据成员。
    注意
    无论您指定哪个值,PDF/A文档的PDF版本均为1.4。
  6. 生成PDF/文档。

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

    • TransformationFormat枚举值。 要生成PDF文档,请指定TransformationFormat.PDFA
    • 一个字符串值,它指定窗体设计的名称。
    • 一个字符串值,它指定表单设计所在的内容根。
    • 包含PDF运行时选项的PDFOutputOptionsSpec对象。
    • 包含渲染运行时选项的RenderOptionsSpec对象。
    • 包含要与表单设计合并的数据的XML数据源的BLOB对象。
    • generatePDFOutput方法填充的BLOB对象。 generatePDFOutput方法使用所生成的描述文档的元数据填充此对象。 (只有Web服务调用才需要此参数值。)
    • generatePDFOutput方法填充的BLOB对象。 generatePDFOutput方法使用结果数据填充此对象。 (只有Web服务调用才需要此参数值。)
    • 包含操作结果的OutputResult对象。 (只有Web服务调用才需要此参数值。)
    注意
    您还可以通过调用OutputClient对象的generatePDFOutput2方法创建PDF/A文档。 (请参阅将Content Services中的文档(已弃用)传递给输出服务。)
  7. 检索操作的结果。

    • 通过调用其构造函数并传递表示包含结果数据的XML文件位置的字符串值来创建System.IO.FileStream对象。 确保文件扩展名为.xml。
    • 创建一个字节数组,用于存储BLOB对象的数据内容,该对象由OutputServiceService对象的generatePDFOutput方法(第八个参数)用结果数据填充。 通过获取BLOB对象的MTOM字段的值填充字节数组。
    • 通过调用其构造函数并传递System.IO.FileStream对象来创建System.IO.BinaryWriter对象。
    • 通过调用System.IO.BinaryWriter对象的Write方法并传递字节数组,将字节数组的内容写入XML文件。

将Content Services中的文档(已弃用)传递到Output Service

Output服务可呈现基于表单设计的非交互式PDF表单,该表单通常保存为XDP文件并在Designer中创建。 您可以将包含表单设计的com.adobe.idp.Document对象传递到Output服务。 然后,输出服务在com.adobe.idp.Document对象中呈现窗体设计。

com.adobe.idp.Document对象传递给输出服务的好处是,其他AEM Forms服务操作返回com.adobe.idp.Document实例。 也就是说,您可以从另一个服务操作获取com.adobe.idp.Document实例并对其进行渲染。 例如,假设XDP文件存储在名为/Company Home/Form Designs的Content Services(已弃用)节点中,如下图所示。

您可以通过编程方式从内容服务(已弃用)检索Loan.xdp,并将XDP文件传递到com.adobe.idp.Document对象中的输出服务。

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

步骤摘要

要将从Content Services(已弃用)获得的文档传递到输出服务,请执行以下任务:

  1. 包括项目文件。
  2. 创建输出和文档管理客户端API对象。
  3. 从Content Services检索表单设计(已弃用)。
  4. 呈现非交互式PDF表单。
  5. 对数据流执行操作。

包含项目文件

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

创建输出和文档管理客户端API对象

在以编程方式执行输出服务API操作之前,请先创建输出客户端API对象。 此外,由于此工作流从内容服务中检索XDP文件(已弃用),因此请创建文档管理API对象。

从内容服务检索表单设计(已弃用)

使用Java或Web服务API从内容服务中检索XDP文件(已弃用)。 XDP文件在com.adobe.idp.Document实例(或者BLOB实例,如果您使用Web服务)中返回。 然后,您可以将com.adobe.idp.Document实例传递到输出服务。

渲染非交互式PDF表单

要呈现非交互式表单,请将从Content Services(已弃用)返回的com.adobe.idp.Document实例传递到输出服务。

注意
名为generatePDFOutput2和g eneratePrintedOutput2的两个新方法接受包含表单设计的com.adobe.idp.Document对象。 在将打印流发送到网络打印机时,您还可以将包含表单设计的com.adobe.idp.Document传递到Output服务。

对表单数据流执行操作

您可以将非交互式表单另存为PDF文件。 该表单可在Adobe Reader或Acrobat中查看。

另请参阅

使用Java API将文档传递到输出服务

使用Web服务API将文档传递到输出服务

包括AEM Forms Java库文件

设置连接属性

输出服务API快速启动

使用片段创建PDF文档

使用Java API将文档传递到输出服务

使用输出服务和内容服务(已弃用)API (Java)传递从内容服务(已弃用)检索的文档:

  1. 包括项目文件。

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

  2. 创建输出和文档管理客户端API对象。

    • 创建包含连接属性的ServiceClientFactory对象。 (请参阅设置连接属性。)
    • 使用构造函数创建OutputClient对象并传递ServiceClientFactory对象。
    • 使用对象的构造函数创建DocumentManagementServiceClientImpl对象并传递ServiceClientFactory对象。
  3. 从Content Services检索表单设计(已弃用)。

    调用DocumentManagementServiceClientImpl对象的retrieveContent方法并传递以下值:

    • 一个字符串值,它指定添加内容的存储。 默认存储为SpacesStore。 此值是必需参数。
    • 一个字符串值,它指定要检索的内容的完全限定路径(例如,/Company Home/Form Designs/Loan.xdp)。 此值是必需参数。
    • 指定版本的字符串值。 此值是一个可选参数,您可以传递空字符串。 在这种情况下,将检索最新版本。

    retrieveContent方法返回包含XDP文件的CRCResult对象。 通过调用CRCResult对象的getDocument方法检索com.adobe.idp.Document实例。

  4. 呈现非交互式PDF表单。

    调用OutputClient对象的generatePDFOutput2方法并传递以下值:

    • TransformationFormat枚举值。 要生成PDF文档,请指定TransformationFormat.PDF
    • 一个字符串值,它指定其他资源(如图像)所在的内容根。
    • 表示表单设计的com.adobe.idp.Document对象(使用CRCResult对象的getDocument方法返回的实例)。
    • 包含PDF运行时选项的PDFOutputOptionsSpec对象。
    • 包含渲染运行时选项的RenderOptionsSpec对象。
    • 包含要与表单设计合并的数据的XML数据源的com.adobe.idp.Document对象。

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

  5. 对表单数据流执行操作。

    • 通过调用OutputResult对象的getGeneratedDoc方法,检索表示非交互式表单的com.adobe.idp.Document对象。
    • 创建包含操作结果的java.io.File对象。 确保文件扩展名为.pdf。
    • 调用com.adobe.idp.Document对象的copyToFile方法以将com.adobe.idp.Document对象的内容复制到文件中(确保您使用getGeneratedDoc方法返回的com.adobe.idp.Document对象)。

使用Web服务API将文档传递到输出服务

使用输出服务和内容服务(已弃用)API(Web服务)传递从内容服务(已弃用)检索的文档:

  1. 包括项目文件。

    创建使用MTOM的Microsoft .NET项目。 由于此客户端应用程序调用两个AEM Forms服务,因此请创建两个服务引用。 为与输出服务关联的服务引用使用以下WSDL定义: http://localhost:8080/soap/services/OutputService?WSDL&lc_version=9.0.1

    对与Document Management服务关联的服务引用使用以下WSDL定义: http://localhost:8080/soap/services/DocumentManagementService?WSDL&lc_version=9.0.1

    由于BLOB数据类型对两个服务引用都是通用的,因此使用它时,请完全限定BLOB数据类型。 在相应的Web服务快速入门中,所有BLOB实例都是完全限定的。

    注意
    localhost替换为承载AEM Forms的服务器的IP地址。
  2. 创建输出和文档管理客户端API对象。

    • 使用默认构造函数创建OutputServiceClient对象。

    • 使用System.ServiceModel.EndpointAddress构造函数创建OutputServiceClient.Endpoint.Address对象。 将指定WSDL的字符串值传递给Forms服务(例如,http://localhost:8080/soap/services/OutputService?blob=mtom)。 您无需使用lc_version属性。 此属性在创建服务引用时使用。)

    • 通过获取OutputServiceClient.Endpoint.Binding字段的值创建一个System.ServiceModel.BasicHttpBinding对象。 将返回值强制转换为BasicHttpBinding

    • System.ServiceModel.BasicHttpBinding对象的MessageEncoding字段设置为WSMessageEncoding.Mtom。 此值可确保使用MTOM。

    • 通过执行以下任务启用基本HTTP身份验证:

      • 将AEM表单用户名分配给字段OutputServiceClient.ClientCredentials.UserName.UserName
      • 将相应的密码值分配给字段OutputServiceClient.ClientCredentials.UserName.Password
      • 将常量值HttpClientCredentialType.Basic分配给字段BasicHttpBindingSecurity.Transport.ClientCredentialType
    • 将常量值BasicHttpSecurityMode.TransportCredentialOnly分配给字段BasicHttpBindingSecurity.Security.Mode

    注意
    DocumentManagementServiceClient服务客户端重复这些步骤。
  3. 从Content Services检索表单设计(已弃用)。

    通过调用DocumentManagementServiceClient对象的retrieveContent方法并传递以下值来检索内容:

    • 一个字符串值,它指定添加内容的存储。 默认存储为SpacesStore。 此值是必需参数。
    • 一个字符串值,它指定要检索的内容的完全限定路径(例如,/Company Home/Form Designs/Loan.xdp)。 此值是必需参数。
    • 指定版本的字符串值。 此值是一个可选参数,您可以传递空字符串。 在这种情况下,将检索最新版本。
    • 用于存储浏览链接值的字符串输出参数。
    • 用于存储内容的BLOB输出参数。 您可以使用此输出参数检索内容。
    • 用于存储内容属性的ServiceReference1.MyMapOf_xsd_string_To_xsd_anyType输出参数。
    • CRCResult输出参数。 您可以使用BLOB输出参数来检索内容,而不是使用此对象。
  4. 呈现非交互式PDF表单。

    调用OutputServiceClient对象的generatePDFOutput2方法并传递以下值:

    • TransformationFormat枚举值。 要生成PDF文档,请指定TransformationFormat.PDF
    • 一个字符串值,它指定其他资源(如图像)所在的内容根。
    • 表示表单设计的BLOB对象(使用内容服务返回的BLOB实例(已弃用))。
    • 包含PDF运行时选项的PDFOutputOptionsSpec对象。
    • 包含渲染运行时选项的RenderOptionsSpec对象。
    • 包含要与表单设计合并的数据的XML数据源的BLOB对象。
    • generatePDFOutput2方法填充的输出BLOB对象。 generatePDFOutput2方法使用所生成的描述文档的元数据填充此对象。 (只有Web服务调用才需要此参数值)。
    • 包含操作结果的输出OutputResult对象。 (只有Web服务调用才需要此参数值)。

    generatePDFOutput2方法返回包含非交互式PDF表单的BLOB对象。

  5. 对表单数据流执行操作。

    • 通过调用其构造函数创建System.IO.FileStream对象。 传递一个字符串值,该值表示交互式PDF文档的文件位置以及打开文件的模式。
    • 创建一个字节数组,用于存储从generatePDFOutput2方法检索的BLOB对象的内容。 通过获取BLOB对象的MTOM数据成员的值填充字节数组。
    • 通过调用其构造函数并传递System.IO.FileStream对象来创建System.IO.BinaryWriter对象。
    • 通过调用System.IO.BinaryWriter对象的Write方法并传递字节数组,将字节数组的内容写入PDF文件。

将存储库中的文档传递到Output服务

Output服务可呈现基于表单设计的非交互式PDF表单,该表单通常保存为XDP文件并在Designer中创建。 您可以将包含表单设计的com.adobe.idp.Document对象传递到Output服务。 然后,输出服务在com.adobe.idp.Document对象中呈现窗体设计。

com.adobe.idp.Document对象传递给输出服务的好处是,其他AEM Forms服务操作返回com.adobe.idp.Document实例。 也就是说,您可以从另一个服务操作获取com.adobe.idp.Document实例并对其进行渲染。 例如,假设XDP文件存储在AEM Forms存储库中,如下图所示。

pd_pd_formrepository

FormsFolder ​文件夹是AEM Forms存储库中的用户定义的位置(此位置是一个示例,默认不存在)。 在此示例中,名为Loan.xdp的表单设计位于此文件夹中。 除了表单设计之外,还可以在此位置存储其他表单宣传资料,例如图像。 AEM Forms存储库中资源的路径为:

Applications/Application-name/Application-version/Folder.../Filename

您可以以编程方式从AEM Forms存储库检索Loan.xdp,并将其传递到com.adobe.idp.Document对象中的输出服务。

您可以使用以下两种方式之一,基于存储库中的XDP文件创建PDF。 您可以按引用传递XDP位置,也可以以编程方式从存储库检索XDP,并将其传递到XDP文件中的Output服务。

快速入门(EJB模式):使用Java API基于应用程序XDP文件创建PDF文档(显示如何通过引用传递XDP文件的位置)。

快速入门(EJB模式):使用Java API将AEM Forms存储库中的文档传递到Output服务(显示如何以编程方式从AEM Forms存储库检索XDP文件并将其传递到com.adobe.idp.Document实例中的Output服务)。 (本节讨论如何执行此任务)

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

步骤摘要

要将从AEM Forms存储库获得的文档传递到输出服务,请执行以下任务:

  1. 包括项目文件。
  2. 创建输出和文档管理客户端API对象。
  3. 从AEM Forms存储库检索表单设计。
  4. 呈现非交互式PDF表单。
  5. 对数据流执行操作。

包含项目文件

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

创建输出和文档管理客户端API对象

在以编程方式执行输出服务API操作之前,请先创建输出客户端API对象。 此外,由于此工作流从内容服务中检索XDP文件(已弃用),因此请创建文档管理API对象。

从AEM Forms存储库检索表单设计

使用存储库API从AEM Forms存储库检索XDP文件。 (请参阅正在读取资源。)

XDP文件在com.adobe.idp.Document实例(或者BLOB实例,如果您使用Web服务)中返回。 然后,您可以将com.adobe.idp.Document实例传递到Output服务。

渲染非交互式PDF表单

要呈现非交互式表单,请传递使用AEM Forms存储库API返回的com.adobe.idp.Document实例。

注意
名为generatePDFOutput2generatePrintedOutput2的两个新方法接受包含表单设计的com.adobe.idp.Document对象。 在将打印流发送到网络打印机时,您还可以将包含表单设计的com.adobe.idp.Document传递到输出服务。

对表单数据流执行操作

您可以将非交互式表单另存为PDF文件。 该表单可在Adobe Reader或Acrobat中查看。

另请参阅

使用Java API将存储库中的文档传递到输出服务

包括AEM Forms Java库文件

设置连接属性

输出服务API快速启动

ResourceRepositoryClient

使用Java API将存储库中的文档传递到输出服务

使用输出服务和存储库API (Java)传递从存储库检索到的文档:

  1. 包括项目文件。

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

  2. 创建输出和文档管理客户端API对象。

    • 创建包含连接属性的ServiceClientFactory对象。 (请参阅设置连接属性。)
    • 使用构造函数创建OutputClient对象并传递ServiceClientFactory对象。
    • 使用对象的构造函数创建DocumentManagementServiceClientImpl对象并传递ServiceClientFactory对象。
  3. 从AEM Forms存储库检索表单设计。

    调用ResourceRepositoryClient对象的readResourceContent方法,并将指定URI位置的字符串值传递给XDP文件。 例如,/Applications/FormsApplication/1.0/FormsFolder/Loan.xdp。此值为必填项。 此方法返回表示XDP文件的com.adobe.idp.Document实例。

  4. 呈现非交互式PDF表单。

    调用OutputClient对象的generatePDFOutput2方法并传递以下值:

    • TransformationFormat枚举值。 要生成PDF文档,请指定TransformationFormat.PDF
    • 一个字符串值,它指定其他资源(如图像)所在的内容根。 例如:repository:///Applications/FormsApplication/1.0/FormsFolder/
    • 表示表单设计的com.adobe.idp.Document对象(使用ResourceRepositoryClient对象的readResourceContent方法返回的实例)。
    • 包含PDF运行时选项的PDFOutputOptionsSpec对象。
    • 包含渲染运行时选项的RenderOptionsSpec对象。
    • 包含要与表单设计合并的数据的XML数据源的com.adobe.idp.Document对象。

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

  5. 对表单数据流执行操作。

    • 通过调用OutputResult对象的getGeneratedDoc方法,检索表示非交互式表单的com.adobe.idp.Document对象。
    • 创建包含操作结果的java.io.File对象。 确保文件扩展名为.pdf。
    • 调用com.adobe.idp.Document对象的copyToFile方法以将com.adobe.idp.Document对象的内容复制到文件中(确保您使用getGeneratedDoc方法返回的com.adobe.idp.Document对象)。