"""Moteur Joindre deux pages.""" from pypdf import PdfReader, PdfWriter, PageObject, Transformation from .pdf_utils import get_page_size def join_pages(input_path, output_path, direction="horizontal"): """Joindre les pages par paires. direction: "horizontal" (cote a cote) ou "vertical" (dessus/dessous) """ reader = PdfReader(input_path) pages = reader.pages writer = PdfWriter() for i in range(0, len(pages), 2): page1 = pages[i] page2 = pages[i + 1] if i + 1 < len(pages) else None w1, h1 = get_page_size(page1) if page2: w2, h2 = get_page_size(page2) else: w2, h2 = w1, h1 if direction == "horizontal": new_w = w1 + w2 new_h = max(h1, h2) sheet = PageObject.create_blank_page(width=new_w, height=new_h) overlay1 = PageObject.create_blank_page(width=new_w, height=new_h) overlay1.merge_page(page1) sheet.merge_page(overlay1) if page2: overlay2 = PageObject.create_blank_page(width=new_w, height=new_h) overlay2.merge_page(page2) overlay2.add_transformation(Transformation().translate(w1, 0)) sheet.merge_page(overlay2) else: # vertical new_w = max(w1, w2) new_h = h1 + h2 sheet = PageObject.create_blank_page(width=new_w, height=new_h) overlay1 = PageObject.create_blank_page(width=new_w, height=new_h) overlay1.merge_page(page1) overlay1.add_transformation(Transformation().translate(0, h2)) sheet.merge_page(overlay1) if page2: overlay2 = PageObject.create_blank_page(width=new_w, height=new_h) overlay2.merge_page(page2) sheet.merge_page(overlay2) writer.add_page(sheet) with open(output_path, "wb") as f: writer.write(f) return output_path