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

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.

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ã
- Tệp Đầu Vào: Tải về tại đây
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ênrotated_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
- Tệp Đầu Vào: Tải về tại đây
- Tệp PDF Đã Xoay: Tải về tại đây
Ảnh chụp màn hình
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ụngsorted()
để 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àowriter
.
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
- Tệp PDF Đầu Vào: Tải về tại đây
- Tệp PDF Đã Gộp Đầu Ra: Tải về tại đây
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
- Tệp PDF Đầu Vào: Tải về tại đây
- Tệp Đầu Ra Đã Tách: Tải về tại đây
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
- Tệp PDF Đầu Vào: Tải về tại đây
- Tệp PDF Watermark: Tải về tại đây
- Tệp PDF Đầu Ra Có Watermark: Tải về tại đây
Ảnh chụp màn hình
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ả.