- 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>
40 lines
1.4 KiB
Python
40 lines
1.4 KiB
Python
"""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
|