ปรับปรุงล่าสุด: 29 ม.ค. 2025

หัวข้อ - การทำงานกับไฟล์ PDF ในภาษา Python

ในบทความนี้ เราจะนำเสนอคำแนะนำเกี่ยวกับ วิธีการทำงานกับไฟล์ PDF ด้วย Python สำหรับการนี้เราจะใช้ไลบรารี pypdf

การใช้ไลบรารี pypdf เราจะแสดงวิธีการดำเนินการดังต่อไปนี้ใน Python:

  • การดึงข้อความจากไฟล์ PDF
  • หมุนหน้าของ PDF
  • รวมไฟล์ PDF หลายไฟล์
  • แยกไฟล์ PDF ออกเป็นไฟล์แยกต่างหาก
  • เพิ่มลายน้ำลงบนหน้าของ PDF

หมายเหตุ: บทความนี้ครอบคลุมรายละเอียดจำนวนมาก สามารถข้ามไปที่ส่วนที่คุณสนใจได้เลย! เนื้อหาได้รับการจัดระเบียบเพื่อให้สามารถนำทางได้ง่าย คุณจึงสามารถมุ่งเน้นไปที่ส่วนที่เกี่ยวข้องมากที่สุดได้อย่างรวดเร็ว

ภาพประกอบ - การทำงานกับไฟล์ PDF ในภาษา Python

ตัวอย่างโค้ด

คุณสามารถดาวน์โหลดโค้ดตัวอย่างทั้งหมดที่ใช้ในบทความนี้ได้จากลิงก์ด้านล่าง ซึ่งรวมถึงโค้ด ไฟล์นำเข้า และไฟล์ผลลัพธ์

ติดตั้ง pypdf

เพื่อที่จะติดตั้ง pypdf ให้รันคำสั่งต่อไปนี้ในเทอร์มินัลหรือคำสั่งพรอมต์:

pip install pypdf

หมายเหตุ: คำสั่งข้างต้นจำเป็นต้องพิมพ์ตัวอักษรตรงตามกรณีที่ระบุ

1. การดึงข้อความจากไฟล์ PDF โดยใช้ Python

คำอธิบายโค้ด

1. การสร้างวัตถุเครื่องอ่าน PDF

reader = PdfReader(pdf_file)
  • PdfReader(pdf_file) โหลดไฟล์ PDF เข้าไปใน วัตถุเครื่องอ่าน
  • วัตถุนี้อนุญาตให้เข้าถึงหน้าและเนื้อหาของพวกเขา

2. วนรอบผ่านหน้า

for page_number, page in enumerate(reader.pages, start=1):
  • reader.pages ส่งคืนรายการของหน้าที่อยู่ใน PDF
  • enumerate(..., start=1) กำหนด หมายเลขหน้าเริ่มต้นจาก 1

3. การพิมพ์ข้อความที่ดึงออกมา

    print(f"Page {page_number}:")
    print(page.extract_text())
    print("-" * 50)  # เส้นคั่นเพื่อความอ่านง่าย
  • page.extract_text() ดึงเนื้อหาข้อความจากหน้าปัจจุบัน
  • สคริปต์พิมพ์ข้อความที่ดึงออกมาพร้อมกับ หมายเลขหน้า
  • "-" * 50 พิมพ์เส้นคั่น (--------------------------------------------------) เพื่อความอ่านง่าย

ไฟล์ PDF ที่ใช้ในโค้ด

ผลลัพธ์ของโค้ด

2. การหมุนหน้าของ PDF โดยใช้ Python

คำอธิบายโค้ด

โค้ดนี้หมุนหน้า แรก โดยเป็น 90° ทวนเข็มนาฬิกา และบันทึกไฟล์ PDF ที่แก้ไขโดยไม่กระทบกับหน้าที่อื่น

1. นำเข้าคลาสที่จำเป็น

