Procesar XDP en un PDF con derechos de uso rendering-xdp-into-pdf-with-usage-rights

Un caso de uso común es procesar xdp en PDF y aplicar extensiones de Reader al PDF procesado.

Por ejemplo, en el portal de formularios de AEM Forms, cuando un usuario hace clic en XDP, podemos procesar XDP como PDF y Extenderlo como PDF.

Para llevar a cabo este caso de uso, debemos hacer lo siguiente.

  • Agregue el certificado de Extensiones de Reader al usuario "fd-service". Se enumeran los pasos para agregar la credencial Extensiones de Reader aquí

  • También puede consultar el vídeo sobre configurar las credenciales de Extensiones de Reader

  • Cree un servicio OSGi personalizado que procese y aplique derechos de uso. El código para lograrlo se enumera a continuación

Procesar XDP y aplicar derechos de uso render-xdp-and-apply-usage-rights

  • Línea 7: con el renderPDFForm del servicio Forms, se genera un PDF a partir del XDP.

  • Líneas 8-14: se establecen los derechos de uso correspondientes. Estos derechos de uso se recuperan de las opciones de configuración de OSGi.

  • Línea 20 : Utilice resourceresolver asociado al usuario de servicio fd-service

  • Línea 24: se utiliza el método secureDocument de DocumentAssuranceService para aplicar los derechos de uso

 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;

 }

La siguiente captura de pantalla muestra las propiedades de configuración expuestas. La mayoría de los derechos de uso comunes se exponen a través de esta configuración.

Propiedades de configuración

El siguiente código muestra el código que se utiliza para generar las opciones de configuración de OSGi

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

}

Crear servlet para transmitir el PDF create-servlet-to-stream-the-pdf

El siguiente paso es crear un servlet con un método de GET para devolver el PDF de reader Extended al usuario. En este caso, se solicita al usuario que guarde el PDF en su sistema de archivos. Esto se debe a que el PDF se procesa como PDF dinámico y los visualizadores de PDF que vienen con los navegadores no gestionan los PDF dinámicos.

El siguiente es el código del servlet. Pasamos la ruta del XDP en el repositorio CRX a este servlet.

Luego llamamos al método renderAndExtendXdp de com.aemformssamples.documentservices.core.DocumentServices.

A continuación, el PDF extendido de reader se transmite a la aplicación que realiza la llamada

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

 }

}

Para probar esto en el servidor local, siga los siguientes pasos

  1. Descargar e instalar el paquete DevelopersWithServiceUser

  2. Descargar e instalar el paquete AEM FormsDocumentServices

  3. Descargar el HTML de plantilla de portal personalizada

  4. AEM Descargue e importe los recursos relacionados con este artículo en el administrador de paquetes de, usando el administrador de paquetes de

    • Este paquete tiene un portal de muestra y un archivo xdp
  5. Añadir certificado de Extensiones de Reader al usuario "fd-service"

  6. Dirija el explorador a página web del portal

  7. Haga clic en el icono pdf para procesar el xdp como archivo pdf con derechos de uso aplicados.

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