Cập nhật lần cuối: 29 Tháng 1, 2025

Tiêu đề - Làm việc với tệp PDF trong Python

Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách làm việc với tệp PDF bằng Python. Để làm điều này, chúng tôi sẽ sử dụng thư viện pypdf.

Sử dụng thư viện pypdf, chúng tôi sẽ minh họa cách thực hiện các thao tác sau trong Python:

  • Trích xuất văn bản từ PDF
  • Xoay trang PDF
  • Gộp nhiều tệp PDF
  • Tách PDF thành các tệp riêng biệt
  • Thêm watermark vào các trang PDF

Lưu ý: Bài viết này đề cập đến nhiều chi tiết có giá trị, vì vậy hãy thoải mái bỏ qua các phần mà bạn quan tâm nhất! Nội dung được tổ chức một cách dễ dàng để bạn có thể nhanh chóng tập trung vào những gì liên quan nhất đến bạn.

Minh họa - Làm việc với tệp PDF trong Python

Mã Mẫu

Bạn có thể tải xuống tất cả mã mẫu được sử dụng trong bài viết này từ liên kết sau. Nó bao gồm mã, tệp đầu vào, và tệp đầu ra.

Cài đặt pypdf

Để cài đặt pypdf, chỉ cần chạy lệnh sau trong terminal hoặc command prompt của bạn:

pip install pypdf

Lưu ý: Lệnh trên có phân biệt chữ hoa và chữ thường.

1. Trích xuất Văn bản từ Tệp PDF Sử dụng Python

Giải thích Mã

1. Tạo một Đối tượng Người đọc PDF

reader = PdfReader(pdf_file)
  • PdfReader(pdf_file) tải tệp PDF vào một đối tượng người đọc.
  • Đối tượng này cho phép truy cập vào các trang và nội dung của chúng.

2. Vòng lặp qua các Trang

for page_number, page in enumerate(reader.pages, start=1):
  • reader.pages trả về danh sách các trang trong PDF.
  • enumerate(..., start=1) gán một số trang bắt đầu từ 1.

3. In Văn bản Đã Trích Xuất

    print(f"Page {page_number}:")
    print(page.extract_text())
    print("-" * 50)  # Ngăn cách để dễ đọc
  • page.extract_text() trích xuất nội dung văn bản từ trang hiện tại.
  • Kịch bản in văn bản đã trích xuất cùng với số trang.
  • "-" * 50 in một dòng ngăn cách (--------------------------------------------------) để dễ đọc hơn.

Tệp PDF Đầu Vào được Sử Dụng trong Mã

Kết Quả của Mã

2. Xoay Trang PDF Bằng Python

Giải thích Mã

Mã cơ bản xoay trang đầu tiên theo 90° chiều kim đồng hồ và lưu tệp PDF đã sửa đổi mà không ảnh hưởng đến các trang khác.

1. Nhập Lớp Cần Thiết

from pypdf import PdfReader, PdfWriter
  • PdfReader: Đọc tệp PDF đầu vào.
  • PdfWriter: Tạo một tệp PDF mới với các sửa đổi.

2. Định nghĩa Đường Dẫn Tệp Đầu Vào và Đầu Ra

input_pdf = "pdf-to-rotate/input.pdf"
output_pdf = "pdf-to-rotate/rotated_output.pdf"
  • Kịch bản đọc từ input.pdf và lưu tệp đã sửa đổi dưới tên rotated_output.pdf.

3. Đọc tệp PDF và Tạo một Đối tượng Writer

reader = PdfReader(input_pdf)
writer = PdfWriter()
  • reader tải tệp PDF hiện tại.
  • writer được dùng để lưu trữ các trang đã sửa đổi.

4. Xoay Trang đầu tiên 90 Độ

page = reader.pages[0]
page.rotate(90)  # Xoay 90 độ theo chiều kim đồng hồ
writer.add_page(page)
  • Trích xuất trang 1, xoay nó 90 độ, và thêm nó vào tệp PDF mới.

5. Thêm Các Trang Còn Lại Mà Không Thay Đổi

