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
+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]
+34 -16
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,34 +48,45 @@ 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]
# Original-Pixmap laden und speichern # Seite in hoher Auflösung rendern
original_pixmap = QPixmap(gif_file) 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)
# Thumbnail erstellen und zur linken Spalte hinzufügen # Thumbnail erstellen und zur linken Spalte hinzufügen
thumbnail = QLabel() thumbnail = QLabel()
thumbnail.setObjectName(f"thumbnail_{filename}") thumbnail.setObjectName(f"thumbnail_page_{page_num + 1}")
thumbnail.setPixmap(original_pixmap.scaledToWidth(200)) thumbnail.setPixmap(original_pixmap.scaledToWidth(200, Qt.TransformationMode.SmoothTransformation))
thumbnail.setCursor(QCursor(Qt.CursorShape.PointingHandCursor)) thumbnail.setCursor(QCursor(Qt.CursorShape.PointingHandCursor))
thumbnail.setMouseTracking(True) thumbnail.setMouseTracking(True)
self.ui.verticalLayout_2.addWidget(thumbnail) self.ui.verticalLayout_2.addWidget(thumbnail)
# Vollbild-Version erstellen und zur rechten Spalte hinzufügen # Vollbild-Version erstellen und zur rechten Spalte hinzufügen
fullsize = QLabel() fullsize = QLabel()
fullsize.setObjectName(f"fullsize_{filename}") fullsize.setObjectName(f"fullsize_page_{page_num + 1}")
fullsize.setPixmap(original_pixmap) fullsize.setPixmap(original_pixmap)
fullsize.setAlignment(Qt.AlignmentFlag.AlignHCenter) # Horizontale Zentrierung fullsize.setAlignment(Qt.AlignmentFlag.AlignHCenter) # Horizontale Zentrierung
self.ui.verticalLayout_3.addWidget(fullsize) self.ui.verticalLayout_3.addWidget(fullsize)
@@ -86,6 +98,12 @@ class MainWindow(QMainWindow):
# Click-Event für das Thumbnail einrichten # Click-Event für das Thumbnail einrichten
thumbnail.mousePressEvent = lambda event, t=thumbnail: self.on_thumbnail_clicked(event, t) thumbnail.mousePressEvent = lambda event, t=thumbnail: self.on_thumbnail_clicked(event, t)
# PDF-Dokument schließen
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."""
if layout is not None: if layout is not None:
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" },
]