Como Extrair Tabelas e Textos de PDFs Mistos para Excel com Python
O formato PDF foi projetado para consistência visual de impressão, não para extração de dados estruturados. Quando um documento combina páginas múltiplas contendo textos descritivos e tabelas financeiras ou operacionais embutidas, a tarefa de converter esses dados para Excel torna-se complexa. Ferramentas convencionais de conversão costumam quebrar o layout das colunas ou fundir células com parágrafos regulares, exigindo horas de conferência manual.
Para resolver esse problema de forma automatizada, é necessário construir um fluxo em Python capaz de diferenciar elementos estruturados de blocos de texto contínuo, preservando a fidelidade dos dados.
O Desafio Técnico: Segmentação de Layout em PDFs
Documentos multipáginas frequentemente apresentam dois tipos principais de conteúdo:
- Fluxos de texto não estruturado: Parágrafos, notas de rodapé e cabeçalhos que devem ser lidos sequencialmente.
- Dados tabulares estruturados: Células alinhadas por coordenadas espaciais ou bordas explícitas.
Tentativas de ler o PDF como uma sequência linear de strings resultam em tabelas fragmentadas. A abordagem eficiente baseia-se na detecção de coordenadas espaciais (bounding boxes) de cada elemento visual antes de persistir o resultado no Excel.
Arquitetura da Solução em Python
Para garantir desempenho e integridade, utilizamos uma combinação de bibliotecas consagradas:
- pdfplumber: Permite inspecionar cada caractere, linha e retângulo na página, facilitando a identificação de tabelas e a extração seletiva do texto restante.
- pandas: Responsável pela manipulação dos dados tabulares e alinhamento de colunas.
- openpyxl: Escreve os resultados em planilhas Excel formatadas, permitindo salvar textos contextuais em abas dedicadas ou intercalados com as tabelas.
Passo 1: Extraindo Tabelas e Separando o Texto
A biblioteca pdfplumber oferece métodos nativos para identificar áreas ocupadas por tabelas, permitindo subtrair essas regiões da extração de texto corrido.
python
import pdfplumber
import pandas as pd
def extrairconteudopdf(caminhopdf):
dadospaginas = []
with pdfplumber.open(caminho_pdf) as pdf:
for indice, pagina in enumerate(pdf.pages):
numero_pagina = indice + 1
# 1. Localiza e extrai tabelas na página
tabelas_extraidas = pagina.extract_tables()
dfs_tabelas = [pd.DataFrame(t[1:], columns=t[0]) for t in tabelas_extraidas if t]
# 2. Localiza as coordenadas das tabelas para ignorá-las no texto corrido
tabelas_bbox = pagina.find_tables()
areas_tabelas = [t.bbox for t in tabelas_bbox]
# 3. Filtra a página para extrair apenas o texto fora das tabelas
def fora_de_tabelas(obj):
x0, top, x1, bottom = obj["x0"], obj["top"], obj["x1"], obj["bottom"]
for bbox in areas_tabelas:
if not (x1 <= bbox[0] or x0 >= bbox[2] or bottom <= bbox[1] or top >= bbox[3]):
return False
return True
texto_limpo = pagina.filter(fora_de_tabelas).extract_text()
dados_paginas.append({
"pagina": numero_pagina,
"texto": texto_limpo,
"tabelas": dfs_tabelas
})
return dados_paginas
Passo 2: Estruturando os Dados para o Excel
Após isolar os componentes, o passo seguinte consiste em organizar a escrita em uma planilha .xlsx. Uma estratégia comum é manter uma aba para os metadados e textos contextuais e abas separadas para cada tabela identificada, preservando a tipagem numérica e de datas.
python
def salvarparaexcel(dadosextraidos, caminhosaida):
with pd.ExcelWriter(caminhosaida, engine=’openpyxl’) as writer:
# Consolida textos de contexto
resumotextos = []
for item in dadosextraidos:
resumotextos.append({
“Pagina”: item[“pagina”],
“Conteudo”: item[“texto”]
})
dftexto = pd.DataFrame(resumotextos)
dftexto.toexcel(writer, sheetname=”TextosContexto”, index=False)
# Salva as tabelas encontradas
contador_tabela = 1
for item in dados_extraidos:
for df_tabela in item["tabelas"]:
nome_aba = f"Tab_P{item['pagina']}_{contador_tabela}"[:31]
df_tabela.to_excel(writer, sheet_name=nome_aba, index=False)
contador_tabela += 1
Casos Complexos: PDFs Digitalizados e OCR Híbrido
Como especialista em IA e engenharia de dados, frequentemente me deparo com cenários onde o PDF não possui camada nativa de texto (documentos escaneados) ou apresenta células mescladas de alta complexidade.
Nesses casos, a extração puramente geométrica precisa ser complementada por pipelines de visão computacional e OCR (como Tesseract ou modelos baseados em Transformers como LayoutLM). Esses modelos analisam a imagem do documento, reconhecem semântica de linhas e colunas e reconstroem a matriz de dados sem perda de contexto.
Conclusão e Próximos Passos
Automatizar a migração de relatórios PDF com estruturas heterogêneas para Excel elimina gargalos operacionais e reduz a zero a margem de erro por digitação manual. Dependendo do volume de páginas e da variabilidade de layouts, a solução pode ser encapsulada em uma API ou executada em lote.
Se sua empresa lida com volumes críticos de documentos não estruturados e precisa de um pipeline robusto, escalável e sob medida para extração e processamento de dados com Python e IA, entre em contato para avaliarmos seu caso em uma consultoria técnica especializada.