from pypdf import PdfReader, PdfWriter
  • PdfReader: อ่านไฟล์ PDF ที่นำเข้า
  • PdfWriter: สร้าง PDF ใหม่ที่ปรับเปลี่ยนแล้ว

2. กำหนดเส้นทางไฟล์นำเข้าและไฟล์ส่งออก

input_pdf = "pdf-to-rotate/input.pdf"
output_pdf = "pdf-to-rotate/rotated_output.pdf"
  • สคริปต์อ่านจาก input.pdf และบันทึกไฟล์ที่แก้ไขเป็น rotated_output.pdf

3. อ่าน PDF และสร้างวัตถุเครื่องเขียน

reader = PdfReader(input_pdf)
writer = PdfWriter()
  • reader โหลดไฟล์ PDF ที่มีอยู่
  • writer ใช้สำหรับเก็บหน้าที่แก้ไขแล้ว

4. หมุนหน้าแรกด้วย 90 องศา

page = reader.pages[0]
page.rotate(90)  # หมุน 90 องศาทวนเข็มนาฬิกา
writer.add_page(page)
  • ดึง หน้า 1 หมุน 90 องศา และเพิ่มไปยัง PDF ใหม่

5. เพิ่มหน้าที่เหลือโดยไม่เปลี่ยนแปลง

for i in range(1, len(reader.pages)):
    writer.add_page(reader.pages[i])
  • วนรอบผ่านหน้าที่เหลือแล้วเพิ่มพวกเขาไปในสภาพเดิม

6. บันทึก PDF ใหม่

with open(output_pdf, "wb") as file:
    writer.write(file)
  • เปิด rotated_output.pdf ในโหมดการเขียนแบบไบนารีและบันทึก PDF ใหม่

7. พิมพ์การยืนยัน

print(f"Rotated page saved to {output_pdf}")
  • แสดงข้อความสำเร็จ

ไฟล์ PDF ที่ใช้ในโค้ดและผลลัพธ์การหมุน

ภาพหน้าจอ ภาพหน้าจอของหน้าที่หมุนใน PDF โดยใช้ Python

3. การรวมไฟล์ PDF โดยใช้ Python

สคริปต์ Python นี้แสดงวิธีการ รวมไฟล์ PDF หลายไฟล์ จากไดเรกทอรี่หนึ่งเข้าเป็น PDF ไฟล์เดียวโดยใช้ไลบรารี PyPDF

คำอธิบายโค้ด

  • สคริปต์นี้รวมไฟล์ PDF ทั้งหมดที่พบในไดเรกทอรีที่ระบุ (pdfs-to-merge) เข้าไปเป็นไฟล์ส่งออกไฟล์เดียว (merged_output.pdf)
  • มันแน่ใจว่าไดเรกทอรีส่งออกมีอยู่และเพิ่มหน้าจากไฟล์ PDF แต่ละไฟล์ตามลำดับที่ระบุ
  • มันสร้างไฟล์สุดท้ายที่รวมอยู่ในไดเรกทอรี output-dir

โครงสร้างของโค้ด

1. การนำเข้าสมุด

import os
from pypdf import PdfReader, PdfWriter
  • os: ใช้ในการโต้ตอบกับระบบไฟล์ เช่น การอ่านไดเรกทอรีและการจัดการเส้นทางไฟล์
  • PdfReader: อ่านเนื้อหาไฟล์ PDF
  • PdfWriter: สร้างและเขียนไฟล์ PDF ใหม่

2. กำหนดไดเรกทอรีและไฟล์ส่งออก

directory = "pdfs-to-merge"
output_file = "output-dir/merged_output.pdf"
  • directory: ระบุโฟลเดอร์ที่เก็บไฟล์ PDF
  • output_file: กำหนดเส้นทางและชื่อของไฟล์ PDF ที่รวมแล้ว

3. สร้างไดเรกทอรีส่งออกถ้ามันไม่มีอยู่

