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>
This commit is contained in:
Jules
2026-03-20 10:54:02 +01:00
commit e3dfd90933
30 changed files with 2364 additions and 0 deletions

View File

@@ -0,0 +1,58 @@
"""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