Files
copydev-imposing-tool/app/engine/insert_blank.py
Jules e3dfd90933 Initial commit — Copydev Imposing Tool
Outil d'imposition PDF desktop (PyQt6) remplacant Quite Imposing Plus.
9 fonctions : livret, n-up, step & repeat, imposition manuelle,
jointure pages, pages blanches, numerotation, masquage, fonds perdus.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 10:54:02 +01:00

59 lines
2.2 KiB
Python

"""Moteur Insertion de pages blanches."""
from pypdf import PdfReader, PdfWriter
from .pdf_utils import get_page_size
def insert_blank_pages(input_path, output_path, mode="after", position=None,
every_n=None, target_multiple=None, page_size=None):
"""Inserer des pages blanches.
mode: "before", "after", "every_n", "pad_to_multiple"
position: numero de page (1-based) pour before/after
every_n: inserer apres chaque N pages
target_multiple: arrondir au multiple de N
page_size: (w, h) en points ou None pour meme taille que page adjacente
"""
reader = PdfReader(input_path)
writer = PdfWriter()
if mode == "pad_to_multiple" and target_multiple:
for page in reader.pages:
writer.add_page(page)
num = len(reader.pages)
remainder = num % target_multiple
if remainder != 0:
to_add = target_multiple - remainder
last_w, last_h = get_page_size(reader.pages[-1])
w, h = page_size if page_size else (last_w, last_h)
for _ in range(to_add):
writer.add_blank_page(w, h)
elif mode == "every_n" and every_n:
for i, page in enumerate(reader.pages):
writer.add_page(page)
if (i + 1) % every_n == 0 and i + 1 < len(reader.pages):
w, h = get_page_size(page)
bw, bh = page_size if page_size else (w, h)
writer.add_blank_page(bw, bh)
elif mode in ("before", "after") and position:
idx = position - 1 # 0-based
for i, page in enumerate(reader.pages):
if mode == "before" and i == idx:
w, h = get_page_size(page)
bw, bh = page_size if page_size else (w, h)
writer.add_blank_page(bw, bh)
writer.add_page(page)
if mode == "after" and i == idx:
w, h = get_page_size(page)
bw, bh = page_size if page_size else (w, h)
writer.add_blank_page(bw, bh)
else:
for page in reader.pages:
writer.add_page(page)
with open(output_path, "wb") as f:
writer.write(f)
return output_path