Files
Templated/pdf_merger.py

43 lines
1.1 KiB
Python

from PyPDF2 import PdfFileReader, PdfFileWriter
import io
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
from typing import IO, Union
from xlsx_replacement import XlsxReplacement
class PdfMerger:
def __init__(self, input_file: Union[str, IO], replacer: XlsxReplacement):
self.in_file = input_file
self.in_pdf = PdfFileReader(input_file)
self.replacer = replacer
def get_new_document(self) -> io.BytesIO:
overlay = PdfFileReader(self._build_canvas())
generated = PdfFileWriter()
for i in range(self.in_pdf.numPages):
page = self.in_pdf.getPage(i)
if i <= overlay.numPages:
page.mergePage(overlay.getPage(i))
generated.addPage(page)
out = io.BytesIO()
generated.write(out)
out.seek(0)
return out
def _build_canvas(self) -> io.BytesIO:
packet = io.BytesIO()
can = canvas.Canvas(packet, pagesize=A4)
for x, y, data in self.replacer.get_replacements():
can.drawString(x, y, data)
can.save()
packet.seek(0)
return packet
pass