Heim >Backend-Entwicklung >Python-Tutorial >Wie füge ich PDF in Tkinter GUI Python hinzu?
In diesem Artikel erfahren Sie, wie Sie PDF-Dateien in der Tkinter-GUI anzeigen. Wir werden die PyMuPDF-Bibliothek verwenden, um die PDF-Datei zu lesen und in ein Bild zu konvertieren, und dann Tkinter verwenden, um das Bild anzuzeigen.
Für unsere Aufgabe werden wir die folgenden Schritte ausführen -
PDF-Dateien lesen.
Definieren Sie eine Transformationsmatrix, die auf die PDF-Seite angewendet werden soll, um das Bild zu erhalten.
Berechnen Sie die Gesamtseitenzahl für die Fehlerprüfung.
Definieren Sie den Bildschirm (Canvas) der GUI.
Definieren Sie eine Hilfsfunktion zum Konvertieren von PDF-Seiten in PIL-Bilder.
Definieren Sie eine Funktion zum Anzeigen des Seitenbilds in der GUI.
Fügen Sie Schaltflächen, Beschriftungen, Bildlaufleisten usw. hinzu und konfigurieren Sie sie.
Zuerst führen wir zunächst den folgenden Befehl im Terminal aus, um das PyMuPDF-Paket zu installieren.
python -m pip install --upgrade pip python -m pip install --upgrade pymupdf
Jetzt müssen wir die Bibliotheken importieren, die wir verwenden werden. Fitz importieren
import fitz from tkinter import * from PIL import Image, ImageTk
Hier handelt es sich um eine Hilfsbibliothek, die mit der PyMuPDF-Bibliothek bereitgestellt wird, um PDF-Seiten als Bilder zu erhalten.
Wir verwenden zunächst die Funktion fitz.open, um die PDF-Datei zu öffnen, die in der GUI angezeigt werden soll. Dadurch wird ein Dokumentobjekt zurückgegeben, mit dem auf die Seite zugegriffen werden kann.
# open pdf file file_name = "sample.pdf" doc = fitz.open(file_name)
Jetzt müssen wir angeben, wie die Seite angezeigt werden soll. Durch die Definition der Matrixfunktion unten können wir „fittun“, um eine 1x-Skalierung beizubehalten.
# transformation matrix we can apply on pages zoom = 1 mat = fitz.Matrix(zoom, zoom)
Lassen Sie uns auch die Anzahl der Seiten zählen –
# count number of pages num_pages = 0 for p in doc: num_pages += 1
Jetzt definieren wir einen Bildschirm, fügen unserem Code eine Bildlaufleiste und eine Leinwand hinzu -
# initialize and set screen size root = Tk() root.geometry('750x700') # add scroll bar scrollbar = Scrollbar(root) scrollbar.pack(side = RIGHT, fill = Y) # add canvas canvas = Canvas(root, yscrollcommand = scrollbar.set) canvas.pack(side = LEFT, fill = BOTH, expand = 1)
Hier wird unser Bildschirm durch den Namen „root“ dargestellt und hat die Abmessungen 750x700. Wir haben auch eine Bildlaufleiste hinzugefügt und festgelegt, dass sie sich rechts befindet und die gesamte Höhe ausfüllt. Auch hier fügen wir die Leinwand links hinzu und füllen den gesamten Bildschirm auf beiden Seiten aus!
Um die Seitenzahl zu erhalten, die der Benutzer lesen möchte, benötigen wir die Seitenzahl als Eingabe. Wir schaffen das –
# define entry point (field for taking inputs) entry = Entry(root)
# add a label for the entry point label = Label(root, text="Enter page number to display:")
Der Parameter „root“ sagt uns, dass diese Objekte mit dem Bildschirm „root“ verknüpft werden.
Jetzt definieren wir eine Hilfsfunktion, um das Bild der PDF-Datei aus der Seitenzahl zu ermitteln.
def pdf_to_img(page_num): page = doc.load_page(page_num) pix = page.get_pixmap(matrix=mat) return Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
Hier laden wir zunächst die Seite mit doc.load_page und übergeben die Seitenzahl als Parameter. Anschließend konvertieren wir die PDF-Seite, um die Pixeldarstellung der Seite in der zweiten Zeile zu erhalten. Schließlich konvertieren wir die Pixeldarstellung in das PIL-Bildformat.
Jetzt definieren wir eine Funktion show_image, um Bilder in der Tkinter-GUI anzuzeigen.
def show_image(): try: page_num = int(entry.get()) - 1 assert page_num >= 0 and page_num < num_pages im = pdf_to_img(page_num) img_tk = ImageTk.PhotoImage(im) frame = Frame(canvas) panel = Label(frame, image=img_tk) panel.pack(side="bottom", fill="both", expand="yes") frame.image = img_tk canvas.create_window(0, 0, anchor='nw', window=frame) frame.update_idletasks() canvas.config(scrollregion=canvas.bbox("all")) except: pass
Zuerst lesen wir die Seitenzahl vom zuvor definierten Einstiegspunkt und wandeln sie in eine Ganzzahl um. Wenn es sich nicht um eine gültige Ganzzahl handelt, tritt eine Ausnahme auf und der Ausnahmeblock behandelt sie. Anschließend prüfen wir, ob die Seitenzahl zwischen 0 und Seitenzahl liegt, da dies der einzige gültige Seitenbereich ist, den wir anzeigen können. Mithilfe der zuvor definierten Hilfsfunktion erhalten wir dann das PIL-Bild der vom Benutzer angegebenen Seite. Anschließend richten wir Rahmen, Panel und Leinwand ein, um das Bild korrekt anzuzeigen.
Als nächstes fügen wir eine Schaltfläche hinzu, um die Seite anzuzeigen. Wir übergeben die Funktion „show_image“ als Befehl. Bei jedem Tastendruck wird also die Funktion „show_image“ aufgerufen.
# add button to display pages button = Button(root, text="Show Page", command=show_image)
Jetzt legen wir die visuelle Position der verschiedenen Komponenten fest, die wir zuvor definiert haben –
# set visual locations label.pack(side=TOP, fill=None) entry.pack(side=TOP, fill=BOTH) button.pack(side=TOP, fill=None)
Wir legen die Startseite auch wie folgt als erste Seite des PDFs fest:
entry.insert(0, '1') show_image()
Wir konfigurieren die Bildlaufleiste
scrollbar.config(command = canvas.yview) root.mainloop()
Abschließend schließen wir das PDF, um zu verhindern, dass es von unserem Computer beschädigt wird.
doc.close()
Nach dem Ausführen des Programms sehen wir die folgende Ausgabe!
In diesem Artikel lernen wir, wie man PDF-Dateien in der Tkinter-GUI mithilfe der PyMuPDF-Bibliothek zusammen mit Pillow und Tkinter anzeigt. Wir haben auch gelernt, wie man Seiten zählt, PDF-Seiten in Bilder umwandelt, interaktive Schaltflächen erstellt und wie man die verschiedenen Elemente, aus denen eine GUI besteht, visuell platziert.
Das obige ist der detaillierte Inhalt vonWie füge ich PDF in Tkinter GUI Python hinzu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!