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:
58
app/engine/insert_blank.py
Normal file
58
app/engine/insert_blank.py
Normal 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
|
||||
Reference in New Issue
Block a user