文档AEMAEM 教程AEM Forms 教程

使用ECMA脚本生成带片段的pdf文档

Last update: Mon May 05 2025 00:00:00 GMT+0000 (Coordinated Universal Time)
  • 适用对象:
  • Experience Manager 6.4
  • Experience Manager 6.5
  • 主题:

创建对象:

  • 中级
  • 开发人员

在本文中,我们将使用输出服务来生成使用xdp片段的pdf文件。 主xdp和片段驻留在crx存储库中。 模拟AEM中的文件系统文件夹结构很重要。 例如,如果您在xdp的片段文件夹中使用片段,则必须在AEM中的基文件夹下创建一个名为​ fragments ​的文件夹。 基本文件夹将包含您的基本xdp模板。 例如,如果文件系统中具有以下结构

  • c:\xdptemplates — 这将包含您的基本xdp模板
  • c:\xdptemplates\fragments — 此文件夹将包含片段,主模板将引用如下所示的片段
    fragment-xdp 。
  • 文件夹xdpdocuments将在​ 片段 ​文件夹中包含您的基本模板和片段

您可以使用表单和文档UI创建所需的结构

以下是示例使用2个片段的文件夹结构
表单文档

  • 输出服务 — 通常,此服务用于将xml数据与xdp模板或pdf合并,以生成拼合的pdf。 有关详细信息,请参阅输出服务的javadoc。 在此示例中,我们使用驻留在crx存储库中的片段。

以下ECMA脚本用于生成PDF。 请注意代码中使用了ResourceResolver和ResourceResolverHelper。 需要ResourceReolver,因为此代码在任何用户上下文之外运行。

var inputMap = processorContext.getInputMap();
var itr = inputMap.entrySet().iterator();
var entry = inputMap.entrySet().iterator().next();
var xmlData = inputMap.get(entry.getKey());
log.info("Got XML Data File");

var resourceResolverHelper = sling.getService(Packages.com.adobe.granite.resourceresolverhelper.ResourceResolverHelper);
var aemDemoListings = sling.getService(Packages.com.mergeandfuse.getserviceuserresolver.GetResolver);
log.info("Got service resolver");
var resourceResolver = aemDemoListings.getFormsServiceResolver();
//The ResourceResolverHelper execute's the following code within the context of the resourceResolver
resourceResolverHelper.callWith(resourceResolver, {call: function()
       {
             //var statement = new Packages.com.adobe.aemfd.docmanager.Document("/content/dam/formsanddocuments/xdpdocuments/main.xdp",resourceResolver);
               var outputService = sling.getService(Packages.com.adobe.fd.output.api.OutputService);
            var pdfOutputOptions = new Packages.com.adobe.fd.output.api.PDFOutputOptions();
            pdfOutputOptions.setContentRoot("crx:///content/dam/formsanddocuments/xdpdocuments");
            pdfOutputOptions.setAcrobatVersion(Packages.com.adobe.fd.output.api.AcrobatVersion.Acrobat_11);
            var dataMergedDocument = outputService.generatePDFOutput("main.xdp",xmlData,pdfOutputOptions);
               //var dataMergedDocument = outputService.generatePDFOutput(statement,xmlData,pdfOutputOptions);
            processorContext.setResult("mergeddocument.pdf",dataMergedDocument);
            log.info("Generated the pdf document with fragments");
      }

 });

在系统上测试示例包

  • 部署DevelopingWithServiceUSer捆绑包

  • 在用户映射器服务修改中添加项​ DevelopingWithServiceUser.core:getformsresourceresolver=fd-service,如下面的屏幕快照所示
    用户映射器修正

  • 下载并导入示例xdp文件和ECMA脚本。
    这将在c:/fragmentsandoutputservice文件夹中创建观察文件夹结构

  • 提取示例数据文件,并将其放入监视文件夹的install文件夹中(c:\fragmentsandoutputservice\install)

  • 检查观察文件夹配置的结果文件夹中是否包含生成的pdf文件

recommendation-more-help
8de24117-1378-413c-a581-01e660b7163e