V3.6.0 — Demonter pages, masquage visuel, regles, bleeds, corrections

- Demonter les pages : couper en 2 sans reordonner (sous Delivretiser)
- Masquage visuel : selection au curseur sur l'apercu + plage de pages
- Regles horizontale/verticale en mm (menu Affichage)
- Fonds perdus : filigrane rouge pour visualiser les bleeds
- Reperes de coupe : marques a l'exterieur (page agrandie), 2 traits/coin
- Numerotation : couleur configurable via selecteur
- Decalage : Trim & Shift renomme en francais, creep -> chasse
- Recadrages multiples cumulatifs (plages differentes)
- Fix spinbox format personnalise (fleches aleatoires)
- Fix combo livret : option Automatique preservee

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jules
2026-03-29 22:12:54 +02:00
parent f7ad806b26
commit 202834a794
13 changed files with 675 additions and 113 deletions

39
app/engine/disassemble.py Normal file
View File

@@ -0,0 +1,39 @@
"""Moteur Demonter les pages — couper en 2 sans reordonner."""
from pypdf import PdfReader, PdfWriter, PageObject, Transformation
from .pdf_utils import get_page_size
def disassemble_pages(input_path, output_path):
"""Demonter un PDF : couper chaque page en 2 moities (gauche puis droite).
Contrairement a Delivretiser, les pages ne sont PAS remises dans l'ordre
du livret. On obtient simplement 2x plus de pages dans l'ordre de lecture.
"""
reader = PdfReader(input_path)
writer = PdfWriter()
for page in reader.pages:
w, h = get_page_size(page)
half_w = w / 2
# Moitie gauche
left_page = PageObject.create_blank_page(width=half_w, height=h)
left_overlay = PageObject.create_blank_page(width=half_w, height=h)
left_overlay.merge_page(page)
left_overlay.mediabox.upper_right = (half_w, h)
left_page.merge_page(left_overlay)
writer.add_page(left_page)
# Moitie droite
right_page = PageObject.create_blank_page(width=half_w, height=h)
right_overlay = PageObject.create_blank_page(width=half_w, height=h)
right_overlay.merge_page(page)
right_overlay.add_transformation(Transformation().translate(-half_w, 0))
right_overlay.mediabox.upper_right = (half_w, h)
right_page.merge_page(right_overlay)
writer.add_page(right_page)
with open(output_path, "wb") as f:
writer.write(f)
return output_path