for i in range(1, len(reader.pages)):
    writer.add_page(reader.pages[i])
  • Vòng lặp qua các trang còn lại và thêm chúng như ban đầu.

6. Lưu Tệp PDF Mới

with open(output_pdf, "wb") as file:
    writer.write(file)
  • Mở rotated_output.pdf ở chế độ ghi dạng nhị phân và lưu tệp PDF mới.

7. In Thông báo Xác Nhận

print(f"Rotated page saved to {output_pdf}")
  • Hiển thị thông báo thành công.

Tệp PDF Đầu Vào được Sử Dụng trong Mã và Tệp PDF Đã Xoay

Ảnh chụp màn hình Ảnh chụp màn hình trang đã xoay trong PDF Bằng Python

3. Gộp Tệp PDF Sử Dụng Python

Mã Python này minh họa cách gộp nhiều tệp PDF từ một thư mục vào một tệp PDF duy nhất bằng thư viện PyPDF.

Giải thích Mã

  • Mã này tự động gộp tất cả các tệp PDF tìm thấy trong thư mục được chỉ định (pdfs-to-merge) vào một tệp đầu ra duy nhất (merged_output.pdf).
  • Nó đảm bảo thư mục đầu ra tồn tại và thêm các trang của từng PDF theo thứ tự danh sách.
  • Nó xuất tệp đã gộp cuối cùng trong thư mục phụ output-dir.

Phân tích Mã

1. Nhập Thư Viện

import os
from pypdf import PdfReader, PdfWriter
  • os: Dùng để tương tác với hệ thống tập tin, chẳng hạn như đọc danh sách thư mục và quản lý đường dẫn tệp.
  • PdfReader: Đọc nội dung của tệp PDF.
  • PdfWriter: Tạo và ghi một tệp PDF mới.

2. Định Nghĩa Thư Mục và Tệp Đầu Ra

directory = "pdfs-to-merge"
output_file = "output-dir/merged_output.pdf"
  • directory: Chỉ định thư mục nơi lưu trữ các tệp PDF.
  • output_file: Định nghĩa đường dẫn và tên tệp đầu ra của tệp PDF đã gộp.

3. Tạo Thư Mục Đầu Ra nếu Chưa Tồn Tại

os.makedirs(os.path.join(directory, "output-dir"), exist_ok=True)
  • Điều này đảm bảo rằng thư mục đầu ra tồn tại, nếu không thì tạo mới nó.

4. Tạo Đối Tượng PdfWriter

writer = PdfWriter()
  • writer được dùng để thu thập và kết hợp tất cả các trang từ các tệp PDF.

5. Lặp qua Tất Cả Tệp PDF trong Thư Mục

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}")
  • Vòng lặp này đi qua tất cả các tệp trong thư mục được chỉ định, kiểm tra các tệp có định dạng .pdf. Nó sử dụng sorted() để xử lý chúng theo thứ tự chữ cái.

6. Đọc Mỗi PDF và Thêm Các Trang vào Writer

reader = PdfReader(file_path)
writer.append(reader)
  • Đối với mỗi PDF, PdfReader đọc tệp, sau đó tất cả các trang từ tệp PDF đó được thêm vào writer.

7. Ghi PDF Đã Gộp vào Tệp Đầu Ra

output_path = os.path.join(directory, output_file)
with open(output_path, "wb") as output_pdf:
    writer.write(output_pdf)
  • Sau khi thu thập tất cả các trang, writer.write() ghi tệp PDF đã gộp vào đường dẫn đầu ra được chỉ định.

8. In Thông báo Xác Nhận

print(f"Merged PDF saved as: {output_path}")
  • In thông báo xác nhận thành công vị trí của tệp PDF đã gộp được lưu.

Tệp PDF Đầu Vào được Sử Dụng trong Mã và Tệp PDF Đã Gộp Đầu Ra

4. Tách Tệp PDF Sử Dụng Python

Giải Thích Mã

