seabeck.pages.dev

Como criar um script para extrair CPF de PDF via linha de comando?

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.

Pré-requisitos

Instalando as dependências necessárias

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

Criando o script de extração

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.")

Executando o script via linha de comando

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

Exemplo Prático

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

Validando os CPFs extraídos

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 []

Conclusão

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.