from io import BytesIO from fpdf import FPDF import pdfrw class PdfMaker: def __init__(self, size: tuple): self.size = size self.writer = pdfrw.PdfWriter() def clear(self): del self.writer self.writer = pdfrw.PdfWriter() def add_image(self, image_data): size = self.size fpdf = FPDF(format=size, unit="pt") width, height = self.size fpdf.add_page() fpdf.image(image_data, 0, 0, width, height) fpdf_reader: pdfrw.PdfReader = pdfrw.PdfReader(fdata=bytes(fpdf.output())) self.writer.addpage(fpdf_reader.getPage(0)) def add_pdf(self, pdf_data: BytesIO): pdf_reader = pdfrw.PdfReader(fdata=bytes(pdf_data.read())) self.writer.addpage(pdf_reader.getPage(0)) def add_pdfs(self, pdf_data: BytesIO): pdf_reader = pdfrw.PdfReader(fdata=bytes(pdf_data.read())) self.writer.addpages(pdf_reader.readpages(pdf_reader.Root)) def get_bytes(self): result_io = BytesIO() self.writer.write(result_io) result_io.seek(0) return result_io