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