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>
59 lines
2.2 KiB
Python
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
|