DocumentatieAEMTutorials voor AEMTutorials voor AEM Forms

XDP renderen naar PDF met gebruiksrechten

5 mei 2025
  • Van toepassing op:
  • Experience Manager 6.4
  • Experience Manager 6.5
  • Onderwerpen:

Gemaakt voor:

  • Ervaren
  • Ontwikkelaar

Een veel voorkomend geval is het renderen van xdp in PDF en het toepassen van Reader Extensions op de weergegeven PDF.

Als een gebruiker bijvoorbeeld op XDP klikt in het formulierportaal van AEM Forms, kunnen we XDP renderen als PDF en de lezer de PDF uitbreiden.

Voor dit gebruiksgeval moeten we het volgende doen.

  • Voeg het Reader Extensions-certificaat toe aan de gebruiker "fd-service". De stappen om de credentie van de Uitbreidingen van Reader toe te voegen zijn vermeld hier

  • U kunt ook naar de video verwijzen bij het vormen van de geloofsbrieven van de Uitbreidingen van Reader

  • Creeer de douanedienst OSGi die teruggeeft en gebruiksrechten toepast. De code om dit te bereiken wordt hieronder vermeld

XDP renderen en gebruiksrechten toepassen

  • Lijn 7: Gebruikend renderPDFForm van FormsService produceren wij PDF van XDP.

  • Lijnen 8 tot en met 14: De toepasselijke gebruiksrechten worden vastgesteld. Deze gebruiksrechten worden opgehaald van de OSGi-configuratiemontages.

  • Lijn 20: Gebruik resourceresolver verbonden aan de dienst van de de dienstgebruiker

  • Regel 24: De methode secureDocument van DocumentAssuranceService wordt gebruikt om de gebruiksrechten toe te passen

 public Document renderAndExtendXdp(String xdpPath) {
  // TODO Auto-generated method stub
  log.debug("In renderAndExtend xdp the alias is " + docConfig.ReaderExtensionAlias());
  PDFFormRenderOptions renderOptions = new PDFFormRenderOptions();
  renderOptions.setAcrobatVersion(AcrobatVersion.Acrobat_11);
  try {
   Document xdpRenderedAsPDF = formsService.renderPDFForm("crx://" + xdpPath, null, renderOptions);
   UsageRights usageRights = new UsageRights();
   usageRights.setEnabledBarcodeDecoding(docConfig.BarcodeDecoding());
   usageRights.setEnabledFormFillIn(docConfig.FormFill());
   usageRights.setEnabledComments(docConfig.Commenting());
   usageRights.setEnabledEmbeddedFiles(docConfig.EmbeddingFiles());
   usageRights.setEnabledDigitalSignatures(docConfig.DigitialSignatures());
   usageRights.setEnabledFormDataImportExport(docConfig.FormDataExportImport());
   ReaderExtensionsOptionSpec reOptionsSpec = new ReaderExtensionsOptionSpec(usageRights, "Sample ARES");
   UnlockOptions unlockOptions = null;
   ReaderExtensionOptions reOptions = ReaderExtensionOptions.getInstance();
   reOptions.setCredentialAlias(docConfig.ReaderExtensionAlias());
   log.debug("set the credential");
   reOptions.setResourceResolver(getResolver.getFormsServiceResolver());

   reOptions.setReOptions(reOptionsSpec);
   log.debug("set the resourceResolver and re spec");
   xdpRenderedAsPDF = docAssuranceService.secureDocument(xdpRenderedAsPDF, null, null, reOptions,
     unlockOptions);

   return xdpRenderedAsPDF;
  } catch (FormsServiceException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return null;

 }

Het volgende schermschot toont u de configuratieeigenschappen blootgesteld. De meeste algemene gebruiksrechten worden via deze configuratie weergegeven.

Eigenschappen van de Configuratie

De volgende code toont u de code die wordt gebruikt om de OSGi configuratiemontages te bouwen

package com.aemformssamples.configuration;

import org.osgi.service.metatype.annotations.AttributeDefinition;
import org.osgi.service.metatype.annotations.AttributeType;
import org.osgi.service.metatype.annotations.ObjectClassDefinition;

@ObjectClassDefinition(name = "AEM Forms Samples Doc Services Configuration", description = "AEM Forms Samples Doc Services Configuration")
public @interface DocSvcConfiguration {
 @AttributeDefinition(name = "Allow Form Fill", description = "Allow Form Fill", type = AttributeType.BOOLEAN)
 boolean FormFill() default false;

 @AttributeDefinition(name = "Allow BarCode Decoding", description = "Allow BarCode Decoding", type = AttributeType.BOOLEAN)
 boolean BarcodeDecoding() default false;

 @AttributeDefinition(name = "Allow File Embedding", description = "Allow File Embedding", type = AttributeType.BOOLEAN)
 boolean EmbeddingFiles() default false;

 @AttributeDefinition(name = "Allow Commenting", description = "Allow Commenting", type = AttributeType.BOOLEAN)
 boolean Commenting() default false;

 @AttributeDefinition(name = "Allow DigitialSignatures", description = "Allow File DigitialSignatures", type = AttributeType.BOOLEAN)
 boolean DigitialSignatures() default false;

 @AttributeDefinition(name = "Allow FormDataExportImport", description = "Allow FormDataExportImport", type = AttributeType.BOOLEAN)
 boolean FormDataExportImport() default false;

 @AttributeDefinition(name = "Reader Extension Alias", description = "Alias of your Reader Extension")
 String ReaderExtensionAlias() default "";

}

Servlet maken om de PDF te streamen

De volgende stap bestaat uit het maken van een servlet met een GET-methode om de lezer die PDF heeft uitgebreid, terug te sturen naar de gebruiker. In dit geval wordt de gebruiker gevraagd de PDF op te slaan in zijn bestandssysteem. De reden hiervoor is dat de PDF wordt weergegeven als dynamisch PDF en dat de PDF-viewers die bij de browsers worden geleverd, geen dynamische PDF's verwerken.

Hier volgt de code voor de servlet. We geven het pad van de XDP in de CRX-opslagplaats door aan deze servlet.

Vervolgens roept u de methode renderAndExtendXdp van com.aemformssamples.documentservices.core.DocumentServices aan.

De lezer extended PDF wordt vervolgens gestreamd naar de aanroepende toepassing

package com.aemformssamples.documentservices.core.servlets;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.servlet.Servlet;

import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.adobe.aemfd.docmanager.Document;
import com.adobe.fd.forms.api.FormsService;
import com.aemformssamples.documentservices.core.DocumentServices;

@Component(service = Servlet.class, property = {

  "sling.servlet.methods=get",

  "sling.servlet.paths=/bin/renderandextend"

})
public class RenderAndReaderExtend extends SlingSafeMethodsServlet {
 @Reference
 FormsService formsService;
 @Reference
 DocumentServices documentServices;
 private static final Logger log = LoggerFactory.getLogger(RenderAndReaderExtend.class);
 private static final long serialVersionUID = 1L;

 protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) {
  log.debug("The path of the XDP I got was " + request.getParameter("xdpPath"));
  Document renderedPDF = documentServices.renderAndExtendXdp(request.getParameter("xdpPath"));
  response.setContentType("application/pdf");
  response.addHeader("Content-Disposition", "attachment; filename=AemFormsRocks.pdf");
  try {
   response.setContentLength((int) renderedPDF.length());
   InputStream fileInputStream = null;
   fileInputStream = renderedPDF.getInputStream();
   OutputStream responseOutputStream = null;
   responseOutputStream = response.getOutputStream();
   int bytes;
   while ((bytes = fileInputStream.read()) != -1) {
    {
     responseOutputStream.write(bytes);
    }

   }
  } catch (IOException e2) {
   // TODO Auto-generated catch block
   e2.printStackTrace();
  }

 }

}

Voer de volgende stappen uit om dit op uw lokale server te testen

  1. Download en installeer de DevelopingWithServiceUser Bundle

  2. De AEMFormsDocumentServices-bundel downloaden en installeren

  3. De aangepaste portalsjabloon html downloaden

  4. De aan dit artikel gerelateerde elementen downloaden en importeren naar AEM met behulp van pakketbeheer

    • Dit pakket bevat voorbeeldportal en xdp-bestand
  5. Reader-extensiecertificaat toevoegen aan gebruiker van het type fd-service

  6. Punt uw browser aan portalwebpagina

  7. Klik op het pictogram pdf om de xdp te renderen als een PDF-bestand waarop gebruiksrechten zijn toegepast.

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