Mit Reader Extensions können Sie Nutzungsrechte an PDF-Dokumenten bearbeiten. Nutzungsrechte gelten für Funktionen, die standardmäßig in Acrobat, nicht jedoch in Adobe Reader zur Verfügung stehen. Die von Reader Extensions gesteuerte Funktion ermöglicht das Hinzufügen von , das Ausfüllen von Formularen und das Speichern von Dokumenten. PDF-Dokumente, für die zusätzlich Nutzungsrechte gelten, werden als Dokumente mit aktivierten Nutzungsrechten bezeichnet. Benutzer, die ein PDF-Dokument mit aktivierten Nutzungsrechten in Adobe Reader öffnen, können Vorgänge durchführen, die für dieses Dokument aktiviert sind.
Um dieses Anwendungsbeispiel zu erstellen, müssen wir Folgendes tun:
fd-service
Benutzer.Erstellen Sie einen benutzerdefinierten OSGi-Dienst, der Verwendungsrechte auf die Dokumente anwendet. Der Code, um dies zu erreichen, ist unten aufgeführt
import com.adobe.aemfd.docmanager.Document;
import com.adobe.fd.docassurance.client.api.DocAssuranceService;
import com.adobe.fd.docassurance.client.api.ReaderExtensionOptions;
import com.adobe.fd.readerextensions.client.ReaderExtensionsOptionSpec;
import com.adobe.fd.readerextensions.client.UsageRights;
import com.adobe.fd.signatures.pdf.inputs.UnlockOptions;
import com.aemforms.ares.core.ReaderExtendPDF;
import com.mergeandfuse.getserviceuserresolver.GetResolver;
@Component(service = ApplyUsageRights.class)
public class ApplyUsageRights implements ReaderExtendPDF {
@Reference
DocAssuranceService docAssuranceService;
@Reference
GetResolver getResolver;
Logger logger = LoggerFactory.getLogger(ApplyUsageRights.class);
@Override
public Document applyUsageRights(Document pdfDocument, UsageRights usageRights) {
ReaderExtensionsOptionSpec reOptionsSpec = new ReaderExtensionsOptionSpec(usageRights, "Sample ARES");
UnlockOptions unlockOptions = null;
ReaderExtensionOptions reOptions = ReaderExtensionOptions.getInstance();
reOptions.setCredentialAlias("ares");
reOptions.setResourceResolver(getResolver.getFormsServiceResolver());
reOptions.setReOptions(reOptionsSpec);
System.out.println("Applying Usage Rights");
try {
Document readerExtended = docAssuranceService.secureDocument(pdfDocument, null, null, reOptions,
unlockOptions);
reOptions.getResourceResolver().close();
return readerExtended;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
Der nächste Schritt besteht darin, ein Servlet mit einer POST-Methode zu erstellen, um den Leser mit erweitertem PDF an den Benutzer zurückzugeben. In diesem Fall wird der Benutzer aufgefordert, die PDF in seinem Dateisystem zu speichern. Dies liegt daran, dass die PDF als dynamische PDF gerendert wird und die PDF-Viewer, die mit den Browsern geliefert werden, keine dynamischen PDFs verarbeiten.
Im Folgenden finden Sie den Code für das Servlet. Das Servlet wird von der benutzerdefinierten Übermittlungsaktion des adaptiven Formulars aufgerufen.
Servlet erstellt das Objekt UsageRights und legt seine Eigenschaften auf der Grundlage der vom Benutzer im adaptiven Formular eingegebenen Werte fest. Das Servlet ruft dann die applyUsageRights -Methode des zu diesem Zweck erstellten Dienstes auf.
package com.aemforms.ares.core.servlets;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.StringReader;
import java.util.Map;
import javax.servlet.Servlet;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.request.RequestParameter;
import org.apache.sling.api.request.RequestParameterMap;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.InputSource;
import com.adobe.aemfd.docmanager.Document;
import com.adobe.fd.readerextensions.client.UsageRights;
import com.aemforms.ares.core.impl.ApplyUsageRights;
@Component(service = Servlet.class, property = {
"sling.servlet.methods=post",
"sling.servlet.paths=/bin/applyrights"
})
public class GetReaderExtendedPDF extends SlingAllMethodsServlet {
private static final long serialVersionUID = -883724052368090823 L;
@Reference
ApplyUsageRights applyRights;
Logger logger = LoggerFactory.getLogger(GetReaderExtendedPDF.class);
public org.w3c.dom.Document w3cDocumentFromStrng(String xmlString) {
try {
System.out.println("the submitted data is " + xmlString);
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(xmlString));
return db.parse(is);
} catch (Exception e) {
logger.debug(e.getMessage());
}
return null;
}
@Override
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) {
doPost(request, response);
}
@Override
protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) {
System.out.println("In my do POST");
UsageRights usageRights = new UsageRights();
String submittedData = request.getParameter("jcr:data");
org.w3c.dom.Document submittedXml = w3cDocumentFromStrng(submittedData);
usageRights.setEnabledDynamicFormFields(true);
usageRights.setEnabledDynamicFormPages(true);
usageRights.setEnabledFormDataImportExport(true);
usageRights.setEnabledFormFillIn(Boolean.valueOf(submittedXml.getElementsByTagName("formfill").item(0).getTextContent()));
usageRights.setEnabledComments(Boolean.valueOf(submittedXml.getElementsByTagName("comments").item(0).getTextContent()));
usageRights.setEnabledEmbeddedFiles(Boolean.valueOf(submittedXml.getElementsByTagName("attachments").item(0).getTextContent()));
usageRights.setEnabledDigitalSignatures(Boolean.valueOf(submittedXml.getElementsByTagName("digitalsignatures").item(0).getTextContent()));
usageRights.setEnabledBarcodeDecoding(Boolean.valueOf(submittedXml.getElementsByTagName("barcode").item(0).getTextContent()));
RequestParameterMap requestParameterMap = request.getRequestParameterMap();
for (Map.Entry < String, RequestParameter[] > pairs: requestParameterMap.entrySet()) {
final org.apache.sling.api.request.RequestParameter[] pArr = pairs.getValue();
final org.apache.sling.api.request.RequestParameter param = pArr[0];
if (!param.isFormField()) {
try {
System.out.println("Got form attachment!!!!" + param.getFileName());
logger.debug("Got attachment!!!!" + param.getFileName());
InputStream is = param.getInputStream();
Document documentToReaderExtend = new Document(is);
documentToReaderExtend = applyRights.applyUsageRights(documentToReaderExtend, usageRights);
if (logger.isDebugEnabled()) {
documentToReaderExtend.copyToFile(new File(param.getFileName().split("/")[1]));
}
InputStream fileInputStream = documentToReaderExtend.getInputStream();
response.setContentType("application/pdf");
response.addHeader("Content-Disposition", "attachment; filename=" + param.getFileName().split("/")[1]);
response.setContentLength((int) fileInputStream.available());
OutputStream responseOutputStream = response.getOutputStream();
documentToReaderExtend.close();
int bytes;
while ((bytes = fileInputStream.read()) != -1) {
responseOutputStream.write(bytes);
}
responseOutputStream.flush();
responseOutputStream.close();
} catch (IOException e) {
logger.debug("Exception in streaming pdf back to client " + e.getMessage());
}
}
}
}
}
Führen Sie die folgenden Schritte aus, um dies auf Ihrem lokalen Server zu testen: