Extrair CPFs de documentos PDF manualmente é uma tarefa tediosa e propensa a erros. Com um script automatizado, você pode processar centenas de páginas em segundos, garantindo precisão e consistência nos dados extraídos.
Primeiro, precisamos instalar as bibliotecas que farão o processamento do PDF e a extração de texto. Execute o seguinte comando no terminal:
pip install PyPDF2 regex
Agora vamos criar um script Python que abrirá o PDF, extrairá o texto e buscará todos os padrões de CPF. Salve o código abaixo em um arquivo chamado extrair_cpf.py:
import PyPDF2
import re
import sys
def extrair_cpfs(pdf_path):
# Expressão regular para encontrar CPFs no formato XXX.XXX.XXX-XX
pattern = r'\b\d{3}\.\d{3}\.\d{3}-\d{2}\b'
cpfs_encontrados = set()
try:
with open(pdf_path, 'rb') as file:
reader = PyPDF2.PdfReader(file)
for page_num in range(len(reader.pages)):
page = reader.pages[page_num]
text = page.extract_text()
# Encontrar todos os CPFs na página
matches = re.findall(pattern, text)
cpfs_encontrados.update(matches)
return list(cpfs_encontrados)
except Exception as e:
print(f"Erro ao processar o arquivo: {e}")
return []
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Uso: python extrair_cpf.py <caminho_do_pdf>")
sys.exit(1)
pdf_path = sys.argv[1]
cpfs = extrair_cpfs(pdf_path)
if cpfs:
print("CPFs encontrados:")
for cpf in cpfs:
print(cpf)
else:
print("Nenhum CPF encontrado no documento.")
Com o script criado, você pode executá-lo diretamente do terminal. Navegue até o diretório onde salvou o arquivo e execute:
python extrair_cpf.py documento.pdf
Considere um PDF com o seguinte conteúdo extraído:
| Página | Texto Extraído | CPFs Identificados |
|---|---|---|
| 1 | Cliente: João Silva, CPF: 123.456.789-10 | 123.456.789-10 |
| 2 | Beneficiário: Maria Santos, CPF: 987.654.321-00 | 987.654.321-00 |
| 3 | Responsável: Carlos Souza, CPF: 123.456.789-10 | 123.456.789-10 |
Saída do script:
CPFs encontrados:
123.456.789-10
987.654.321-00
Para garantir que os CPFs extraídos são válidos, você pode adicionar uma função de validação ao seu script. Adicione este código após a função extrair_cpfs:
def validar_cpf(cpf):
cpf = ''.join(filter(str.isdigit, cpf))
if len(cpf) != 11:
return False
# Verifica se todos os dígitos são iguais
if cpf == cpf[0] * 11:
return False
# Cálculo do primeiro dígito verificador
soma = sum(int(digit) * (10 - i) for i, digit in enumerate(cpf[:9]))
resto = soma % 11
digito1 = 0 if resto < 2 else 11 - resto
# Cálculo do segundo dígito verificador
soma = sum(int(digit) * (11 - i) for i, digit in enumerate(cpf[:10]))
resto = soma % 11
digito2 = 0 if resto < 2 else 11 - resto
return str(digito1) == cpf[9] and str(digito2) == cpf[10]
# Modifique a função extrair_cpfs para validar os CPFs
def extrair_cpfs(pdf_path):
pattern = r'\b\d{3}\.\d{3}\.\d{3}-\d{2}\b'
cpfs_encontrados = set()
try:
with open(pdf_path, 'rb') as file:
reader = PyPDF2.PdfReader(file)
for page_num in range(len(reader.pages)):
page = reader.pages[page_num]
text = page.extract_text()
matches = re.findall(pattern, text)
cpfs_encontrados.update(matches)
# Validar CPFs encontrados
cpfs_validos = [cpf for cpf in cpfs_encontrados if validar_cpf(cpf)]
return cpfs_validos
except Exception as e:
print(f"Erro ao processar o arquivo: {e}")
return []
Com este script, você automatiza completamente a extração de CPFs de documentos PDF, eliminando o trabalho manual e reduzindo erros. O processamento via linha de comando permite integrar facilmente esta funcionalidade em fluxos de trabalho maiores ou agendá-la para execução periódica.