1. Chia tài liệu PDF thành từng trang
Cơ bản về chia tài liệu PDF bằng PyPDF2
PyPDF2 cung cấp class PdfReader
để mở và đọc các trang của file PDF, cùng với class
PdfWriter
để ghi các trang vào một tài liệu PDF mới. Để chia tài liệu thành các trang riêng lẻ, sử dụng add_page()
trong
PdfWriter
để lưu những trang cần thiết vào các file riêng biệt.
Lưu từng trang PDF dưới dạng tài liệu riêng biệt
Đoạn code này chia tài liệu, tạo một file PDF riêng biệt cho mỗi trang của file gốc.
import PyPDF2
# Mở file PDF
with open("sample.pdf", "rb") as pdf_file:
pdf_reader = PyPDF2.PdfReader(pdf_file)
# Duyệt qua từng trang
for page_num in range(len(pdf_reader.pages)):
pdf_writer = PyPDF2.PdfWriter()
# Trích xuất trang và thêm vào PDF mới
page = pdf_reader.pages[page_num]
pdf_writer.add_page(page)
# Lưu trang hiện tại dưới dạng file PDF riêng biệt
output_filename = f"page_{page_num + 1}.pdf"
with open(output_filename, "wb") as output_file:
pdf_writer.write(output_file)
print("Mỗi trang đã được lưu thành file riêng.")
Trong ví dụ này, mỗi trang của tài liệu gốc được lưu thành file riêng biệt page_1.pdf
,
page_2.pdf
và tiếp tục như vậy.
2. Trích xuất một phạm vi các trang
Đôi khi cần lưu không phải tất cả các trang, mà là một phạm vi cụ thể, ví dụ, từ trang 1 đến trang 5. Để làm điều này, có thể chỉ định các trang cụ thể trong vòng lặp.
import PyPDF2
with open("sample.pdf", "rb") as pdf_file:
pdf_reader = PyPDF2.PdfReader(pdf_file)
pdf_writer = PyPDF2.PdfWriter()
# Xác định phạm vi trang, ví dụ, từ trang 1 đến trang 5
start_page = 1
end_page = 5
for page_num in range(start_page - 1, end_page): # Đánh số trang bắt đầu từ 0
page = pdf_reader.pages[page_num]
pdf_writer.add_page(page)
# Lưu phạm vi trang thành file PDF mới
with open("pages_1_to_5.pdf", "wb") as output_file:
pdf_writer.write(output_file)
print("Phạm vi các trang đã được lưu thành công.")
Đoạn code này trích xuất các trang từ 1 đến 5 và lưu chúng thành file
pages_1_to_5.pdf
.
3. Lưu nhiều phạm vi
Nếu cần trích xuất nhiều phạm vi trang và lưu chúng thành các file riêng biệt, có thể sử dụng hàm nhận tham số bắt đầu và kết thúc phạm vi.
import PyPDF2
def save_page_range(input_pdf, output_pdf, start_page, end_page):
with open(input_pdf, "rb") as pdf_file:
pdf_reader = PyPDF2.PdfReader(pdf_file)
pdf_writer = PyPDF2.PdfWriter()
for page_num in range(start_page - 1, end_page):
page = pdf_reader.pages[page_num]
pdf_writer.add_page(page)
with open(output_pdf, "wb") as output_file:
pdf_writer.write(output_file)
print(f"Các trang từ {start_page}–{end_page} đã được lưu trong {output_pdf}")
# Sử dụng hàm để trích xuất các phạm vi khác nhau
save_page_range("sample.pdf", "section_1.pdf", 1, 3)
save_page_range("sample.pdf", "section_2.pdf", 4, 6)
Đoạn code này tạo hai hàm để lưu các trang từ 1 đến 3 và từ 4 đến 6, lưu vào
section_1.pdf
và
section_2.pdf
tương ứng.
4. Xử lý hàng loạt tài liệu pdf
Tự động hóa chia PDF cho tất cả các trang trong thư mục
Nếu cần chia từng trang của tất cả các tài liệu PDF trong thư mục, có thể tạo một script tự động xử lý mỗi file.
import PyPDF2
import os
# Đường dẫn tới thư mục chứa các file PDF
folder_path = "pdf_folder"
# Tự động chia tất cả các file PDF trong thư mục
for filename in os.listdir(folder_path):
if filename.endswith(".pdf"):
file_path = os.path.join(folder_path, filename)
with open(file_path, "rb") as pdf_file:
pdf_reader = PyPDF2.PdfReader(pdf_file)
# Chia file thành các trang riêng biệt
for page_num in range(len(pdf_reader.pages)):
pdf_writer = PyPDF2.PdfWriter()
page = pdf_reader.pages[page_num]
pdf_writer.add_page(page)
# Tạo tên file đầu ra
output_filename = f"{filename[:-4]}_page_{page_num + 1}.pdf"
output_path = os.path.join(folder_path, output_filename)
# Lưu trang
with open(output_path, "wb") as output_file:
pdf_writer.write(output_file)
print("Tất cả các trang từ mỗi file PDF trong thư mục đã được lưu thành công.")
Script này tự động đi qua từng file PDF trong thư mục pdf_folder
và lưu từng trang như một file PDF riêng biệt với tên
<tên_file>_page_<số_thứ_tự>.pdf
.
5. Khi nào nên chia file PDF?
Như một lập trình viên vĩ đại từng nói, sau nhiều giờ coding giống như chúng ta, thường xuất hiện câu hỏi: "Tại sao?". Việc chia tài liệu PDF có thể cần thiết trong nhiều tình huống:
- Tách các trang quan trọng: Chia sẻ chỉ các trang cần thiết thay vì gửi toàn bộ "Chiến tranh và Hòa bình" cho đồng nghiệp.
- Tạo tuyển tập: Lưu các chương quan trọng từ các tài liệu khác nhau vào một file để sử dụng trong học tập hoặc công việc.
- Lưu trữ: Lưu trữ tài liệu quan trọng từng trang một, để không mất thông tin quý giá giữa những trang không cần thiết.
Đây chính là lúc PyPDF2 xuất hiện như một anh hùng giúp cuộc sống bạn dễ dàng hơn!
6. Những khó khăn bất ngờ và cách tránh
Khi làm việc với tài liệu PDF, bạn có thể gặp một số khó khăn. Ví dụ, việc đánh số trang trong PyPDF2 bắt đầu từ 0, vì vậy đừng quên cân nhắc điều này khi chỉ định các trang cần thiết. Không có gì tệ hơn việc dành thời gian trích xuất nhầm các trang không đúng!
Ngoài ra, khi làm việc với các file mở và đóng, hãy đảm bảo rằng tất cả close()
được gọi đúng cách. Một tài liệu chưa đóng có thể trở thành nỗi đau, đặc biệt khi đó là giáo trình về Oracle.
Ứng dụng thực tế
Sử dụng phương pháp này không chỉ hữu ích cho việc xử lý tài liệu cá nhân. Ví dụ, nếu bạn làm việc trong một công ty luật và cần nhanh chóng chuẩn bị các phần cụ thể của một vụ kiện phức tạp để sử dụng trước tòa, việc chia nhỏ PDF có thể tiết kiệm rất nhiều thời gian và công sức.
Những kỹ thuật tương tự cũng có thể được sử dụng để chuẩn bị tài liệu học tập, trích xuất các phần quan trọng từ báo cáo kỹ thuật và nhiều công việc khác. Phép màu thực sự nằm ở chỗ dễ dàng tự động hóa các công việc lặp lại này!
GO TO FULL VERSION