Merge de arquivos PDF com Python

Neste post prático e sem enrolação vamos ver como fazer merge de arquivos PDF com Python. Não tem segredo: é informar as pasta onde os arquivos estão e executar o código.

No diretório atual tenho duas pastas e dentro de cada uma tem 3 arquivos pdfs.

O pré-requisito é ter o PyPDF2 do Python instalado. No meu caso eu criei uma env e instalei o pacote nela:

cesar@coffops_labs_01 $ virtualenv Env
created virtual environment CPython3.9.1.final.0-64 in 465ms
  creator CPython3Posix(dest=./Python/MergePdfs/Env, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=virtualenv)
    added seed packages: pip==21.2.3, setuptools==57.4.0, wheel==0.37.0
  activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator
cesar@coffops_labs_01 $ 

cesar@coffops_labs_01 $ source Env/bin/activate
(Env) cesar@coffops_labs_01 $

(Env) cesar@coffops_labs_01 $ pip install PyPDF2
Collecting PyPDF2
  Using cached PyPDF2-2.9.0-py3-none-any.whl (207 kB)
Collecting typing-extensions
  Using cached typing_extensions-4.3.0-py3-none-any.whl (25 kB)
Installing collected packages: typing-extensions, PyPDF2
Successfully installed PyPDF2-2.9.0 typing-extensions-4.3.0
(Env) cesar@coffops_labs_01 $

Se não quiser utilizar env, basta utilizar o pip:

cesar@coffops_labs_01 $ pip install PyPDF2
Collecting PyPDF2
  Using cached PyPDF2-2.9.0-py3-none-any.whl (207 kB)
Collecting typing-extensions
  Using cached typing_extensions-4.3.0-py3-none-any.whl (25 kB)
Installing collected packages: typing-extensions, PyPDF2
Successfully installed PyPDF2-2.9.0 typing-extensions-4.3.0
cesar@coffops_labs_01 $

Agora vamos ao código do script.:

from PyPDF2 import PdfFileMerger, PdfFileReader
import os

# Diretórios no qual os arquivos internos serão mergeados
folders = ["sysadmae", "paiguina"]

# Loop para passar por cada diretório
for folder in folders:
    lst_pdfs = []
    print("Merging folder " + folder)
    pdf_path = './' + folder + '/'

    # Loop para armazenar os PDFs que serão mergeados
    for obj in sorted(os.listdir(pdf_path)):
      if '.pdf' in obj:
        lst_pdfs.append(obj)
    
    mergedObject = PdfFileMerger()

    # Loop para adicionar cada PDF no objeto mergedObject
    for file_name in lst_pdfs:
        path_file_name = pdf_path + file_name
        mergedObject.append(PdfFileReader(path_file_name, 'rb'))

    # Grava o PDF mergeado em arquivo
    mergedObject.write(folder + ".pdf")

Basicamente ele faz um loop nos diretório informados na variável folders, armazena em ordem alfabética os arquivos .pdf de cada diretório e faz o merge. Por última salva o arquivo no filesystem local.

Antes de executar o script, vamos ver como ficou a estrutura de arquivos:

Agora vamos executar o script e ver o que acontece:

(Env) cesar@coffops_labs_01 $ python mergePDF.py
Merging folder sysadmae
Merging folder paiguina
(Env) cesar@coffops_labs_01 $

Muito bem. Os arquivos paiguina.pdf e sysadmae.pdf foram criados com sucesso.

Para mais conteúdo sobre Python acesse o aqui. Confira também o canal da Coffops no Youtube.

Deixe um comentário

O seu endereço de e-mail não será publicado.