1. Hợp nhất PDF với PyPDF2
Tại sao cần hợp nhất các tệp PDF
Trước hết, hãy xem xét tại sao việc hợp nhất các tệp PDF lại cần thiết. Như người ta thường nói, "Một file PDF tốt hơn mười file!". Trong môi trường làm việc, bạn có thể có các báo cáo, kết quả nghiên cứu, tài liệu kỹ thuật hoặc các bản trình bày, được cung cấp dưới dạng các tệp riêng lẻ. Việc liên tục chuyển đổi giữa chúng không chỉ bất tiện mà còn rủi ro — bạn có thể bỏ lỡ điều gì đó. Bằng cách hợp nhất tất cả các tệp thành một tài liệu, bạn sẽ đơn giản hóa việc làm việc với những dữ liệu này và tạo ra một cách tiếp cận có cấu trúc hơn để phân tích và phân phối.
Ngoài ra, việc hợp nhất các tệp PDF rất tiện lợi cho việc lưu trữ, tạo một báo cáo cuối cùng hoặc hợp nhất nhiều phiên bản của tài liệu để theo dõi các thay đổi. Nói chung, có rất nhiều khả năng!
Cơ bản về việc sử dụng PyPDF2 để hợp nhất PDF
Đầu tiên chúng ta hãy sử dụng các khái niệm cơ bản về việc làm việc với PyPDF2. Chúng ta sẽ tạo một script để hợp nhất nhiều tệp PDF thành một. Tất nhiên, mã sẽ kèm theo các chú thích để bạn hiểu những gì đang diễn ra ở mỗi bước.
import PyPDF2
# Tạo đối tượng PdfMerger từ thư viện PyPDF2
pdf_merger = PyPDF2.PdfMerger()
# Danh sách các tệp PDF mà chúng ta muốn hợp nhất
pdf_files = ['document1.pdf', 'document2.pdf', 'document3.pdf']
# Vòng lặp để thêm từng tệp vào đối tượng PdfMerger
for file in pdf_files:
pdf_merger.append(file)
# Lưu kết quả vào một tệp PDF mới
output_filename = 'merged_document.pdf'
with open(output_filename, 'wb') as output_file:
pdf_merger.write(output_file)
# Đóng đối tượng PdfMerger để giải phóng tài nguyên
pdf_merger.close()
print(f"Tệp PDF đã hợp nhất được tạo: {output_filename}")
Trật tự và cấu trúc của tài liệu hợp nhất
Bây giờ, khi chúng ta đã học cách hợp nhất các tài liệu PDF, cần phải suy nghĩ về thứ tự của các trang. Hãy nhớ rằng PyPDF2 thêm các trang theo thứ tự mà bạn truyền các tệp vào phương thức .append(). Vì vậy, thứ tự trong danh sách pdf_files sẽ ảnh hưởng đến thứ tự trong tài liệu cuối cùng.
2. Hợp nhất các trang riêng lẻ
Nếu bạn muốn không hợp nhất các tài liệu, mà là tạo tài liệu cuối cùng từ các phần của chúng, bạn cần sử dụng lớp PdfWriter thay vì PdfMerger. Ví dụ:
import PyPDF2
# Danh sách các tệp PDF cần hợp nhất
pdf_files = ["file1.pdf", "file2.pdf", "file3.pdf"]
# Tạo đối tượng PdfWriter để tạo tệp PDF hợp nhất
pdf_writer = PyPDF2.PdfWriter()
# Lặp qua từng tệp PDF
for pdf_file in pdf_files:
with open(pdf_file, "rb") as file:
pdf_reader = PyPDF2.PdfReader(file)
# Thêm từng trang vào PdfWriter
for page_num in range(len(pdf_reader.pages)):
# Bạn có thể bỏ qua các trang không muốn thêm vào đây
page = pdf_reader.pages[page_num]
pdf_writer.add_page(page)
# Lưu tệp PDF hợp nhất
with open("merged_document.pdf", "wb") as output_file:
pdf_writer.write(output_file)
Làm thế nào mã này hoạt động?
- Tạo danh sách các tệp: Danh sách
pdf_fileschứa đường dẫn đến các tài liệu PDF cần hợp nhất. - Khởi tạo PdfWriter:
pdf_writerđược sử dụng để tạo tệp PDF mới. - Lặp qua từng tệp: Mỗi tệp PDF được mở ở chế độ đọc.
- Thêm các trang: Tất cả các trang của tệp được lần lượt thêm vào đối tượng
pdf_writerbằng phương thứcadd_page(). - Lưu kết quả: Sau khi thêm tất cả các trang, tệp PDF mới được ghi vào
merged_document.pdf.
3. Định dạng tài liệu mới
Thêm bookmark và mục lục
Làm gì nếu tài liệu hợp nhất của bạn trở nên quá lớn và khó tìm kiếm? Trong trường hợp này, bookmark sẽ rất hữu ích! PyPDF2 cho phép thêm các bookmark cơ bản để dễ dàng điều hướng tài liệu. Hãy thêm bookmark cho từng tài liệu mà chúng ta hợp nhất.
pdf_merger = PyPDF2.PdfMerger()
# Chỉ số trang cho bookmark
page_offset = 0
for file in pdf_files:
# Đọc tài liệu hiện tại
pdf_reader = PyPDF2.PdfReader(file)
# Thêm tài liệu vào PdfMerger
pdf_merger.append(file)
# Thêm bookmark với tên tệp
pdf_merger.add_bookmark(file, page_offset)
# Cập nhật bù trừ trang
page_offset += len(pdf_reader.pages)
with open(output_filename, 'wb') as output_file:
pdf_merger.write(output_file)
pdf_merger.close()
Mẹo nhỏ này sẽ giúp bạn giữ bình tĩnh và tránh bị lạc trong biển tài liệu PDF.
Cập nhật metadata của tệp hợp nhất
Sau khi hợp nhất, bạn có thể thêm hoặc thay đổi metadata của tài liệu, chẳng hạn như tên tác giả, tiêu đề và từ khóa.
import PyPDF2
pdf_files = ["file1.pdf", "file2.pdf"]
pdf_writer = PyPDF2.PdfWriter()
for pdf_file in pdf_files:
with open(pdf_file, "rb") as file:
pdf_reader = PyPDF2.PdfReader(file)
for page_num in range(len(pdf_reader.pages)):
page = pdf_reader.pages[page_num]
pdf_writer.add_page(page)
# Thêm metadata
pdf_writer.add_metadata({
"/Title": "Tài liệu hợp nhất",
"/Author": "Nguyễn Văn A",
"/Subject": "Báo cáo doanh số"
})
# Lưu tệp hợp nhất
with open("merged_with_metadata.pdf", "wb") as output_file:
pdf_writer.write(output_file)
Mã này thêm các metadata, giúp nhận diện và cấu trúc tài liệu rõ ràng hơn.
GO TO FULL VERSION