import tempfile from operator import itemgetter import fpdf from image_prediction.info import Info def add_image(pdf, image_metadata_pair, suffix="png"): while fewer_pages_then_required(image_metadata_pair.metadata[Info.PAGE_IDX], pdf): pdf.add_page() add_image_to_last_page(pdf, image_metadata_pair, suffix=suffix) def fewer_pages_then_required(page_idx, pdf): return page_idx > pdf.page - 1 def pdf_stream(pdf: fpdf.fpdf.FPDF): return pdf.output(dest="S").encode("latin1") def add_image_to_last_page(pdf: fpdf.fpdf.FPDF, image_metadata_pair, suffix): image, metadata = image_metadata_pair x, y, w, h = itemgetter(Info.X1, Info.Y1, Info.WIDTH, Info.HEIGHT)(metadata) with tempfile.NamedTemporaryFile(suffix=f".{suffix}") as temp_image: image.save(temp_image.name) pdf.image(temp_image.name, x=x, y=y, w=w, h=h, type=suffix)