os.makedirs(os.path.join(directory, "output-dir"), exist_ok=True)
  • สิ่งนี้เกลาว่า ไดเรกทอรีส่งออก มีอยู่ ถ้ามันไม่มีอยู่ มันจะสร้างให้

4. สร้างวัตถุ PdfWriter

writer = PdfWriter()
  • writer ใช้ในการรวบรวมและรวมหน้าทั้งหมดจาก PDF

5. วนรอบไฟล์ PDF ทั้งหมดในไดเรกทอรี

for file_name in sorted(os.listdir(directory)):
    if file_name.endswith(".pdf"):
        file_path = os.path.join(directory, file_name)
        print(f"Adding: {file_name}")
  • วนรอบไฟล์ทั้งหมดในไดเรกทอรีที่ระบุ ตรวจสอบไฟล์ที่มีนามสกุล .pdf ใช้ sorted() เพื่อจัดเรียงและประมวลผลตามลำดับอักษร

6. อ่าน PDF แต่ละไฟล์และเพิ่มหน้าใน Writer

reader = PdfReader(file_path)
writer.append(reader)
  • สำหรับแต่ละ PDF PdfReader จะอ่านไฟล์ จากนั้นทุกหน้าจาก PDF นั้นจะถูกเพิ่มไปยัง writer

7. เขียนไฟล์ PDF ที่รวมแล้วในไฟล์ส่งออก

output_path = os.path.join(directory, output_file)
with open(output_path, "wb") as output_pdf:
    writer.write(output_pdf)
  • หลังจากรวบรวมหน้าทั้งหมดแล้ว writer.write() จะเขียนไฟล์ PDF ที่รวมแล้วไปยังเส้นทางส่งออกที่ระบุ

8. พิมพ์การยืนยัน

print(f"Merged PDF saved as: {output_path}")
  • พิมพ์ข้อความสำเร็จยืนยันที่ตั้งของไฟล์ PDF ที่รวมแล้ว

ไฟล์ PDF ต้นฉบับที่ใช้ในโค้ดและไฟล์ PDF ที่รวมแล้ว

4. การแยกไฟล์ PDF โดยใช้ Python

คำอธิบายโค้ด

สคริปต์ Python ข้างต้นแยกไฟล์ PDF ออกเป็นหน้าแยกโดยใช้ไลบรารี PyPDF มันจะตรวจสอบให้แน่ใจว่าไดเรกทอรีเอาต์พุตมีอยู่ จากนั้นอ่านไฟล์ PDF นำเข้า สคริปต์วนรอบผ่านแต่ละหน้า สร้างวัตถุ PdfWriter ใหม่ และบันทึกแต่ละหน้าเป็นไฟล์ PDF เดี่ยวๆ ไฟล์เอาต์พุตจะถูกตั้งชื่อตามลำดับ (เช่น page_1.pdf, page_2.pdf) และจัดเก็บไว้ในโฟลเดอร์ output-dir สุดท้าย มันจะพิมพ์ข้อความยืนยันสำหรับไฟล์ที่สร้างขึ้นแต่ละไฟล์และแสดงเมื่อกระบวนการเสร็จสมบูรณ์

ไฟล์ PDF นำเข้าและไฟล์เอาต์พุตที่แยกออก

5. การเพิ่มลายน้ำลงใน PDF โดยใช้ Python

คุณสามารถเพิ่มลายน้ำลงใน PDF โดยใช้ไลบรารี PyPDF โดยการซ้อนทับไฟล์ PDF ของลายน้ำลงในไฟล์ PDF ที่มีอยู่ ตรวจสอบให้แน่ใจว่าไฟล์ PDF ของลายน้ำมีเพียงหนึ่งหน้าเพื่อให้ลายน้ำสามารถใช้งานได้ถูกต้องในแต่ละหน้าของไฟล์หลัก

คำอธิบายโค้ด

