Fonction de générateur de document

Découvrez comment utiliser la fonction prédéfinie Générateur de documents dans le service des fonctions pour OCI pour générer des documents basés sur des modèles Office et des données JSON.

Scénarios d'utilisation communs

Voici les moyens courants d'utiliser la fonction Générateur de documents :

  • Placez un modèle Office et des données JSON dans le stockage d'objets et appelez directement la fonction pour générer des documents PDF et stocker les résultats dans le stockage d'objets.

Les services liés à la fonction Générateur de documents comprennent :

Préalables et recommandations

Voici les meilleures pratiques à suivre pour utiliser cette fonction prédéfinie :

  • Le VCN lié à l'application facilite l'accès à d'autres services OCI à l'aide d'une passerelle de service, d'une passerelle Internet ou d'une passerelle NAT.
  • Définissez la taille de mémoire par défaut à 512 Mo pour la plupart des tâches. L'utilisation de jeux de données plus volumineux, le regroupement de polices ou le traitement par lots peuvent nécessiter plus de mémoire.
  • Pour le traitement par lots, réglez la temporisation de la fonction prédéfinie à 300 secondes.

Configuration de la fonction Générateur de documents

Pour configurer une fonction du générateur de documents, procédez comme suit :

  1. Dans la page Fonctions prédéfinies, sélectionnez Générateur de documents, puis Créer une fonction.
  2. Configurez le nom, le compartiment et l'application de la façon suivante :
    • Nom : Nom de votre choix pour la nouvelle fonction. Le nom doit commencer par une lettre ou un trait de soulignement, suivi de lettres, de chiffres, de tirets ou de traits de soulignement. Il peut comporter entre 1 et 255 caractères. Évitez d'entrer des informations confidentielles.

      Pour créer la fonction dans un autre compartiment, sélectionnez Changer de compartiment.

    • Application : Sélectionnez l'application dans laquelle vous voulez créer la fonction.

      Si aucune application appropriée n'existe déjà dans le compartiment courant, sélectionnez Créer une application et spécifiez les détails suivants :

      • Nom : Nom de la nouvelle application. Évitez d'entrer des informations confidentielles.
      • VCN : VCN (réseau en nuage virtuel) dans lequel exécuter des fonctions dans l'application. Facultativement, sélectionnez Compartiment du VCN : pour sélectionner un VCN d'un autre compartiment.
      • Sous-réseaux : Le ou les sous-réseaux (trois au maximum) dans lesquels exécuter des fonctions. Facultativement, sélectionnez Compartiment des sous-réseaux : pour sélectionner un sous-réseau dans un autre compartiment.
      • Forme : Architecture de processeur des instances de calcul sur lesquelles déployer et exécuter des fonctions dans l'application. Toutes les fonctions de l'application sont déployées et exécutées sur des instances de calcul ayant la même architecture. L'image de la fonction doit contenir les dépendances nécessaires pour l'architecture que vous sélectionnez.
      • Marqueurs : Si vous êtes autorisé à créer une ressource, vous disposez également des autorisations nécessaires pour appliquer des marqueurs à structure libre à cette ressource. Pour appliquer un marqueur défini, vous devez être autorisé à utiliser l'espace de noms de marqueur. Pour plus d'informations sur le marquage, voir Marqueurs de ressource. Si vous ne savez pas si vous devez appliquer des marqueurs, ignorez cette option ou demandez à un administrateur. Vous pouvez appliquer des marqueurs plus tard.
  3. Configurez la politique IAM pour les fonctions prédéfinies.

    Par défaut, le service des fonctions pour OCI crée un groupe dynamique et une politique IAM avec les énoncés de politique requis pour exécuter la fonction prédéfinie. N'effectuez aucune modification pour accepter le comportement par défaut.

    Si vous ne voulez pas que le service des fonctions pour OCI crée automatiquement le groupe dynamique et la politique, sélectionnez Ne pas créer de groupe dynamique et de politique IAM.

    Important

    Si vous sélectionnez l'option Ne pas créer de groupe dynamique et de politique IAM, vous devez définir vous-même le groupe dynamique et la politique IAM. Pour plus d'informations, voir Autorisations.
  4. Configurez la mémoire de fonction et les valeurs de temporisation comme suit :
    • Mémoire (en Mo) : Quantité maximale de mémoire que la fonction peut utiliser en cours d'exécution, en mégaoctets. Il s'agit de la mémoire disponible pour l'image de fonction. (Par défaut : 512 Mo)
    • Temporisation (en secondes) : Durée maximale d'exécution de la fonction, en secondes. Si la fonction ne se termine pas dans le temps spécifié, le système annule la fonction. (Par défaut : 300)
  5. (Facultatif) Configurez l'accès simultané provisionné pour réduire les retards initiaux lors de l'appel de la fonction en spécifiant un nombre minimal d'appels de fonction simultanée pour lesquels vous voulez que l'infrastructure d'exécution soit constamment disponible. (Par défaut : Non sélectionné)

    Si cette option est sélectionnée, spécifiez le nombre d'unités d'accès simultané provisionnées affectées à cette fonction. Valeur par défaut : 10.

    Pour plus d'informations sur la simultanéité provisionnée, voir Réduction de la latence initiale à l'aide de la simultanéité provisionnée.

  6. Définissez les paramètres de configuration de la fonction comme décrit dans Options de configuration.
  7. Facultativement, entrez des marqueurs dans la section Marqueurs. Si vous êtes autorisé à créer une ressource, vous disposez également des autorisations nécessaires pour appliquer des marqueurs à structure libre à cette ressource. Pour appliquer un marqueur défini, vous devez être autorisé à utiliser l'espace de noms de marqueur. Pour plus d'informations sur le marquage, voir Marqueurs de ressource. Si vous ne savez pas si vous devez appliquer des marqueurs, ignorez cette option ou demandez à un administrateur. Vous pouvez appliquer des marqueurs plus tard.
  8. Sélectionnez Créer.

La boîte de dialogue de déploiement affiche les tâches de déploiement de la fonction (voir Fin du déploiement de fonction prédéfinie).

Options de configuration

Paramètres de configuration

Le nom Description Obligatoire
PBF_LOG_LEVEL Niveau de journalisation, les options sont DEBUG, INFO, WARN et ERROR. La valeur par défaut est INFO. Non

Permissions

L'exécution d'une fonction nécessite certaines politiques IAM. Si vous avez sélectionné l'option Ne pas créer de groupe dynamique et de politique IAM lors de la création de la fonction, vous devez définir vous-même le groupe dynamique et la politique IAM.

Pour définir les politiques appropriées :

  • Créez un groupe dynamique avec la règle :
    ALL {resource.id = '<function_ocid>' , resource.compartment.id = '<compartment_ocid>'}
  • Configurez une politique IAM à l'aide du groupe dynamique :
    Allow dynamic-group <dynamic-group-name> to manage objects in compartment <compartment-name>
Note

Remplacez <function-ocid> par l'OCID de la fonction que vous avez créée lors des étapes précédentes.
Note

Remplacez <dynamic-group-name> par le nom du groupe dynamique que vous avez créé à l'aide de l'OCID de la fonction.
Note

Remplacez <compartment_ocid> par l'OCID du compartiment qui contient la fonction.

Appel de cette fonction

Vous pouvez appeler la fonction comme suit :

  • Appelez la fonction directement comme documenté dans Appel de fonctions en créant un corps de demande comme illustré dans l'exemple JSON suivant.

Données utiles de demande et de réponse HTTP

Pour obtenir la liste complète des valeurs de demande et de réponse, voir API du générateur de documents de fonction prédéfinie.

Exemples de demandes et de réponses

Exemple 1 : Générer un seul fichier PDF

Demande :

{
  "requestType": "SINGLE",
  "tagSyntax": "DOCGEN_1_0",
  "data": {    
    "source": "OBJECT_STORAGE",
    "namespace": "my_namespace",
    "bucketName": "my_bucket",
    "objectName": "my_folder/movies.json"
  },
  "template": {
    "source": "OBJECT_STORAGE",
    "namespace": "my_namespace",
    "bucketName": "my_bucket",
    "objectName": "my_folder/movies.docx"
  },
  "output": {
    "target": "OBJECT_STORAGE",
    "namespace": "my_namespace",
    "bucketName": "my_bucket",
    "objectName": "my_folder/movies.pdf",
    "contentType": "application/pdf"
   }
}

Réponse - succès :

{
  "responseType": "SINGLE",
  "code": 200,
  "status": "OK",
  "document": {
    "type": "OBJECT_STORAGE",
    "namespace": "my_namespace",
    "bucketName": "my_bucket",
    "objectName": "my_folder/movies.pdf",
    "contentType": "application/pdf"
  },
  "metadata": {
    "version": "1.0",
    "configurationParameters": {
      "FN_FN_NAME": "docgen",
      "FN_APP_NAME": "docgen-app",
      "FN_TYPE": "sync",
      "FN_APP_ID": "ocid1.fnapp.oc1.phx.example...63m5hsmzzz",
      "OCI_REGION_METADATA": "{\"realmDomainComponent\":\"oraclecloud.com\",\"realmKey\":\"oc1\",\"regionIdentifier\":\"us-phoenix-1\",\"regionKey\":\"PHX\"}",
      "FN_FN_ID": "ocid1.fnfunc.oc1.phx.example...h523viuzzz",
      "FN_MEMORY": "512"
    }
  }
}

Réponse - échec :

{
  "responseType": "ERROR",
  "code": "400",
  "status": "InvalidParameters",
  "error": "No template has been specified.",
  "metadata": {
    "version": "1.0",
    "configurationParameters": {
      "FN_FN_NAME": "docgen",
      "FN_APP_NAME": "docgen-app",
      "FN_TYPE": "sync",
      "FN_APP_ID": "ocid1.fnapp.oc1.phx.example...63m5hsmzzz",
      "OCI_REGION_METADATA": "{\"realmDomainComponent\":\"oraclecloud.com\",\"realmKey\":\"oc1\",\"regionIdentifier\":\"us-phoenix-1\",\"regionKey\":\"PHX\"}",
      "FN_FN_ID": "ocid1.fnfunc.oc1.phx.example...h523viuzzz",
      "FN_MEMORY": "512"
    }
  }
}

Pour plus d'informations, voir :

Exemple 2 : Génération de plusieurs fichiers PDF - données indiquées en ligne

Demande :

{
  "requestType": "BATCH",
  "tagSyntax": "DOCGEN_1_0",
   "data": {
    "source": "INLINE",
    "content": [{"name":"John"},{"name":"Monica"}]
  },
  "template": {
    "source": "OBJECT_STORAGE",
    "namespace": "my_namespace",
    "bucketName": "my_bucket",
    "objectName": "my_folder/Letters.docx",
    "contentType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
  },
  "output": {
    "target": "OBJECT_STORAGE",
    "namespace": "my_namespace",
    "bucketName": "my_bucket",
    "objectName": "my_folder/Letters{documentId}.pdf",
    "contentType": "application/pdf",
    "storageTier": "INFREQUENT_ACCESS"
   }
}

Réponse - succès :

{
  "responseType": "BATCH",
  "code": 207,
  "status": "Multi-Status",
  "documents": [
    {
      "documentId": 1,
      "code": 200,
      "status": "OK",
      "document": {
        "type": "OBJECT_STORAGE",
        "namespace": "my_namespace",
        "bucketName": "my_bucket",
        "objectName": "my_folder/Letters1.pdf",
        "contentType": "application/pdf",
        "storageTier": "INFREQUENT_ACCESS"    
      }
    },
    {
      "documentId": 2,
      "code": 200,
      "status": "OK",
      "document": {
        "type": "OBJECT_STORAGE",
        "namespace": "my_namespace",
        "bucketName": "my_bucket",
        "objectName": "my_folder/Letters2.pdf",
        "contentType": "application/pdf",
        "storageTier": "INFREQUENT_ACCESS"    
      }
    }
  ],
  "metadata": {
    "version": "1.0",
    "configurationParameters": {
      "FN_FN_NAME": "docgen",
      "FN_APP_NAME": "docgen-app",
      "FN_TYPE": "sync",
      "FN_APP_ID": "ocid1.fnapp.oc1.phx.example...63m5hsmzzz",
      "OCI_REGION_METADATA": "{\"realmDomainComponent\":\"oraclecloud.com\",\"realmKey\":\"oc1\",\"regionIdentifier\":\"us-phoenix-1\",\"regionKey\":\"PHX\"}",
      "FN_FN_ID": "ocid1.fnfunc.oc1.phx.example...h523viuzzz",
      "FN_MEMORY": "512"
    }
  }
 }

Pour plus d'informations, voir :

Noms de document dans la sortie de lot

Avec "responseType": "BATCH", plusieurs documents sont produits. Vous pouvez contrôler l'attribution de nom à ces documents à l'aide de requis{documentId} dans le nom du document.

Format output.objectName Description Exemples
invoice{documentId}.pdf Aucun remplissage. Commence à 1. invoice1.pdf, invoice2.pdf
invoice{documentId|zeroPadding=auto}.pdf Remplissage automatique basé sur le nombre de documents dans le lot. Commence à 1. invoice01.pdf ... invoice10.pdf
invoice{documentId|firstId=51}.pdf Aucun remplissage par zéro. Commence à 51. invoice51.pdf, invoice52.pdf
invoice{documentId|firstId=51,zeroPadding=5}.pdf Remplissage gauche à 5 chiffres avec 0. Commence à 51. invoice00051.pdf, invoice00052.pdf
invoice{documentId|zeroPadding=5}.pdf Remplissage gauche à 5 chiffres avec 0. Commence à 1. invoice00001.pdf, invoice00002.pdf

Types de documents pris en charge

À partir du modèle (contentType) À la sortie (contentType)
Microsoft Word >= 2010 (application/vnd.openxmlformats-officedocument.wordprocessingml.document) PDF (application/PDF)
Microsoft Word >= 2010 (application/vnd.openxmlformats-officedocument.wordprocessingml.document) Microsoft Word >= 2010 (application/vnd.openxmlformats-officedocument.wordprocessingml.document)
Microsoft Excel >= 2010 (application/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet) PDF (application/PDF)
Microsoft Excel >= 2010 (application/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet) Microsoft Excel >= 2010 (application/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet)

Polices

Les polices suivantes sont disponibles lors de la génération d'un PDF :

  • Caladea
  • Cookie
  • Carlito
  • DejaVu
  • LiberationMono (Courier)
  • LiberationSans (Arial)
  • LiberationSerif (Times New Roman)
  • NotoSans-Noir
  • NotoSans-BoldItalic
  • NotoSans-ExtraLight
  • NotoSans-Lumière
  • NotoSans-MediumItalic
  • NotoSans-SemiBoldItalic
  • NotoSans-BlackItalic
  • NotoSans-ExtraBold
  • NotoSans-ExtraLightItalic
  • NotoSans-LightItalic
  • NotoSans-Régulier
  • NotoSans-Fin
  • NotoSans-Gras
  • NotoSans-ExtraBoldItalic
  • NotoSans-Italique
  • NotoSans-Moyen
  • NotoSans-SemiBold
  • NotoSans-ThinItalic
  • NotoSansJP-Gras
  • NotoSansJP-Régulier
  • NotoSansKR-Régulier
  • NotoSansKR-Gras
  • NotoSansSC-Régulier
  • NotoSansSC-Gras
  • NotoSansTC-Régulier
  • NotoSansTC-Bold.otf
  • NotoSansArabic-Régulier
  • NotoSansArabic-Gras
  • NotoSansHebrew-Régulier
  • NotoSansHebrew-Gras
  • NotoSerif-Gras
  • NotoSerif-BoldItalic
  • NotoSerif-Italique
  • NotoSerif-Régulier
  • OracleSans-Gras
  • OracleSans-Régulier
  • Oswald-Bold
  • Oswald-ExtraLight
  • Oswald-Light
  • Oswald-Medium
  • Oswald-Regular
  • Oswald-SemiBold

Si vous avez besoin d'une police qui ne figure pas dans cette liste, vous pouvez spécifier un ensemble de polices dans la demande du générateur de documents. Un ensemble de polices est un fichier zip contenant les fichiers .ttf et .otf qui seront utilisés lors de la génération du PDF. Pour un exemple, voir Informations de référence sur le type RequestSingle.

Protection d'un document PDF généré avec un mot de passe

Lors de la génération d'un seul PDF (avec "requestType": "SINGLE") ou de plusieurs PDF (avec "requestType": "BATCH"), vous pouvez spécifier un mot de passe pour protéger le PDF généré. Après avoir généré le PDF, le mot de passe doit être entré avant que le PDF puisse être ouvert.

Pour spécifier le mot de passe pour protéger le PDF généré, incluez "documentOpenPassword" : "<a-password>" dans une section "options" de la demande. La valeur de <a-password> doit être une chaîne alphanumérique de 1 à 127 caractères.

Par exemple :

{
  "requestType": "SINGLE",
  "tagSyntax": "DOCGEN_1_0",
  "data": ...  
  "template": ...
  "output": ...
  "options": {
    "documentOpenPassword" : "MyPasswordToOpenTheDocument"
  }
}

Marqueurs de modèle du générateur de documents

Pour une liste complète des marqueurs de modèle, voir :

Dépannage

Codes de statut communs du service des fonctions pour OCI

Le tableau suivant résume les erreurs courantes du service des fonctions pour OCI que vous pourriez rencontrer lorsque vous utilisez des fonctions prédéfinies :

Code d'erreur Message d'erreur Action
200 Succès Aucune
404 NotAuthorizedOrNotFound Vérifiez que les politiques requises sont configurées (voir L'exécution des commandes de l'interface de ligne de commande Fn Project retourne une erreur de type 404).
444 Temporisation

La connexion entre le client et le service des fonctions pour OCI a été interrompue lors de l'exécution de la fonction (voir L'appel d'une fonction entraîne une temporisation du client et une erreur 444 est affichée dans les journaux de la fonction). Une nouvelle tentative peut résoudre le problème.

Notez que la plupart des clients ont une temporisation interne de 60 secondes. Même lorsque la temporisation de la fonction prédéfinie est réglée à 300 secondes, les éléments suivants peuvent être requis :

  • Lors de l'utilisation de l'interface de ligne de commande OCI : Utilisez --read-timeout 300
  • Lors de l'utilisation de la trousse SDK OCI : Réglez la temporisation de lecture à 300 lors de la création du client
  • Lors de l'utilisation de DBMS_CLOUD.SEND_REQUEST : Utilisez UTL_HTTP.set_transfer_timeout(300);

Pour plus d'informations, voir Appel de fonctions.

502 504 (divers) La plupart des problèmes retournent un code de statut 502 (voir L'appel d'une fonction retourne un message d'échec de fonction et une erreur 502). Une erreur 502 avec le message "error receive function response" peut être résolue en augmentant l'allocation de mémoire. Un 502 peut se produire occasionnellement lorsque la fonction est dans un état transitoire. Une nouvelle tentative peut résoudre le problème.

Pour en identifier la cause, activez les fonctions de journalisation pour la fonction prédéfinie (voir Stockage et consultation des journaux de fonction). Pour des informations détaillées sur le dépannage d'une fonction, voir Dépannage du service des fonctions pour OCI.

Codes de statut de fonction prédéfinie du générateur de documents

Code de statut Description
200 Réussite
207 Pour responseType=BATCH, vérifiez le code de réponse pour chaque document individuel.
400 Erreur de validation ou de traitement. Si une erreur ObjectNotFound est retournée, assurez-vous que le sous-réseau contenant la fonction a accès au service de stockage d'objets.
500 Erreur interne.

Pour en identifier la cause, activez les fonctions de journalisation pour la fonction prédéfinie (voir Stockage et consultation des journaux de fonction).

Conseils sur l'analyse des journaux

Toutes les fonctions prédéfinies fournissent une option permettant de spécifier le niveau de journalisation en tant que paramètre de configuration. Vous pouvez régler le niveau de journalisation à DEBUG pour obtenir plus d'informations.

Étant donné qu'une application comporte plusieurs fonctions, les entrées du journal des fonctions prédéfinies sont identifiées par le préfixe "PBF | <PBF NAME>".

Par exemple, une entrée de journal pour la fonction prédéfinie du générateur de documents ressemble à ce qui suit :

"PBF | Document Generator | INFO | 2023-08-31T20:19:51.181593Z | 2. LOG001 - Setting Log Level to : DEBUG"