V2.2.0 — Recadrage + Impression
- Recadrage de pages (Pages > Recadrer) : - Mode marges : retirer X mm de chaque cote - Mode taille finale : definir la taille souhaitee (centrage auto) - Apercu en temps reel de la dimension finale - Appliquer a : page courante, toutes, paires, impaires, plage - Plage de pages personnalisee (ex: 1-3, 5, 8-10) - Impression (Fichier > Imprimer / Ctrl+P) : ouvre le PDF dans le viewer par defaut Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -23,6 +23,7 @@ from app.dialogs.page_numbers_dialog import PageNumbersDialog
|
||||
from app.dialogs.masking_dialog import MaskingDialog
|
||||
from app.dialogs.bleeds_dialog import BleedsDialog
|
||||
from app.dialogs.crop_marks_dialog import CropMarksDialog
|
||||
from app.dialogs.crop_dialog import CropDialog
|
||||
|
||||
from app.engine.booklet import create_booklet
|
||||
from app.engine.nup import nup_pages
|
||||
@@ -34,6 +35,7 @@ from app.engine.page_numbers import add_page_numbers
|
||||
from app.engine.masking import apply_masking
|
||||
from app.engine.bleeds import define_bleeds
|
||||
from app.engine.crop_marks import add_crop_marks, remove_crop_marks
|
||||
from app.engine.crop import crop_pages
|
||||
|
||||
|
||||
class MainWindow(QMainWindow):
|
||||
@@ -100,6 +102,7 @@ class MainWindow(QMainWindow):
|
||||
file_menu = menubar.addMenu("Fichier")
|
||||
self._add_action(file_menu, "Ouvrir PDF...", "Ctrl+O", self._open_file)
|
||||
self._add_action(file_menu, "Enregistrer le resultat...", "Ctrl+S", self._save_result)
|
||||
self._add_action(file_menu, "Imprimer...", "Ctrl+P", self._do_print)
|
||||
file_menu.addSeparator()
|
||||
self._add_action(file_menu, "Fusionner des PDF...", "Ctrl+M", self._do_merge)
|
||||
file_menu.addSeparator()
|
||||
@@ -115,6 +118,8 @@ class MainWindow(QMainWindow):
|
||||
|
||||
# Pages
|
||||
pages_menu = menubar.addMenu("Pages")
|
||||
self._add_action(pages_menu, "Recadrer...", None, self._do_crop)
|
||||
pages_menu.addSeparator()
|
||||
self._add_action(pages_menu, "Inserer des pages blanches", None, self._do_insert_blank)
|
||||
|
||||
# Annotations
|
||||
@@ -494,6 +499,42 @@ class MainWindow(QMainWindow):
|
||||
self._hide_progress()
|
||||
QMessageBox.critical(self, "Erreur", str(e))
|
||||
|
||||
def _do_crop(self):
|
||||
if not self._require_file():
|
||||
return
|
||||
from pypdf import PdfReader
|
||||
from app.engine.pdf_utils import get_page_size
|
||||
reader = PdfReader(self._current_file)
|
||||
page = reader.pages[self._viewer.current_page]
|
||||
w, h = get_page_size(page)
|
||||
dlg = CropDialog(
|
||||
page_width_pt=w, page_height_pt=h,
|
||||
total_pages=len(reader.pages),
|
||||
current_page=self._viewer.current_page,
|
||||
parent=self
|
||||
)
|
||||
if dlg.exec():
|
||||
self._show_progress()
|
||||
settings = dlg.get_settings()
|
||||
output = self._make_temp()
|
||||
try:
|
||||
crop_pages(self._current_file, output, **settings)
|
||||
self._show_result(output)
|
||||
except Exception as e:
|
||||
self._hide_progress()
|
||||
QMessageBox.critical(self, "Erreur", str(e))
|
||||
|
||||
def _do_print(self):
|
||||
if not self._require_file():
|
||||
return
|
||||
import subprocess
|
||||
try:
|
||||
source = self._result_file or self._current_file
|
||||
subprocess.Popen(["cmd", "/c", "start", "", source], shell=True)
|
||||
self._status_label.setText("Ouverture pour impression...")
|
||||
except Exception as e:
|
||||
QMessageBox.critical(self, "Erreur", f"Impossible d'imprimer :\n{e}")
|
||||
|
||||
def _do_crop_marks(self):
|
||||
if not self._require_file():
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user