Mã Python trên tách một tệp PDF thành các trang riêng biệt bằng cách sử dụng thư viện PyPDF. Nó trước tiên đảm bảo rằng thư mục đầu ra tồn tại, sau đó đọc tệp PDF đầu vào. Mã vòng lặp qua từng trang, tạo một đối tượng PdfWriter mới, và lưu từng trang dưới dạng tệp PDF riêng lẻ. Các tệp đầu ra được đặt tên theo thứ tự (ví dụ, page_1.pdf, page_2.pdf) và lưu trữ trong thư mục output-dir. Cuối cùng, nó in một thông báo xác nhận cho mỗi tệp được tạo và thông báo khi quá trình hoàn tất.

Tệp PDF Đầu Vào và Tệp Đầu Ra Đã Tách

5. Thêm Watermark vào PDF Sử Dụng Python

Bạn có thể thêm watermark vào PDF bằng thư viện PyPDF bằng cách phủ lên một tệp PDF watermark lên một tệp PDF hiện có. Đảm bảo rằng tệp PDF watermark chỉ có một trang để nó áp dụng chính xác cho mỗi trang của tệp PDF chính.

Giải Thích Mã

Mã Python trên đọc một tệp PDF đầu vào, trích xuất một tệp PDF watermark một trang, phủ lớp watermark lên mỗi trang của tệp PDF đầu vào, và lưu tệp PDF cuối cùng có watermark.

Phân Tích Mã

Dưới đây là giải thích ngắn gọn cho từng phần

1. Nhập Lớp Cần Thiết

from pypdf import PdfReader, PdfWriter
  • PdfReader dùng để đọc tệp PDF hiện có.
  • PdfWriter dùng để tạo và ghi một tệp PDF mới.

2. Định Nghĩa Đường Dẫn Tệp

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: Tệp PDF gốc mà watermark sẽ được thêm vào.
  • watermark_pdf: Một tệp PDF một trang riêng biệt mà đóng vai trò là watermark.
  • output_pdf: Tệp đầu ra sẽ chứa các trang có watermark.

3. Đọc Tệp PDF

reader = PdfReader(input_pdf)
watermark = PdfReader(watermark_pdf)
  • reader: Đọc tệp PDF đầu vào.
  • watermark: Đọc tệp PDF watermark.

4. Tạo Đối Tượng Writer

writer = PdfWriter()
  • Đây sẽ được sử dụng để tạo tệp PDF cuối cùng có watermark.

5. Trích Xuất Trang Watermark

watermark_page = watermark.pages[0]
  • Giả định rằng tệp PDF watermark chỉ có một trang, sẽ được dùng để phủ lên tất cả các trang.

6. Vòng Lặp Qua Các Trang PDF Đầu Vào & Gộp Watermark

for page in reader.pages:
    # Gộp watermark với trang hiện tại
    page.merge_page(watermark_page)
    
    # Thêm trang đã gộp vào writer
    writer.add_page(page)
  • Lặp qua mỗi trang của input_pdf.
  • merge_page(watermark_page) phủ watermark lên trên trang hiện tại.
  • Thêm trang đã sửa đổi vào writer.

7. Lưu Tệp PDF Có Watermark

with open(output_pdf, "wb") as output_file:
    writer.write(output_file)
  • Ghi các trang đã sửa đổi vào một tệp PDF mới.

8. In Thông Báo Xác Nhận

print(f"Watermarked PDF saved as: {output_pdf}")
  • In đường dẫn tệp đầu ra để xác nhận.

Tệp PDF Đầu Vào, Tệp PDF Watermark, và Tệp PDF Đầu Ra Có Watermark

Ảnh chụp màn hình Ảnh chụp màn hình Tệp PDF Có Watermark Bằng Python

Kết Luận

Trong hướng dẫn này, chúng ta đã khám phá các thao tác quan trọng với PDF trong Python, bao gồm trích xuất văn bản, xoay trang, gộp, tách, và thêm watermark. Với những kỹ năng này, bây giờ bạn có thể xây dựng trình quản lý PDF riêng và tự động hóa các tác vụ PDF khác nhau một cách hiệu quả.