Tätigen eines API-Aufrufs
[AEM Forms as a Cloud Service]{class="badge informative"}
Anwenden von Verwendungsrechten
Sobald Sie über das Zugriffs-Token verfügen, besteht der nächste Schritt darin, eine API-Anfrage zu stellen, um Verwendungsrechte auf die angegebene PDF anzuwenden. Dazu gehört das Aufnehmen des Zugriffs-Tokens in die Anfrage-Kopfzeile, um den Aufruf zu authentifizieren und eine sichere und autorisierte Verarbeitung des Dokuments sicherzustellen.
Die folgende Funktion wendet die Verwendungsrechte an
public void applyUsageRights(String accessToken,String endPoint) {
String host = "https://" + BUCKET + ".adobeaemcloud.com";
String url = host + endPoint;
String usageRights = "{\"comments\":true,\"embeddedFiles\":true,\"formFillIn\":true,\"formDataExport\":true}";
logger.info("Request URL: {}", url);
logger.info("Access Token: {}", accessToken);
ClassLoader classLoader = DocumentGeneration.class.getClassLoader();
URL pdfFile = classLoader.getResource("pdffiles/withoutusagerights.pdf");
if (pdfFile == null) {
logger.error("PDF file not found!");
return;
}
File fileToApplyRights = new File(pdfFile.getPath());
CloseableHttpClient httpClient = null;
CloseableHttpResponse response = null;
InputStream generatedPDF = null;
FileOutputStream outputStream = null;
try {
httpClient = HttpClients.createDefault();
byte[] fileContent = FileUtils.readFileToByteArray(fileToApplyRights);
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addBinaryBody("document", fileContent, ContentType.create("application/pdf"),fileToApplyRights.getName());
builder.addTextBody("usageRights", usageRights, ContentType.APPLICATION_JSON);
HttpPost httpPost = new HttpPost(url);
httpPost.addHeader("Authorization", "Bearer " + accessToken);
httpPost.addHeader("X-Adobe-Accept-Experimental", "1");
httpPost.setEntity(builder.build());
response = httpClient.execute(httpPost);
generatedPDF = response.getEntity().getContent();
byte[] bytes = IOUtils.toByteArray(generatedPDF);
outputStream = new FileOutputStream(SAVE_LOCATION + File.separator + "ReaderExtended.pdf");
outputStream.write(bytes);
logger.info("ReaderExtended File is saved at "+SAVE_LOCATION);
} catch (IOException e) {
logger.error("Error applying usage rights", e);
} finally {
try {
if (generatedPDF != null) generatedPDF.close();
if (response != null) response.close();
if (httpClient != null) httpClient.close();
if (outputStream != null) outputStream.close();
} catch (IOException e) {
logger.error("Error closing resources", e);
}
}
}
Funktionsaufschlüsselung:
-
Einrichten von API-Endpunkt und Payload
-
Erstellt die API-URL unter Verwendung des bereitgestellten
endPointund eines vordefiniertenBUCKET. -
Definiert eine JSON-Zeichenfolge (
usageRights), die die anzuwendenden Rechte angibt, z. B.:- Kommentare
- Eingebettete Dateien
- Ausfüllen von Formularen
- Formulardatenexport
-
-
Laden der PDF-Datei
- Ruft die Datei
withoutusagerights.pdfaus dem Verzeichnispdffilesab. - Protokolliert einen Fehler, wenn die Datei nicht gefunden wird, und beendet den Vorgang.
- Ruft die Datei
-
Vorbereiten der HTTP-Anfrage
-
Liest die PDF-Datei in ein Byte-Array.
-
Verwendet
MultipartEntityBuilderzum Erstellen einer mehrteiligen Anfrage mit:- der PDF-Datei als Hauptteil der Binärdatei.
- der JSON
usageRightsals Textkörper.
-
Richtet eine HTTP-
POST-Anfrage mit Headern ein:Authorization: Bearer <accessToken>für die Authentifizierung.X-Adobe-Accept-Experimental: 1(möglicherweise für die API-Kompatibilität erforderlich).
-
-
Senden der Anfrage und Verarbeiten der Antwort
- Führt die HTTP-Anfrage mithilfe von
httpClient.execute(httpPost)aus. - Liest die Antwort (erwartet wird die aktualisierte PDF mit angewendeten Verwendungsrechten).
- Schreibt die erhaltenen PDF-Inhalte in „ReaderExtended.pdf“ unter
SAVE_LOCATION.
- Führt die HTTP-Anfrage mithilfe von
-
Fehlerverarbeitung und Bereinigung
- Erfasst und protokolliert alle Fehler vom Typ
IOException. - Stellt sicher, dass alle Ressourcen (Streams, HTTP-Client, Antwort) im Block
finallyordnungsgemäß geschlossen werden.
- Erfasst und protokolliert alle Fehler vom Typ
Im Folgenden finden Sie den main.java-Code, der die Funktion „applyUsageRights“ aufruft.
package com.aemformscs.communicationapi;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private static final Logger logger = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
try {
String accessToken = new AccessTokenService().getAccessToken();
DocumentGeneration docGen = new DocumentGeneration();
docGen.applyUsageRights(accessToken, "/adobe/document/assure/usagerights");
// Uncomment as needed
// docGen.extractPDFProperties(accessToken, "/adobe/document/extract/pdfproperties");
// docGen.mergeDataWithXdpTemplate(accessToken, "/adobe/document/generate/pdfform");
} catch (Exception e) {
logger.error("Error occurred: {}", e.getMessage(), e);
}
}
}
Die main-Methode wird initialisiert, indem getAccessToken() über den AccessTokenService aufgerufen wird, von dem erwartet wird, dass er ein gültiges Token zurückgibt.
-
Anschließend ruft sie
applyUsageRights()über die KlasseDocumentGenerationauf und übergibt:- das abgerufene
accessToken - den API-Endpunkt zum Anwenden der Verwendungsrechte.
- das abgerufene