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.
![](https://s3.us-west-2.amazonaws.com/secure.notion-static.com/02ddfa55-e8c6-4f29-8c44-dbf1a1fbabda/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45EIPT3X45%2F20220805%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20220805T204337Z&X-Amz-Expires=86400&X-Amz-Signature=7c9a1f8e57f82bb2865d719f85391024f91299473c6f5f1d49613816139925a1&X-Amz-SignedHeaders=host&response-content-disposition=filename%20%3D%22Untitled.png%22&x-id=GetObject)
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:
![](https://s3.us-west-2.amazonaws.com/secure.notion-static.com/80bc9d09-d439-48b9-9e3e-f85282e91651/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45EIPT3X45%2F20220805%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20220805T204526Z&X-Amz-Expires=86400&X-Amz-Signature=0c70c00a17efadd698d320628d6deec1e2e0eee59654cdf434ea837c93bc3320&X-Amz-SignedHeaders=host&response-content-disposition=filename%20%3D%22Untitled.png%22&x-id=GetObject)
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 $
![](https://s3.us-west-2.amazonaws.com/secure.notion-static.com/4970cebc-506b-4f8c-b1e5-c63be4edc965/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45EIPT3X45%2F20220805%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20220805T204603Z&X-Amz-Expires=86400&X-Amz-Signature=27f3287886549985e637899876c700ea4e1e2fb77e6f6131d91b4886b70ea7d9&X-Amz-SignedHeaders=host&response-content-disposition=filename%20%3D%22Untitled.png%22&x-id=GetObject)
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.