Générer un document PDF avec des fragments à l’aide d’un script ECMA developing-with-output-and-forms-services-in-aem-forms

Dans cet article, nous allons utiliser le service Output pour générer des fichiers PDF à l’aide de fragments xdp. Le xdp principal et les fragments résident dans le référentiel crx. Il est important d’imiter la structure de dossiers du système de fichiers dans AEM. Par exemple, si vous utilisez un fragment dans le dossier de fragments de votre xdp, vous devez créer un dossier appelé fragments sous votre dossier de base dans AEM. Le dossier de base contient votre modèle xdp de base. Par exemple, si votre système de fichiers contient la structure suivante :

  • c:\xdptemplates : contient votre modèle xdp de base.
  • c:\xdptemplates\fragments : contient des fragments. Le modèle principal fait référence au fragment comme illustré ci-dessous.
    fragment-xdp .
  • Le dossier xdpdocuments contient votre modèle de base et les fragments du dossier fragments.

Vous pouvez créer la structure requise à l’aide de l’interface utilisateur des formulaires et des documents.

Voici la structure de dossiers de l’exemple d’xdp qui utilise 2 fragments.
formsdocument .

  • Service Output : en règle générale, ce service est utilisé pour fusionner des données XML avec un modèle xdp ou un PDF, afin de générer un PDF aplati. Pour plus d’informations, reportez-vous au javadoc pour le service Output. Dans cet exemple, nous utilisons des fragments résidant dans le référentiel crx.

Le script ECMA suivant a été utilisé pour générer le PDF. Notez l’utilisation de ResourceResolver et de ResourceResolverHelper dans le code. ResourceResolver est nécessaire, car ce code s’exécute en dehors de tout contexte utilisateur.

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");
      }

 });

Pour tester l’exemple de package sur votre système :

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