Como Extrair Campos de Formulário PDF para Excel com Python

Como Extrair Campos de Formulário PDF para Excel com Python

Lidar manualmente com lotes de formulários em PDF é uma das tarefas mais repetitivas e sujeitas a falhas operacionais em rotinas administrativas e de backoffice. O cenário se torna ainda mais desafiador quando esses documentos contêm uma mistura de campos de formulário preenchíveis (AcroForms) e blocos de texto não estruturados, como listas alfabéticas de itens ou beneficiários distribuídas pelas páginas.

Neste artigo, você aprenderá a criar um pipeline em Python para ler os dados preenchidos nos formulários interativos, processar listas embutidas e exportar todas as informações consolidadas diretamente para planilhas Excel estruturadas.


O Desafio: Campos Interativos vs. Texto Embutido

Documentos em PDF armazenam dados de maneiras distintas:

  1. Campos de Formulário (AcroForms/XFA): Objetos estruturados com pares de chave e valor (ex.: Nome, Data, CPF), fáceis de acessar diretamente pela árvore de objetos do arquivo.
  2. Listas Embutidas no Fluxo de Texto: Conteúdo textual renderizado visualmente, que exige extração posicional ou baseada em padrões textuais (Expressões Regulares).

Para resolver isso de forma performática, combinamos bibliotecas como pypdf (para formulários nativos) e pdfplumber (para extração visual e tabular), unificando os dados com pandas.


Ferramentas Necessárias

Instale as dependências essenciais no seu ambiente virtual:

bash
pip install pypdf pdfplumber pandas openpyxl


Passo a Passo Técnico

1. Extração dos Campos Interativos (AcroForms)

A biblioteca pypdf oferece uma interface direta para inspecionar os campos de formulário sem renderizar a página inteira, garantindo alta velocidade de leitura.

python
from pypdf import PdfReader

def extraircamposformulario(caminhopdf):
leitor = PdfReader(caminho
pdf)
campos = leitor.get_fields()

dados_formulario = {}
if campos:
    for chave, campo in campos.items():
        valor = campo.get('/V')  # Obtém o valor preenchido
        dados_formulario[chave] = str(valor) if valor is not None else ""

return dados_formulario

2. Processamento das Listas Alfabéticas Embutidas

Quando o PDF inclui listagens alfabéticas no corpo do documento que não fazem parte dos campos interativos, utilizamos o pdfplumber para extrair o texto bruto e filtrar as linhas correspondentes por ordenação ou prefixos identificáveis.

python
import pdfplumber
import re

def extrairlistaalfabetica(caminhopdf):
itens
lista = [] padrao_item = re.compile(r’^[A-Z].s*(.+)$’) # Exemplo: A. Item Nome

with pdfplumber.open(caminho_pdf) as pdf:
    for pagina in pdf.pages:
        texto = pagina.extract_text()
        if not texto:
            continue

        for linha in texto.split('n'):
            linha_limpa = linha.strip()
            match = padrao_item.match(linha_limpa)
            if match:
                itens_lista.append(match.group(1))

return itens_lista

3. Consolidação e Exportação para Excel

Com os dados estruturados e as listas extraídas, consolidamos os registros em um DataFrame do Pandas e geramos a saída em .xlsx.

python
import os
import pandas as pd

def processarlotepdfs(pastaorigem, caminhoexcel_saida):
registros = []

for arquivo in os.listdir(pasta_origem):
    if arquivo.lower().endswith('.pdf'):
        caminho_completo = os.path.join(pasta_origem, arquivo)

        # Extrai os dados do documento
        dados = extrair_campos_formulario(caminho_completo)
        itens_lista = extrair_lista_alfabetica(caminho_completo)

        # Adiciona o nome do arquivo e a lista formatada
        dados['Arquivo_Origem'] = arquivo
        dados['Itens_Lista'] = "; ".join(itens_lista)

        registros.append(dados)

df = pd.DataFrame(registros)
df.to_excel(caminho_excel_saida, index=False, engine='openpyxl')
print(f"{len(registros)} arquivos processados com sucesso.")

Boas Práticas para Escala e Robustez

Como especialista em automação e processamento de documentos com IA, recomendo adotar as seguintes práticas ao lidar com grandes volumes:

  • Validação de Schema: Certifique-se de que chaves ausentes ou nulas recebam valores padrão consistentes antes da gravação no Excel.
  • Tratamento de Exceções: PDFs corrompidos ou mal formados não devem interromper o loop de processamento; use blocos try/except com logs claros.
  • Processamento Paralelo: Em lotes com milhares de arquivos, utilize a biblioteca multiprocessing ou concurrent.futures para distribuir a leitura entre múltiplos núcleos de CPU.

Conclusão

A combinação de leitores nativos de AcroForms com rotinas de extração de padrões textuais resolve a barreira entre documentos heterogêneos e planilhas estruturadas, reduzindo horas de trabalho manual para poucos segundos de processamento contínuo.

Se a sua empresa precisa estruturar fluxos complexos de extração de dados em documentos, integrar pipelines de IA ou modernizar rotinas legadas com automação em Python, entre em contato para desenvolvermos uma solução sob medida para a sua operação.

Preencha o formulário abaixo para que eu consiga entrar em contato com você.