สร้างแอปพลิเคชันอ่าน PDF ด้วย Tkinter และ PyPDF2 สำหรับอ่านข้อความจากไฟล์ PDF แสดงใน Text Widget พร้อมเมนูเปิด/ล้าง/ออก
ขั้นตอนการเตรียม
# ติดตั้ง PyPDF2
pip install PyPDF2
โครงสร้างแอปพลิเคชัน
- นำเข้า:
PyPDF2,tkinter,filedialog - สร้าง Main Window และ Text Widget
- สร้าง Menu Bar: File → Open, Clear, Quit
- ฟังก์ชัน Open: ใช้
filedialog.askopenfilename()เลือกไฟล์ →PyPDF2.PdfReaderอ่าน →page.extract_text()ดึงข้อความ → ใส่ Text Widget - ฟังก์ชัน Clear: ล้าง Text Widget
- ฟังก์ชัน 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→PdfReadergetPage(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