Criando o Módulo Modificador de PDF
Agora vamos criar o módulo que irá modificar os arquivos PDF. Abra
pdf_modifier.py
em seu editor de texto e adicione o seguinte código:
from PyPDF2 import PdfWriter, PdfReader
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
from io import BytesIO
import os
Assim como antes, estamos importando vários módulos que usaremos. Nesse caso, estamos usando PyPDF2 para manipular arquivos PDF e reportlab para desenhar o CPF no arquivo PDF.
Agora, adicione a seguinte função:
def modify_pdf(filename, cpf, position, color, upload_folder):
packet = BytesIO()
can = canvas.Canvas(packet, pagesize=A4)
# Define the coordinates for each corner
if position == 'top-left':
x = 50
y = 800
elif position == '
top-right':
x = 500
y = 800
elif position == 'bottom-left':
x = 50
y = 50
elif position == 'bottom-right':
x = 500
y = 50
else:
raise ValueError('Invalid position')
# Draw main text (in orange)
can.setFillColor(color) # Orange color
can.setFont("Helvetica", 8) # Set font to Helvetica, size 14
can.drawString(x, y, cpf)
can.save()
# em breve vamos continuar essa parte
Essa função aceita um nome de arquivo, um CPF, uma posição, uma cor e um diretório de upload. Ele usa o módulo reportlab para desenhar o CPF na posição especificada do arquivo PDF.
Agora adicione o restante do código que lida com a criação e gravação do novo PDF:
try:
packet.seek(0)
new_pdf = PdfReader(packet)
print("Successfully created new PDF with CPF.")
except Exception as e:
print("Error creating new PDF with CPF: " + str(e))
try:
existing_pdf = PdfReader(open(os.path.join(upload_folder, filename), "rb"))
print("Successfully opened existing PDF.")
output = PdfWriter()
print(f"Number of pages in existing PDF: {len(existing_pdf.pages)}")
for i in range(len(existing_pdf.pages)):
page = existing_pdf.pages[i]
page.merge_page(new_pdf.pages[0])
output.add_page(page)
with open(os.path.join(upload_folder, filename), "wb") as outputStream:
output.write(outputStream)
print(f"Modified PDF saved at: {os.path.join(upload_folder, filename)}")
except Exception as e:
print("Error opening existing PDF: " + str(e))
Essa parte do código tenta abrir o arquivo PDF existente, criar um novo PDF com o CPF desenhado nele, fundir os dois PDFs e salvar o resultado. Se ocorrer um erro em qualquer ponto, ele será impresso no console.