Effectuer un appel API

[AEM Forms as a Cloud Service]{class="badge informative"}

Appliquer les droits d’utilisation

Une fois que vous disposez du jeton d’accès, l’étape suivante consiste à effectuer une requête API pour appliquer des droits d’utilisation au PDF spécifié. Cela implique d’inclure le jeton d’accès dans l’en-tête de la requête pour authentifier l’appel, tout en assurant un traitement sécurisé et autorisé du document.

La fonction suivante applique les droits d’utilisation.

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

Répartition des fonctions :

  • Configurer le point d’entrée de l’API et le payload

    • Construit l’URL de l’API à l’aide du endPoint fourni et d’un BUCKET prédéfini.

    • Définit une chaîne JSON (usageRights) spécifiant les droits à appliquer, par exemple :

      • Commentaires
      • Fichiers incorporés
      • Remplissage de formulaire
      • Export de données de formulaire
  • Charger le fichier PDF

    • Récupère le fichier withoutusagerights.pdf dans le répertoire pdffiles.
    • Consigne une erreur et se ferme si le fichier est introuvable.
  • Préparer la requête HTTP

    • Lit le fichier PDF dans un tableau d’octets.

    • Utilise MultipartEntityBuilder pour créer une requête en plusieurs parties contenant les éléments suivants :

      • Le fichier PDF en tant que corps binaire.
      • Le JSON usageRights comme corps de texte.
    • Configure une requête HTTP POST avec des en-têtes :

      • Authorization: Bearer <accessToken> pour l’authentification.
      • X-Adobe-Accept-Experimental: 1 (éventuellement requis pour la compatibilité API).
  • Envoyer la requête et gérer la réponse

    • Exécute la requête HTTP à l’aide de httpClient.execute(httpPost).
    • Lit la réponse (attendue comme étant le PDF mis à jour avec les droits d’utilisation appliqués).
    • Écrit le contenu PDF reçu comme « ReaderExtended.pdf » sur SAVE_LOCATION.
  • Gestion et nettoyage des erreurs

    • Capture et consigne toutes les erreurs IOException.
    • S’assure que toutes les ressources (flux, client HTTP, réponse) sont correctement fermées dans le bloc finally.

Voici le code main.java qui appelle la fonction applyUsageRights.

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

La méthode main s’initialise en appelant getAccessToken() depuis AccessTokenService, qui doit renvoyer un jeton valide.

  • Elle appelle ensuite applyUsageRights() à partir de la classe DocumentGeneration, en transmettant les éléments suivants :

    • accessToken récupéré
    • Point d’entrée de l’API pour l’application des droits d’utilisation.

Étapes suivantes

Déployer l’exemple de projet

recommendation-more-help
4859a77c-7971-4ac9-8f5c-4260823c6f69