สคริปต์ Python ข้างต้นอ่านไฟล์ PDF นำเข้า ดึงสาระ PDF ของลายน้ำที่มีเพียงหน้าเดียว ซ้อนทับลายน้ำในแต่ละหน้าของไฟล์ PDF นำเข้า และบันทึกไฟล์ PDF ที่มีลายน้ำสุดท้าย

โครงสร้างของโค้ด

นี่คือคำอธิบายโดยสังเขปของแต่ละส่วน

1. การนำเข้าคลาสที่จำเป็น

from pypdf import PdfReader, PdfWriter
  • PdfReader ใช้ในการอ่านไฟล์ PDF ที่มีอยู่
  • PdfWriter ใช้ในการสร้างและเขียนไฟล์ PDF ใหม่

2. กำหนดเส้นทางไฟล์

input_pdf = "pdf-to-watermark/input.pdf"
watermark_pdf = "pdf-to-watermark/watermark.pdf"
output_pdf = "pdf-to-watermark/output_with_watermark.pdf"
  • input_pdf: ไฟล์ PDF ต้นฉบับที่ต้องการเพิ่มลายน้ำ
  • watermark_pdf: ไฟล์ PDF ที่มีหน้าเดียวที่ใช้เป็นลายน้ำ
  • output_pdf: ไฟล์เอาต์พุตที่มีหน้าที่มีลายน้ำ

3. อ่านไฟล์ PDF

reader = PdfReader(input_pdf)
watermark = PdfReader(watermark_pdf)
  • reader: อ่านไฟล์ PDF ที่นำเข้า
  • watermark: อ่านไฟล์ PDF ของลายน้ำ

4. สร้างวัตถุ Writer

writer = PdfWriter()
  • จะใช้ในการสร้างไฟล์ PDF สุดท้ายที่มีลายน้ำ

5. ดึงหน้าลายน้ำ

watermark_page = watermark.pages[0]
  • คาดว่าไฟล์ PDF ลายน้ำมีเพียง หน้าเดียว ที่ใช้ซ้อนทับในทุกหน้า

6. วนรอบหน้าของไฟล์ PDF นำเข้า & รวมลายน้ำ

for page in reader.pages:
    # รวมลายน้ำกับหน้าปัจจุบัน
    page.merge_page(watermark_page)
    
    # เพิ่มหน้าที่รวมแล้วไปยัง writer
    writer.add_page(page)
  • วนรอบผ่านแต่ละหน้าของ input_pdf
  • merge_page(watermark_page) ซ้อนทับลายน้ำลงบนหน้าปัจจุบัน
  • เพิ่มหน้าที่ปรับเปลี่ยนแล้วไปยัง writer

7. บันทึกไฟล์ PDF ที่มีลายน้ำ

with open(output_pdf, "wb") as output_file:
    writer.write(output_file)
  • เขียนหน้าที่ปรับเปลี่ยนไปในไฟล์ PDF ใหม่

8. พิมพ์ยืนยัน

print(f"Watermarked PDF saved as: {output_pdf}")
  • พิมพ์เส้นทางไฟล์ส่งออกเพื่อยืนยันการสำเร็จของการทำงาน

ไฟล์ PDF นำเข้า, ไฟล์ PDF ลายน้ำ, และไฟล์ PDF ที่มีลายน้ำ

ภาพหน้าจอ ภาพหน้าจอของไฟล์ PDF ที่มีลายน้ำโดยใช้ Python

สรุป

ในคำแนะนำนี้ เราได้สำรวจการทำงานที่สำคัญของ PDF ใน Python รวมถึงการดึงข้อความ หมุนหน้า รวม แยก และเพิ่มลายน้ำ ด้วยทักษะเหล่านี้ คุณสามารถสร้างตัวจัดการ PDF ของคุณเองและทำงานอัตโนมัติกับ PDF ต่างๆ ได้อย่างมีประสิทธิภาพ.