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

จัดการไฟล์ PDF ใน Python ด้วย PyPDF2

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 ได้ดี