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.