Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

สร้าง PDF Viewer ด้วย Python Tkinter และ PyPDF2

สร้างแอปพลิเคชันอ่าน PDF ด้วย Tkinter และ PyPDF2 สำหรับอ่านข้อความจากไฟล์ PDF แสดงใน Text Widget พร้อมเมนูเปิด/ล้าง/ออก

ขั้นตอนการเตรียม


# ติดตั้ง PyPDF2
pip install PyPDF2

โครงสร้างแอปพลิเคชัน

  1. นำเข้า: PyPDF2, tkinter, filedialog
  2. สร้าง Main Window และ Text Widget
  3. สร้าง Menu Bar: File → Open, Clear, Quit
  4. ฟังก์ชัน Open: ใช้ filedialog.askopenfilename() เลือกไฟล์ → PyPDF2.PdfReader อ่าน → page.extract_text() ดึงข้อความ → ใส่ Text Widget
  5. ฟังก์ชัน Clear: ล้าง Text Widget
  6. ฟังก์ชัน Quit: win.destroy()

ตัวอย่างโค้ด (ปรับปรุงสำหรับ PyPDF2 v3+)


import PyPDF2
from tkinter import *
from tkinter import filedialog

win = Tk()
win.geometry("750x450")

text = Text(win, width=80, height=30)
text.pack(pady=20)

def clear_text():
    text.delete(1.0, END)

def open_pdf():
    file = filedialog.askopenfilename(title="Select a PDF",
        filetypes=(("PDF Files", "*.pdf"), ("All Files", "*.*")))
    if file:
        pdf_reader = PyPDF2.PdfReader(file)
        # อ่านหน้าแรก (หรือวนลูปทุกหน้า)
        page = pdf_reader.pages[0]
        content = page.extract_text()
        text.insert(1.0, content)

def quit_app():
    win.destroy()

# Menu Bar
my_menu = Menu(win)
win.config(menu=my_menu)

file_menu = Menu(my_menu, tearoff=False)
my_menu.add_cascade(label="File", menu=file_menu)
file_menu.add_command(label="Open", command=open_pdf)
file_menu.add_command(label="Clear", command=clear_text)
file_menu.add_command(label="Quit", command=quit_app)

win.mainloop()

หมายเหตุสำคัญ: PyPDF2 v3+ API Changes

  • PdfFileReader → PdfReader
  • getPage(n) → pages[n]
  • extractText() → extract_text()
  • numPages → len(pdf_reader.pages)

การเพิ่มฟีเจอร์: อ่านทุกหน้า


def open_pdf():
    file = filedialog.askopenfilename(title="Select a PDF",
        filetypes=(("PDF Files", "*.pdf"), ("All Files", "*.*")))
    if file:
        pdf_reader = PyPDF2.PdfReader(file)
        full_text = ""
        for page in pdf_reader.pages:
            full_text += page.extract_text() + "\n\n--- Page Break ---\n\n"
        text.delete(1.0, END)
        text.insert(1.0, full_text)

ข้อจำกัดของ PyPDF2

  • อ่านข้อความได้เฉพาะ Text-based PDF (ไม่ใช่ Scanned/Image PDF)
  • Layout อาจแตกต่างจากต้นฉบับ
  • สำหรับ OCR ต้องใช้ pytesseract + pdf2image
  • ตัวเลือกอื่น: pdfplumber, fitz (PyMuPDF) - เร็วกว่า รองรับดีกว่า

การประยุกต์ใช้

พื้นฐานของ: Document viewer, PDF Text Extractor, Search tool, Report generator, Document management system