Ein PDF wird angezeigt.

This commit is contained in:
2025-05-23 20:38:19 +02:00
parent 7afbc634e7
commit f7d365af3d
3 changed files with 71 additions and 33 deletions
+2 -1
View File
@@ -6,6 +6,7 @@ readme = "README.md"
requires-python = ">=3.13" requires-python = ">=3.13"
dependencies = [ dependencies = [
"pyside6>=6.9.0", "pyside6>=6.9.0",
"pymupdf>=1.24.0",
] ]
[tool.ruff] [tool.ruff]
@@ -13,4 +14,4 @@ dependencies = [
# extend = "../pyproject.toml" # extend = "../pyproject.toml"
# ...but use a different line length. # ...but use a different line length.
line-length = 120 line-length = 120
+49 -31
View File
@@ -1,8 +1,9 @@
import glob import glob
import os import os
import pymupdf # PyMuPDF
from PySide6.QtCore import Qt from PySide6.QtCore import Qt
from PySide6.QtGui import QCursor, QPixmap from PySide6.QtGui import QCursor, QPixmap, QImage
from PySide6.QtWidgets import QLabel, QMainWindow from PySide6.QtWidgets import QLabel, QMainWindow
from ui.MainWinddow_ui import Ui_MainWindow from ui.MainWinddow_ui import Ui_MainWindow
@@ -38,7 +39,7 @@ class MainWindow(QMainWindow):
self._connect_signals() self._connect_signals()
def _load_images(self): def _load_images(self):
"""Lädt alle GIF-Dateien aus dem Ressourcen-Verzeichnis.""" """Lädt PDF-Seiten aus der Ntbackup.pdf-Datei."""
# Entferne bestehende Widgets aus den Layouts # Entferne bestehende Widgets aus den Layouts
self._clear_layout(self.ui.verticalLayout_2) self._clear_layout(self.ui.verticalLayout_2)
self._clear_layout(self.ui.verticalLayout_3) self._clear_layout(self.ui.verticalLayout_3)
@@ -47,44 +48,61 @@ class MainWindow(QMainWindow):
self.thumbnail_to_full_image = {} self.thumbnail_to_full_image = {}
self.original_pixmaps = {} self.original_pixmaps = {}
# Pfad zum Ressourcen-Ordner # Pfad zur PDF-Datei
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
res_dir = os.path.join(base_dir, "src", "ui", "res") pdf_path = os.path.join(base_dir, "src", "ui", "res", "pdf", "Ntbackup.pdf")
# Alle GIF-Dateien finden if not os.path.exists(pdf_path):
gif_files = glob.glob(os.path.join(res_dir, "*.gif")) print(f"PDF-Datei nicht gefunden: {pdf_path}")
gif_files.sort() # Dateien alphabetisch sortieren return
print(f"Gefundene GIF-Dateien: {gif_files}") try:
# PDF-Datei öffnen
pdf_document = pymupdf.open(pdf_path)
print(f"PDF geladen: {pdf_path} mit {len(pdf_document)} Seiten")
# Für jede GIF-Datei: # Für jede Seite der PDF:
for gif_file in gif_files: for page_num in range(len(pdf_document)):
filename = os.path.basename(gif_file) page = pdf_document[page_num]
# Seite in hoher Auflösung rendern
matrix = pymupdf.Matrix(2.0, 2.0) # 2x Vergrößerung für bessere Qualität
pix = page.get_pixmap(matrix=matrix)
# PyMuPDF Pixmap zu QImage konvertieren
img_data = pix.tobytes("png")
qimg = QImage.fromData(img_data)
# QImage zu QPixmap konvertieren
original_pixmap = QPixmap.fromImage(qimg)
# Original-Pixmap laden und speichern # Thumbnail erstellen und zur linken Spalte hinzufügen
original_pixmap = QPixmap(gif_file) thumbnail = QLabel()
thumbnail.setObjectName(f"thumbnail_page_{page_num + 1}")
thumbnail.setPixmap(original_pixmap.scaledToWidth(200, Qt.TransformationMode.SmoothTransformation))
thumbnail.setCursor(QCursor(Qt.CursorShape.PointingHandCursor))
thumbnail.setMouseTracking(True)
self.ui.verticalLayout_2.addWidget(thumbnail)
# Thumbnail erstellen und zur linken Spalte hinzufügen # Vollbild-Version erstellen und zur rechten Spalte hinzufügen
thumbnail = QLabel() fullsize = QLabel()
thumbnail.setObjectName(f"thumbnail_{filename}") fullsize.setObjectName(f"fullsize_page_{page_num + 1}")
thumbnail.setPixmap(original_pixmap.scaledToWidth(200)) fullsize.setPixmap(original_pixmap)
thumbnail.setCursor(QCursor(Qt.CursorShape.PointingHandCursor)) fullsize.setAlignment(Qt.AlignmentFlag.AlignHCenter) # Horizontale Zentrierung
thumbnail.setMouseTracking(True) self.ui.verticalLayout_3.addWidget(fullsize)
self.ui.verticalLayout_2.addWidget(thumbnail)
# Vollbild-Version erstellen und zur rechten Spalte hinzufügen # Beziehungen speichern
fullsize = QLabel() self.thumbnail_to_full_image[thumbnail] = fullsize
fullsize.setObjectName(f"fullsize_{filename}") self.original_pixmaps[fullsize] = original_pixmap
fullsize.setPixmap(original_pixmap)
fullsize.setAlignment(Qt.AlignmentFlag.AlignHCenter) # Horizontale Zentrierung
self.ui.verticalLayout_3.addWidget(fullsize)
# Beziehungen speichern # Click-Event für das Thumbnail einrichten
self.thumbnail_to_full_image[thumbnail] = fullsize thumbnail.mousePressEvent = lambda event, t=thumbnail: self.on_thumbnail_clicked(event, t)
self.original_pixmaps[fullsize] = original_pixmap
# Click-Event für das Thumbnail einrichten # PDF-Dokument schließen
thumbnail.mousePressEvent = lambda event, t=thumbnail: self.on_thumbnail_clicked(event, t) pdf_document.close()
except Exception as e:
print(f"Fehler beim Laden der PDF: {e}")
def _clear_layout(self, layout): def _clear_layout(self, layout):
"""Entfernt alle Widgets aus einem Layout.""" """Entfernt alle Widgets aus einem Layout."""
Generated
+20 -1
View File
@@ -2,6 +2,21 @@ version = 1
revision = 2 revision = 2
requires-python = ">=3.13" requires-python = ">=3.13"
[[package]]
name = "pymupdf"
version = "1.26.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/99/13/d9f3b67b98111e79307e2a3cf6d5f73daaca002144cc6d236c4a0adbc386/pymupdf-1.26.0.tar.gz", hash = "sha256:ffe023f820379c84a0ddae38b0d07ea4016e1de84929491c34415520c629bcce", size = 74590906, upload-time = "2025-05-22T16:11:17.305Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/b0/c8/e43b872d807ade267699b383d04927e4a1cca05268a43aa9ae0382b6f66a/pymupdf-1.26.0-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:86195673a5f2b3fbf0f75c73c40975a893fc42bf3d5c2a7cce9fb160704d9997", size = 23240576, upload-time = "2025-05-22T16:07:55.406Z" },
{ url = "https://files.pythonhosted.org/packages/ed/bb/2c39c2016b5be35372c5df08b44fa9a4778ccf03f9532b59e9d22f05921c/pymupdf-1.26.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:26c5df128a0ed7c38b80a1e7ddd792dd4d8b264839b6b8b6b6b768b13c0bb60e", size = 22409814, upload-time = "2025-05-22T16:08:15.673Z" },
{ url = "https://files.pythonhosted.org/packages/90/e1/847d93fecbc975978cb2c6c38dbfbd09dde48c1bc97f9298f2b719880230/pymupdf-1.26.0-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:84a4dc96144a6bdf13f7d78c21500b3d1bef14d658156afd479acb3995f650c3", size = 23447163, upload-time = "2025-05-22T22:30:38.708Z" },
{ url = "https://files.pythonhosted.org/packages/bb/86/959057f3cbbff4a7a00a8214f9f1787f6f708bd3c63091b47a95f1ae4053/pymupdf-1.26.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a3f6a45fcf8177763a2629a2ab2cad326e8950a0d120b174b56369365355a2a7", size = 24052460, upload-time = "2025-05-22T16:08:46.304Z" },
{ url = "https://files.pythonhosted.org/packages/e1/80/9cca07bf9c5dfa273781d3559266dcce2001ed111f068b80cad950584c01/pymupdf-1.26.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b5d4751696ba888ab1a91c6a0208c5d31724ee0bebe406f7a83067a08214f88b", size = 25300434, upload-time = "2025-05-22T16:09:13.839Z" },
{ url = "https://files.pythonhosted.org/packages/59/c7/2e3e3d9419415e3c479fd9cb23067d33cc17db89e64c9167551a4acb66f2/pymupdf-1.26.0-cp39-abi3-win32.whl", hash = "sha256:eeb04a439355e2077f7675b8ad9377263d81990fc507748f2254a87d771d682b", size = 16925774, upload-time = "2025-05-22T16:09:34.814Z" },
{ url = "https://files.pythonhosted.org/packages/e9/d7/a6ce6629b66921529543c899830104f40dde45d98534d945970ea61ca8c9/pymupdf-1.26.0-cp39-abi3-win_amd64.whl", hash = "sha256:e39cc74ff030d773c4e76b9e5c5919cc4683895b73bd63bfd7a349a53ab5e8d7", size = 18525321, upload-time = "2025-05-22T16:10:01.426Z" },
]
[[package]] [[package]]
name = "pyside6" name = "pyside6"
version = "6.9.0" version = "6.9.0"
@@ -67,8 +82,12 @@ name = "xsl-validator"
version = "0.1.0" version = "0.1.0"
source = { virtual = "." } source = { virtual = "." }
dependencies = [ dependencies = [
{ name = "pymupdf" },
{ name = "pyside6" }, { name = "pyside6" },
] ]
[package.metadata] [package.metadata]
requires-dist = [{ name = "pyside6", specifier = ">=6.9.0" }] requires-dist = [
{ name = "pymupdf", specifier = ">=1.24.0" },
{ name = "pyside6", specifier = ">=6.9.0" },
]