PyPDF2 เป็น pure-Python library สำหรับจัดการ PDF: split, merge, crop, transform, เพิ่ม metadata/password, ดึงข้อความและ metadata
ติดตั้ง
pip install pypdf2
ตรวจสอบ: >> import PyPDF2 (ไม่มี error = สำเร็จ)
1. ดึง Metadata จาก PDF
from PyPDF2 import PdfFileReader
def extract_pdf_meta(path):
with open(path, 'rb') as f:
pdf = PdfFileReader(f)
info = pdf.getDocumentInfo()
num_pages = pdf.getNumPages()
print(f"Author: {info.author}")
print(f"Creator: {info.creator}")
print(f"Producer: {info.producer}")
print(f"Subject: {info.subject}")
print(f"Title: {info.title}")
print(f"Pages: {num_pages}")
if __name__ == '__main__':
extract_pdf_meta('DeepLearning.pdf')
ผลลัพธ์ตัวอย่าง:
Author: Nikhil Buduma, Nicholas Locascio Creator: AH CSS Formatter V6.2... Producer: Antenna House PDF Output Library 6.2.609 Subject: None Title: Fundamentals of Deep Learning Pages: 298
2. ดึงข้อความ (Text) จาก PDF
from PyPDF2 import PdfFileReader
def extract_pdf_text(path):
with open(path, 'rb') as f:
pdf = PdfFileReader(f)
page = pdf.getPage(50) # หน้าที่ 51 (0-indexed)
print(f"Page type: {type(page)}")
text = page.extractText()
print(text)
if __name__ == '__main__':
extract_pdf_text('DeepLearning.pdf')
หมายเหตุ:
PyPDF2 ดึงข้อความได้ไม่สมบูรณ์ (spacing, formatting หาย) สำหรับข้อความซับซ้อน แนะนำใช้ pdfplumber หรือ PyMuPDF (fitz) แทน
3. หมุนหน้า PDF (Rotate Page)
import PyPDF2
pdf_file = open('DeepLearning.pdf', 'rb')
pdf_reader = PyPDF2.PdfFileReader(pdf_file)
page = pdf_reader.getPage(0) # หน้าแรก
# หมุน 90 องศา
page.rotateClockwise(90)
pdf_writer = PyPDF2.PdfFileWriter()
pdf_writer.addPage(page)
result_file = open('rotated_page.pdf', 'wb')
pdf_writer.write(result_file)
result_file.close()
pdf_file.close()
4. รวมไฟล์ PDF (Merge)
from PyPDF2 import PdfFileMerger
merger = PdfFileMerger()
merger.append('file1.pdf')
merger.append('file2.pdf')
merger.write('merged.pdf')
merger.close()
5. แยกหน้า PDF (Split)
from PyPDF2 import PdfFileReader, PdfFileWriter
pdf = PdfFileReader(open('input.pdf', 'rb'))
for i in range(pdf.getNumPages()):
writer = PdfFileWriter()
writer.addPage(pdf.getPage(i))
with open(f'page_{i+1}.pdf', 'wb') as out:
writer.write(out)
6. เพิ่มรหัสผ่าน (Encrypt)
from PyPDF2 import PdfFileReader, PdfFileWriter
pdf = PdfFileReader(open('input.pdf', 'rb'))
writer = PdfFileWriter()
for page in pdf.pages:
writer.addPage(page)
writer.encrypt('my_password')
with open('encrypted.pdf', 'wb') as out:
writer.write(out)
สรุปความสามารถ PyPDF2
| ฟีเจอร์ | รองรับ | หมายเหตุ |
|---|---|---|
| Extract text | ✅ | คุณภาพพอใช้, ไม่รองรับ complex layout |
| Extract images | ❌ | ใช้ pdfplumber หรือ PyMuPDF แทน |
| Merge/Split | ✅ | ทำได้ดี |
| Rotate pages | ✅ | |
| Encrypt/Decrypt | ✅ | |
| Edit content | ❌ | PDF immutable ต้องสร้างใหม่ |
| Forms/Annotations | ⚠️ | รองรับบางส่วน |
ทางเลือกที่ดีกว่าสำหรับ Text Extraction
- pdfplumber: ดึงข้อความ + ตาราง + metadata ได้แม่นยำ
- PyMuPDF (fitz): เร็วมาก ดึงข้อความ/รูปภาพ/ตารางได้ดี
- pdfminer.six: เน้นข้อความ แยก layout ได้ดี