CodeGym /Khóa học Java /Python SELF VI /Chia trang của tài liệu PDF để lưu các phần riêng lẻ

Chia trang của tài liệu PDF để lưu các phần riêng lẻ

Python SELF VI
Mức độ , Bài học
Có sẵn

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.

Python

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.

Python

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.

Python

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.pdfsection_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.

Python

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!

1
Опрос
Đọc file pdf bằng PyPDF2,  43 уровень,  4 лекция
недоступен
Đọc file pdf bằng PyPDF2
Đọc file pdf bằng PyPDF2
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION