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 :
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>
Remplacez
<function-ocid>
par l'OCID de la fonction que vous avez créée lors des étapes précédentes. Remplacez
<dynamic-group-name>
par le nom du groupe dynamique que vous avez créé à l'aide de l'OCID de la fonction.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 :
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"