Principais pontos
- Preserve o upload original e registre seu checksum, tipo MIME, nome de arquivo e contexto de origem antes do processamento.
- Encaminhe os PDFs para /document/ocr. Considere /image/ocr para textos curtos em imagens e converta entradas de formatos de escritório compatíveis para PDF antes de aplicar OCR a documentos.
- Trate a saída do OCR como dados derivados que precisam de validação pela aplicação, regras de revisão e um vínculo com o documento ou a imagem de origem.
O recebimento de documentos é um problema de roteamento antes de ser um problema de OCR. Um pipeline confiável primeiro identifica o que chegou, preserva o original, converte somente quando necessário, extrai texto com o Robot adequado e registra proveniência suficiente para explicar posteriormente cada resultado pesquisável.
O que mais importa
- Separe a conclusão da Assembly da publicação no índice de pesquisa e verifique os arquivos exportados obrigatórios antes de iniciar a indexação nos sistemas seguintes.
- Use identificadores idempotentes e caminhos de saída versionados quando a mesma origem puder ser enviada novamente por upload ou corrigida mais tarde.
Comece com um contrato de entrada
Um pipeline de documentos se torna difícil quando a primeira etapa aceita qualquer coisa e a última presume que tudo foi compreendido. Defina o contrato de entrada antes de escolher os Robots: quais origens são permitidas, o que a aplicação considera um documento, quais metadados são obrigatórios, qual o tamanho máximo de um upload e quais saídas os sistemas seguintes esperam. Aplique um limite de número de páginas na aplicação antes de criar a Assembly; o exemplo abaixo não limita o número de páginas. PDFs grandes ou com muitas páginas podem exceder a janela fixa de consultas periódicas do Robot enquanto ele aguarda uma tarefa assíncrona do provedor, mesmo que essa tarefa seja concluída depois. Tentar novamente com a entrada inalterada não amplia essa janela; trate tempos limite repetidos como uma falha e reduza ou divida a entrada antes de outra tentativa.
Mantenha o original enviado por upload como referência imutável. Um PDF normalizado, um arquivo de texto de OCR e um registro de pesquisa são derivados com ciclos de vida e modos de falha diferentes. Atribua a eles uma identidade compartilhada na aplicação para que um revisor possa partir de um resultado de pesquisa e chegar aos bytes de origem que o produziram. A navegação por páginas específicas exige um mapeamento de páginas separado.
Identifique a origem
Registre um ID de documento estável, checksum, tenant, responsável pelo upload, nome de arquivo, tipo MIME e horário de recebimento.
Nomeie as saídas
Defina se o fluxo de trabalho retorna um PDF normalizado, texto de OCR, metadados estruturados, miniaturas ou todas essas saídas.
Separe os estados
Acompanhe de forma independente os estados de upload concluído, normalização concluída, extração concluída, revisão concluída, indexação concluída e falha.
Encaminhe cada entrada para o Robot adequado
A extensão do nome de arquivo não informa se um PDF contém texto selecionável ou apenas pixels digitalizados. Use o valor de ${file.mime} determinado pela Transloadit e a política da aplicação para encaminhar as entradas. A determinação do tipo MIME combina metadados incorporados, informações baseadas na extensão e inspeção do conteúdo; a extensão pode prevalecer quando os metadados incorporados não estão disponíveis. Essa barreira de validação não comprova o conteúdo do arquivo. Se o contrato de entrada exigir validação rigorosa do conteúdo, valide os bytes armazenados na sua aplicação. /file/filter pode encaminhar arquivos com condições accepts ou declines aplicadas a ${file.mime}; use error_on_decline quando uma entrada não compatível deva causar a falha da Assembly.
Os PDFs podem ir diretamente para /document/ocr. Use /image/ocr para textos curtos em fotografias e capturas de tela; sua documentação alerta que a precisão pode ser menor em imagens de documentos com conteúdo denso. Para entradas de formatos de escritório, como DOCX, use /document/convert para converter para PDF, verificando primeiro os formatos de entrada documentados. Este fluxo de trabalho usa a saída PDF desse Robot; outros formatos de saída estão disponíveis, mas PDF não é aceito como entrada. Um Robot pode ignorar entradas que não aceita sem causar a falha da Assembly, então adicione uma barreira explícita de validação de MIME e verifique as saídas obrigatórias.
Ramificação de PDFs
Execute /document/ocr para PDFs, incluindo PDFs digitalizados sem uma camada de texto utilizável; escolha json ou text para gerar um artefato separado. Já o formato meta armazena os dados de reconhecimento como ${file.meta.recognized_text} sem criar um arquivo de OCR. Use a granularidade list para cadeias de caracteres; a granularidade padrão full armazena objetos de texto e de polígonos.
Ramificação de imagens
Execute /image/ocr para textos curtos em imagens. Na preparação da entrada, o Robot recodifica a imagem para PNG quando ela excede 2000 pixels por lado, não está em JPEG/PNG ou tem metadados de orientação; ele ajusta a imagem para caber nesse limite e aplica rotação automática quando necessário. Teste com cuidado digitalizações com conteúdo denso; a preparação de imagens para PDF está fora do escopo deste guia.
Ramificação de normalização
Converta formatos de escritório ou de origem compatíveis antes do OCR quando o tipo original não for aceito pelo Robot de OCR.
Preserve a proveniência nas saídas derivadas
É difícil confiar em texto sem proveniência. Armazene o ID do documento de origem, a versão da saída e a data e hora da extração junto com o texto extraído. O exemplo com AWS abaixo retorna JSON em nível de documento, sem atribuição de página. Para resultados de busca específicos por página, a aplicação deve dividir os PDFs antes do upload e registrar os números das páginas originais; essa preparação está fora do escopo do guia. O exemplo permite uma entrada por Assembly e usa nomes fixos de objetos. Um pipeline por página precisa de uma Assembly por página, com chaves de objeto que identifiquem a página e um mapeamento para o documento pai. Reutilizar os mesmos document_id e output_version para várias páginas sobrescreveria os objetos dessas páginas. Nunca deduza o mapeamento pela ordem do array de OCR. Se o documento de origem for substituído, crie uma nova versão e deixe que o indexador retire o registro antigo somente após a verificação da nova saída.
Mantenha o texto de OCR separado do documento normalizado. Um revisor pode precisar da digitalização original, do PDF convertido e do texto extraído lado a lado. Essa relação também é útil quando outro provedor de OCR produz um resultado melhor.
Use uma identidade estável
O ID de origem deve ser mantido nas novas tentativas, enquanto cada saída derivada recebe uma versão.
O contexto da página não está na saída
Mantenha links para a origem de cada resultado. A saída da AWS não tem números de página; a navegação por páginas precisa do mapeamento registrado quando as entradas de uma página foram criadas.
Não sobrescreva correções
Um upload corrigido deve criar uma nova versão e um evento explícito de substituição.
Torne a revisão e a indexação explícitas
O valor ok ASSEMBLY_COMPLETED do Assembly Status, observado por consultas periódicas ou notificações, significa que nenhum erro não ignorado interrompeu a Assembly e que os Jobs declarados nela, incluindo os Jobs de armazenamento, foram concluídos. Um Step pode pular uma entrada, e ignore_errors pode suprimir uma falha de um Step, então a conclusão por si só não comprova que os artefatos necessários existem. Isso também não significa que o índice de busca da sua aplicação tenha aceitado o texto ou que uma pessoa tenha aprovado um registro sensível. Publique um evento para as etapas posteriores do fluxo somente depois que as saídas necessárias existirem e tiverem passado pelas verificações.
/document/ocr não expõe pontuações de confiança, então este Template não pode direcionar o fluxo com base em um limiar de confiança do provedor. Use verificações automatizadas na aplicação, como arquivos de saída ausentes, texto extraído vazio, quantidade de texto implausivelmente pequena para o número de páginas informado, frases esperadas ausentes ou uma classe de documento de alto impacto, para acionar a avaliação humana. Para documentos comuns, um fluxo automatizado ainda pode registrar as verificações e manter uma forma de reprocessar o documento de origem.
Verifique as saídas
Verifique os arquivos esperados, a contagem de páginas, se o texto não está vazio e os metadados antes de indexar.
Revise as exceções
Use uma fila de revisão humana para resultados ambíguos ou de alto impacto em vez de publicá-los silenciosamente.
Indexe de forma idempotente
Use o ID de origem e a versão da saída como chave do índice para que novas tentativas não dupliquem registros.
Versione as correções sem perder evidências
As correções de OCR e as substituições do documento de origem devem criar uma nova versão derivada. Mantenha o documento de origem anterior, a saída anterior e a decisão de revisão por tempo suficiente para atender à sua política de retenção, para que seja possível explicar um resultado do índice após uma correção.
Use o ID do documento e a versão da saída como chave de indexação. Reutilize uma versão somente ao repetir a mesma tentativa de processamento; atribua uma nova versão para correções, mudanças de provedor ou reprocessamentos deliberados. Serialize as gravações de uma versão para que novas tentativas simultâneas não possam sobrescrever um resultado mais recente já aceito.
Retenha o documento de origem
Mantenha os bytes originais disponíveis para revisão e futuras mudanças nas configurações de OCR ou no provedor.
Substitua de forma atômica
Publique a nova versão do índice somente depois que os arquivos exigidos e o estado de revisão dessa versão tiverem sido verificados.
Comece com um Template de PDF com limites definidos
O exemplo abaixo implementa apenas a ramificação para PDFs: permite no máximo um upload, rejeita tipos MIME que não sejam de PDF, solicita JSON de OCR da AWS e exporta o documento de origem e o JSON para chaves fixas distintas dentro de uma única versão de documento controlada pela aplicação. Salve este JSON como conteúdo de um Template armazenado, e não como os parâmetros completos de uma requisição de Assembly. Seu servidor fornece a Auth Key e a assinatura ao criar a Assembly. Teste PDFs representativos para avaliar a estrutura da saída, verificar se o texto é utilizável e observar o comportamento em caso de falha antes de ampliar a configuração de exemplo. auth.max_size limita o total de bytes de upload esperados, incluindo a sobrecarga da requisição: 104857600 bytes equivalem a 100 MiB, não a uma cota por arquivo. Esse parâmetro não garante a rejeição antes que um upload retomável transfira bytes, nem que o OCR seja concluído.
Crie uma conta na Transloadit e salve as Assembly Instructions como um Template. Crie uma credencial de Template para S3 chamada document-output com key, secret, bucket e bucket_region; consulte Credenciais de Template para configurar. Para esta configuração de exemplo, o servidor deve montar e enviar a requisição completa de Assembly, incluindo o upload, em vez de repassar params assinados a um navegador. Ele deve fornecer e validar, nos campos da requisição, valores de document_id e output_version que não estejam vazios, sejam autorizados e sejam seguros para uso em caminhos. Esses valores se tornam as variáveis ${fields.document_id} e ${fields.output_version} nos caminhos de armazenamento. Os campos multipart também são incorporados aos campos da Assembly e não são cobertos pela assinatura de params, portanto a assinatura por si só não autoriza um prefixo de armazenamento. Não encaminhe campos fornecidos pelo cliente. Antes de indexar, verifique se as chaves de armazenamento retornadas correspondem ao prefixo esperado pelo servidor. Salve allow_steps_override: false no Template armazenado para impedir sobrescritas de Steps em tempo de execução ao usar template_id. Mantenha o bucket privado com Block Public Access habilitado e verifique a autorização de quem acessa para leitura; acl: bucket-default omite uma ACL de objeto e depende da política de acesso do bucket.
Este exemplo fixa provider: aws para explicitar a escolha do provedor, sem garantir respostas idênticas. O padrão é auto. Use os limites atuais do AWS Textract como referência oficial para o suporte da AWS a idiomas. Verifique o suporte do provedor antes de escolher AWS ou GCP; suas estruturas JSON são diferentes. Teste os idiomas e layouts dos seus documentos com o provedor escolhido e espere mudanças nas respostas à medida que os modelos do provedor evoluírem.
O exemplo usa format: "json" com granularity: "list" para exportar um array de strings de linhas reconhecidas para indexação e verificações do volume de texto. Isso evita a mistura de entradas de página, linha e palavra do artefato padrão com granularidade full, que pode repetir texto. Já format: "text" exporta texto simples e força a granularidade list. Nenhuma das saídas inclui a indicação da página de origem nem pontuações de confiança. Se você escolher a granularidade full, os pontos opcionais dos polígonos usam um valor de largura e um valor de altura dos metadados do PDF, assumindo o valor zero quando essas dimensões estão ausentes. Valide esses pontos antes de criar sobreposições e nunca deduza a identidade da página pelos polígonos ou pela ordem do array.
Um Job de OCR bem-sucedido ainda pode deixar de reconhecer texto ou reconhecê-lo incorretamente. Verifique tanto os objetos exportados quanto o volume de texto extraído em relação à contagem de páginas informada e encaminhe resultados suspeitos para avaliação humana. Essas verificações automatizadas sinalizam problemas, mas não comprovam que o reconhecimento seja completo ou preciso; compare os resultados com texto conhecido em documentos de origem representativos antes de publicar.
As chaves de objeto fixas source.pdf e ocr.json fazem com que as novas tentativas usem os mesmos locais de armazenamento para uma versão do documento. Elas não deduplicam Assemblies nem tornam o OCR determinístico; a aplicação deve serializar as novas tentativas e manter o mapeamento do resultado aceito. Compare as cobranças dos provedores usando os preços da Transloadit, incluindo o volume de páginas e os demais processamentos do fluxo de trabalho. A cobrança de OCR por página, específica de cada provedor, é calculada com base no valor de page_count informado para a entrada; compare as cobranças atuais antes de estimar o fluxo de trabalho completo.
{
"allow_steps_override": false,
"auth": {
"max_number_of_files": 1,
"max_size": 104857600
},
"steps": {
":original": {
"robot": "/upload/handle"
},
"pdf_only": {
"use": ":original",
"robot": "/file/filter",
"accepts": [["${file.mime}", "==", "application/pdf"]],
"error_on_decline": true,
"error_msg": "Upload a PDF document"
},
"extracted_text": {
"use": "pdf_only",
"robot": "/document/ocr",
"provider": "aws",
"format": "json",
"granularity": "list",
"result": true
},
"stored_source": {
"use": "pdf_only",
"robot": "/s3/store",
"credentials": "document-output",
"path": "documents/${fields.document_id}/${fields.output_version}/source.pdf",
"acl": "bucket-default",
"result": true
},
"stored_text": {
"use": "extracted_text",
"robot": "/s3/store",
"credentials": "document-output",
"path": "documents/${fields.document_id}/${fields.output_version}/ocr.json",
"acl": "bucket-default",
"result": true
}
}
}Teste entradas representativas
Antes de indexar, verifique os dois objetos exportados, a presença de texto extraído não vazio e um volume de caracteres plausível para a contagem de páginas informada. Teste a rejeição de entradas que não sejam PDF e o tratamento de novas tentativas.
Adicione ramificações de forma deliberada
Amplie a configuração de exemplo para PDF com ramificações de conversão e OCR de imagens somente quando os contratos de entrada dessas ramificações estiverem explícitos.
Detalhes técnicos que vale a pena conhecer
- /document/ocr aceita PDF como entrada. /document/convert pode produzir PDFs a partir dos formatos de documentos de escritório descritos na documentação, mas não aceita PDF como entrada.
- Com format: json ou format: text, /document/ocr retorna um artefato separado. format: meta não cria artefato de OCR e armazena os dados de reconhecimento como ${file.meta.recognized_text}; sua estrutura depende da granularidade. Nenhum formato adiciona uma camada de texto pesquisável ao PDF de origem.
- Para a AWS, o artefato de /document/ocr com granularidade
fullcontém texto mapeado e polígonos delimitadores opcionais, descartando os números de página, tipos de bloco e pontuações de confiança do provedor. Ele mistura entradas de página, linha e palavra, então o texto pode se repetir; a granularidadelistretorna strings de linhas. - Um Robot pode ignorar uma entrada que não aceita. A conclusão bem-sucedida de uma Assembly aguarda os Jobs declarados, incluindo Jobs de armazenamento, mas entradas e erros ignorados ainda exigem verificação das saídas.
- /image/ocr recodifica para PNG, ajustando a imagem ao limite de 2000 pixels por lado, quando ela não é JPEG/PNG, excede essa dimensão ou tem metadados de orientação. O reconhecimento em imagens de documentos com texto denso pode ser menos preciso do que o de textos curtos em fotos.
- auth.max_size limita o total esperado de bytes de upload da Assembly, incluindo a sobrecarga das requisições, em vez de limitar cada arquivo separadamente; isso não garante a rejeição antes do início de uma transferência retomável.
- A cobrança de OCR de documentos por página, específica de cada provedor, é calculada usando o valor de
page_countinformado para a entrada. Inclua o volume esperado de páginas ao comparar provedores e estimar o custo do fluxo de trabalho.
Uma abordagem prática
- 1
Salve o Template de PDF e configure seu servidor para construir e enviar a requisição completa da Assembly com os campos document_id e output_version autorizados.
- 2
Rejeite tipos MIME que não sejam PDF com o filtro do exemplo; aplique qualquer limite de número de páginas na aplicação antes do envio.
- 3
Armazene o texto do OCR ou o artefato JSON junto com a origem, sob uma versão compartilhada do documento, mantendo as chaves dos respectivos objetos na aplicação.
- 4
Encaminhe textos vazios, resultados sem as frases esperadas ou resultados estruturalmente ambíguos para um fluxo de revisão humana antes de torná-los pesquisáveis.
Quando a Transloadit é útil
O Template fornecido cobre o recebimento de PDFs enviados pelo servidor, OCR e armazenamento. O guia também descreve ramificações de conversão e de imagens, mas não fornece esses Templates; adicione-os somente após testar seus contratos de entrada.
Limite da arquitetura
A Transloadit pode normalizar arquivos recebidos por upload, extrair texto de entradas com suporte e exportar os artefatos resultantes. Ela não fornece um sistema de gestão de documentos, índice de pesquisa, fila de revisão humana nem garantia jurídica de que o OCR seja preciso.
Perguntas frequentes
O OCR pode tornar qualquer PDF pesquisável?
Não. /document/ocr extrai texto separado; ele não adiciona uma camada de texto ao PDF de origem. A qualidade do reconhecimento depende da qualidade da digitalização, do idioma, do layout e do próprio documento. Mantenha o original e revise os resultados quando um erro tiver consequências.
Devo converter todos os documentos para PDF primeiro?
Não. Converta apenas os formatos que precisam de normalização para o próximo Robot. Uma conversão desnecessária acrescenta trabalho e pode descartar estruturas específicas da fonte.
Onde deve ficar o índice de pesquisa?
Na aplicação ou no serviço de pesquisa responsável pela descoberta dos documentos. A Transloadit pode preparar e exportar a fonte e os dados derivados, mas não é o catálogo de documentos nem o índice de pesquisa.
Como evito documentos duplicados após uma nova tentativa?
Atribua à fonte um ID estável da aplicação e uma versão a cada resultado derivado. Faça com que a operação de indexação substitua essa versão de forma idempotente.