本文將教我們如何在 Tkinter GUI 顯示 PDF 檔案。我們將使用 PyMuPDF 庫讀取 pdf 檔案並將其轉換為圖像,然後使用 Tkinter 顯示圖像。
對於我們的任務,我們將執行以下步驟 -
閱讀 PDF 檔案。
定義一個變換矩陣,套用於 PDF 頁面以取得影像。
計算總頁數以進行錯誤檢查。
定義 GUI 的畫面(畫布)。
定義一個輔助函數,用於將 PDF 頁面轉換為 PIL 影像。
定義一個函數以在 GUI 中顯示頁面圖像。
新增按鈕、標籤、捲軸等並配置它們。
首先,我們首先在終端機中執行以下命令來安裝 PyMuPDF 套件。
python -m pip install --upgrade pip python -m pip install --upgrade pymupdf
現在我們需要導入我們將使用的函式庫。導入菲茨
import fitz from tkinter import * from PIL import Image, ImageTk
這裡的 fitz 是一個實用程式庫,與 PyMuPDF 庫一起提供,用於將 PDF 頁面獲取為圖像。
我們首先使用 fitz.open 函數開啟要在 GUI 中顯示的 PDF 檔案。這將傳回一個可用於存取頁面的文件物件。
# open pdf file file_name = "sample.pdf" doc = fitz.open(file_name)
現在我們需要指定如何查看頁面。透過定義下面的矩陣函數,我們可以「fitz」來保持 1 倍縮放。
# transformation matrix we can apply on pages zoom = 1 mat = fitz.Matrix(zoom, zoom)
讓我們也計算一下頁數 -
# count number of pages num_pages = 0 for p in doc: num_pages += 1
現在我們將定義一個螢幕,為我們的程式碼添加一個捲軸和一個畫布 -
# 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)
這裡我們的螢幕由名稱「root」表示,尺寸為 750x700。我們還添加了一個滾動條,並指定它位於右側並填充整個高度。同樣,我們將畫布添加到左側並在兩側填充整個螢幕!
為了接收使用者想要閱讀的頁碼,我們需要將頁碼作為輸入。我們可以這樣做 -
# 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:")
參數「root」告訴我們這些物件將與螢幕「root」相關聯。
現在我們將定義一個輔助函數來從頁碼中取得 PDF 檔案的圖像。
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)
這裡我們先使用 doc.load_page 載入頁面並將頁碼傳遞為參數。然後我們轉換 PDF 頁面以在第二行中獲取該頁面的像素表示。最後,我們將像素表示轉換為 PIL 影像格式。
現在我們定義一個函數 show_image 來在 Tkinter GUI 中顯示圖像。
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
首先,我們從先前定義的入口點讀取頁碼並將其轉換為整數。如果它不是有效的整數,則會發生異常,並且異常區塊會處理它。然後我們檢查頁碼是否在 0 或頁數之間,因為這是我們可以顯示的唯一有效的頁面範圍。然後使用我們之前定義的輔助函數,我們獲得使用者指定頁面的 PIL 映像。然後我們設定框架、面板和畫布以正確顯示該圖像。
接下來我們新增一個按鈕來顯示頁面。我們將函數“show_image”作為命令傳遞。因此,每當按下按鈕時,都會呼叫“show_image”函數。
# add button to display pages button = Button(root, text="Show Page", command=show_image)
現在我們設定之前定義的各種元件的視覺位置 -
# set visual locations label.pack(side=TOP, fill=None) entry.pack(side=TOP, fill=BOTH) button.pack(side=TOP, fill=None)
我們也將初始頁面設定為 PDF 的第一頁,如下 -
entry.insert(0, '1') show_image()
我們設定滾動條
scrollbar.config(command = canvas.yview) root.mainloop()
最後我們關閉 PDF,以免它被我們的電腦損壞。
doc.close()
運行程式後我們會看到以下輸出!
本文教我們如何使用 PyMuPDF 函式庫以及 Pillow 和 Tkinter 在 Tkinter GUI 中顯示 PDF 檔案。我們也了解如何計算頁數、將 PDF 頁面轉換為圖像、製作互動式按鈕以及如何直觀地放置構成 GUI 的不同元素。
以上是如何在Tkinter GUI Python新增PDF?的詳細內容。更多資訊請關注PHP中文網其他相關文章!