Função do Gerador de Documentos
Descubra como usar a função predefinida do Gerador de Documentos no OCI Functions para gerar documentos com base em modelos do Office e dados JSON.
Cenário de Uso Comum
As formas comuns de usar a função Gerador de Documentos incluem:
- Coloque um Modelo do Office e dados JSON no armazenamento de objetos e chame diretamente a função para gerar documentos PDF e armazenar os resultados no armazenamento de objetos.
Os serviços relacionados à função Gerador de Documentos incluem:
Pré-requisitos e Recomendações
Veja a seguir as melhores práticas ao usar esta função predefinida:
- A VCN vinculada ao aplicativo facilita o acesso a outros serviços do OCI usando um Gateway de Serviço, Gateway de Internet ou gateway NAT.
- Defina o tamanho de memória padrão como 512 MB para a maioria das tarefas. Usar conjuntos de dados maiores, empacotar fontes ou usar processamento em lote pode exigir mais memória.
- Para processamento em lote, defina o tempo limite da função predefinida como 300 segundos.
Configurando a Função do Gerador de Documentos
Para configurar uma função Gerador de Documentos, execute as seguintes etapas:
A caixa de diálogo de implantação exibe as tarefas para implantar a função (consulte Finalizando a Implantação de Função Pré-Criada).
Opções de Configuração
Parâmetros de configuração
Nome | Descrição | Obrigatórias |
---|---|---|
PBF_LOG_LEVEL |
No nível de log, as opções são DEBUG , INFO , WARN e ERROR . O padrão é INFO . |
No |
Permissões
A execução de uma função requer determinadas políticas do serviço IAM. Se você tiver selecionado a opção Não criar um grupo dinâmico e uma política do serviço IAM ao criar a função, defina você mesmo o grupo dinâmico e a política do serviço IAM.
Para definir as políticas adequadas, execute as seguintes etapas:
- Crie um grupo dinâmico com a regra:
ALL {resource.id = '<function_ocid>' , resource.compartment.id = '<compartment_ocid>'}
- Configure uma política do IAM usando o grupo dinâmico:
Allow dynamic-group <dynamic-group-name> to manage objects in compartment <compartment-name>
Substitua
<function-ocid>
pelo OCID da função que você criou nas etapas anteriores. Substitua
<dynamic-group-name>
pelo nome do grupo dinâmico que você criou usando o OCID da função.Substitua
<compartment_ocid>
pelo OCID do compartimento que contém a função.Chamando Esta Função
Você pode chamar a função das seguintes maneiras:
- Chame a função diretamente conforme documentado em Chamando Funções criando um corpo de solicitação, conforme mostrado no exemplo JSON a seguir.
Cargas Úteis de Solicitação e Resposta HTTP
Para obter uma lista completa de valores de solicitação e resposta, consulte API do Gerador de Documentos de Função Pré-Criada.
Exemplo de Solicitações e Respostas
Exemplo 1: Gerando um único PDF
Solicitação:
{
"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"
}
}
Resposta - sucesso:
{
"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"
}
}
}
Resposta - falha:
{
"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"
}
}
}
Para obter mais informações, consulte:
Exemplo 2: Gerando vários PDFs - dados especificados em linha
Solicitação:
{
"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"
}
}
Resposta - sucesso:
{
"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"
}
}
}
Para obter mais informações, consulte:
Nomes de Documento na Saída de Lote
Com "responseType": "BATCH"
, vários documentos são produzidos. Você pode controlar a nomeação desses documentos usando o obrigatório{documentId}
no nome do documento.
Formato output.objectName | Descrição | Exemplos |
---|---|---|
invoice{documentId}.pdf |
Sem preenchimento. Começa em 1. | invoice1.pdf, invoice2.pdf |
invoice{documentId|zeroPadding=auto}.pdf |
Preenchimento automático com base no número de documentos em lote. Começa em 1. | invoice01.pdf ... invoice10.pdf |
invoice{documentId|firstId=51}.pdf |
Nenhum preenchimento com zeros. Começa às 51. | invoice51.pdf, invoice52.pdf |
invoice{documentId|firstId=51,zeroPadding=5}.pdf |
Preenchimento esquerdo de 5 dígitos com 0. Começa às 51. | invoice00051.pdf, invoice00052.pdf |
invoice{documentId|zeroPadding=5}.pdf |
Preenchimento esquerdo de 5 dígitos com 0. Começa em 1. | invoice00001.pdf, invoice00002.pdf |
Tipos de Documento Compatíveis
Do Modelo (contentType) | Para Saída (contentType) |
---|---|
Microsoft Word >= 2010 (application/vnd.openxmlformats-officedocument.wordprocessingml.document ) |
PDF (inscrição/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 (inscrição/PDF) |
Microsoft Excel >= 2010 (application/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet ) |
Microsoft Excel >= 2010 (application/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet ) |
Fontes
As seguintes fontes estão disponíveis ao gerar um PDF:
- Caladeia
- Cookie
- Carlito
- DejaVu
- LiberationMono (Transportadora)
- LiberationSans (Arial)
- LiberationSerif (Times New Roman)
- NotoSans-Preto
- NotoSans-BoldItalic
- NotoSans-ExtraLight
- NotoSans-Luz
- NotoSans-MediumItalic
- NotoSans-SemiBoldItalic
- NotoSans-BlackItalic
- NotoSans-ExtraBold
- NotoSans-ExtraLightItalic
- NotoSans-LightItalic
- NotoSans - Regular
- NotoSans-Fino
- NotoSans - Negrito
- NotoSans-ExtraBoldItalic
- NotoSans-Itálico
- NotoSans-Médio
- NotoSans-SemiBold
- NotoSans-ThinItalic
- NotoSansJP - Negrito
- NotoSansJP - Regular
- NotoSansKR - Regular
- NotoSansKR - Negrito
- NotoSansSC - Regular
- NotoSansSC - Negrito
- NotoSansTC - Regular
- NotoSansTC-Bold.otf
- NotoSansArabic - Regular
- NotoSansArabic - Negrito
- NotoSansHebrew - Regular
- NotoSansHebrew - Negrito
- NotoSerif - Negrito
- NotoSerif-BoldItalic
- NotoSerif-Itálico
- NotoSerif - Regular
- OracleSans - Negrito
- OracleSans - Regular
- Oswald-Bold
- Oswald-ExtraLight
- Oswald-Light
- Oswald-Medium
- Oswald-Regular
- Oswald-SemiBold
Se você precisar de uma fonte que não esteja nesta lista, poderá especificar um pacote de fontes na solicitação Gerador de documentos. Um pacote de fontes é um arquivo zip que contém arquivos .ttf e .otf que serão usados durante a geração de PDF. Para obter um exemplo, consulte RequestSingle Reference.
Protegendo um Documento PDF Gerado com uma Senha
Ao gerar um único PDF (com "requestType": "SINGLE"
) ou vários PDFs (com "requestType": "BATCH"
), você pode especificar uma senha para proteger o PDF gerado. Depois de gerar o PDF, a senha deve ser inserida antes que o PDF possa ser aberto.
Para especificar a senha para proteger o PDF gerado, inclua "documentOpenPassword" : "<a-password>"
em uma seção "options"
da solicitação. O valor de <a-password>
deve ser uma string alfanumérica entre 1 e 127 caracteres.
Por exemplo:
{
"requestType": "SINGLE",
"tagSyntax": "DOCGEN_1_0",
"data": ...
"template": ...
"output": ...
"options": {
"documentOpenPassword" : "MyPasswordToOpenTheDocument"
}
}
Tags de Modelo do Gerador de Documentos
Para obter uma lista completa de tags de modelo, consulte:
Diagnóstico e Solução de Problemas
Códigos de status comuns do OCI Functions
A tabela a seguir resume os erros comuns do OCI Functions que você pode encontrar ao trabalhar com funções predefinidas:
Código do Erro | Mensagem de Erro | Ação |
---|---|---|
200 | Bem-sucedido | Nenhuma |
404 | NotAuthorizedOrNotFound | Verifique se as políticas necessárias estão configuradas (consulte A execução dos comandos da CLI do Fn Project retorna um erro 404). |
444 | Timeout |
A conexão entre o cliente e o OCI Functions foi interrompida durante a execução da função (consulte Chamar uma função faz com que o cliente reporte um timeout e um erro 444 é mostrado nos logs da função). Uma nova tentativa pode resolver o problema. Observe que a maioria dos clientes tem um tempo limite interno de 60 segundos. Mesmo quando o timeout da função pré-criada é definido como 300 segundos, o seguinte pode ser necessário:
Para obter mais informações, consulte Chamando Funções. |
502 504 | (vários) | A maioria dos problemas retorna um código de status 502 (consulte Chamar uma função retorna uma mensagem de falha da Função e um erro 502). Um erro 502 com a mensagem "erro recebendo resposta da função" pode ser resolvido aumentando a alocação de memória. Um 502 pode ocorrer ocasionalmente quando a função está em algum estado transitório. Uma nova tentativa pode resolver o problema. |
Para identificar ainda mais a causa, ative os recursos de log para a função pré-criada (consulte Armazenando e Exibindo Logs de Função). Para obter informações detalhadas sobre como diagnosticar e solucionar problemas de uma função, consulte Diagnosticando e Solucionando Problemas do OCI Functions.
Códigos de status da função pré-criada do Gerador de Documentos
Código do Status | Descrição |
---|---|
200 | Bem-sucedido |
207 | Para responseType=BATCH, verifique o código de resposta de cada documento individual. |
400 | Erro de validação ou erro de processamento. Se um erro ObjectNotFound for retornado, certifique-se de que a sub-rede que contém a função tenha acesso ao serviço Object Storage. |
500 | erro interno. |
Para identificar ainda mais a causa, ative os recursos de log para a função pré-criada (consulte Armazenando e Exibindo Logs de Função).
Dicas de Análise de Log
Todas as funções pré-criadas fornecem uma opção para especificar o nível de log como um parâmetro de configuração. Você pode definir o nível de log como DEBUG
para obter mais informações.
Como um aplicativo tem várias funções, as entradas de log de função pré-criadas são identificadas pelo prefixo "PBF | <PBF NAME> ".
Por exemplo, uma entrada de log para a função pré-criada do Gerador de Documentos é semelhante à seguinte:
"PBF | Document Generator | INFO | 2023-08-31T20:19:51.181593Z | 2. LOG001 - Setting Log Level to : DEBUG"