Rumah > pembangunan bahagian belakang > Tutorial Python > Gabungkan PDF Secara Rekursif Menggunakan Python

Gabungkan PDF Secara Rekursif Menggunakan Python

Susan Sarandon
Lepaskan: 2024-12-29 21:16:14
asal
432 orang telah melayarinya

Merge PDFs Recursively Using Python

pengenalan

Menggabungkan berbilang fail PDF ke dalam satu dokumen boleh menjadi tugas yang membosankan, terutamanya jika fail itu tersebar di beberapa direktori. Dengan Python, tugas ini menjadi lancar dan automatik. Dalam tutorial ini, kami akan mencipta alat antara muka baris perintah (CLI) menggunakan PyPDF2 dan klik untuk menggabungkan semua fail PDF dalam direktori (termasuk subdirektorinya), sambil mengecualikan direktori tertentu seperti .venv dan .git.


Prasyarat

Sebelum bermula, pastikan anda mempunyai perkara berikut:

  1. Python: Versi 3.7 ke atas.
  2. pip: Pengurus pakej Python.
  3. Perpustakaan Diperlukan:

    • Pasang PyPDF2 untuk manipulasi PDF:
     pip install PyPDF2
    
    Salin selepas log masuk
  • Klik pasang untuk mencipta CLI:

     pip install click
    
    Salin selepas log masuk

Panduan Kod

Berikut ialah kod lengkap untuk alat CLI kami:

import click
from pathlib import Path
from PyPDF2 import PdfMerger
import os

EXCLUDED_DIRS = {".venv", ".git"}

@click.command()
@click.argument("directory", type=click.Path(exists=True, file_okay=False, path_type=Path))
@click.argument("output_file", type=click.Path(dir_okay=False, writable=True, path_type=Path))
def merge_pdfs(directory: Path, output_file: Path):
    """
    Merge all PDF files from DIRECTORY and its subdirectories into OUTPUT_FILE,
    excluding specified directories like .venv and .git.
    """
    # Initialize the PdfMerger
    merger = PdfMerger()

    # Walk through the directory tree, including the base directory
    for root, dirs, files in os.walk(directory):
        # Exclude specific directories
        dirs[:] = [d for d in dirs if d not in EXCLUDED_DIRS]

        # Convert the root to a Path object
        current_dir = Path(root)

        click.echo(f"Processing directory: {current_dir}")

        # Collect PDF files in the current directory
        pdf_files = sorted(current_dir.glob("*.pdf"))

        if not pdf_files:
            click.echo(f"No PDF files found in {current_dir}")
            continue

        # Add PDF files from the current directory
        for pdf in pdf_files:
            click.echo(f"Adding {pdf}...")
            merger.append(str(pdf))

    # Write the merged output file
    output_file.parent.mkdir(parents=True, exist_ok=True)
    merger.write(str(output_file))
    merger.close()

    click.echo(f"All PDFs merged into {output_file}")

if __name__ == "__main__":
    merge_pdfs()
Salin selepas log masuk

Bagaimana Ia Berfungsi

  1. Perjalanan Direktori:

    • Fungsi os.walk() melintasi direktori yang ditentukan secara rekursif.
    • Direktori khusus (cth., .venv, .git) dikecualikan menggunakan penapis pada dir.
  2. Koleksi Fail PDF:

    • current_dir.glob("*.pdf") mengumpul semua fail PDF dalam direktori semasa.
  3. Menggabungkan PDF:

    • PdfMerger daripada PyPDF2 digunakan untuk menambahkan semua PDF.
    • Output yang digabungkan ditulis pada fail yang ditentukan.
  4. Integrasi CLI:

    • Pustaka klik memudahkan untuk menyediakan direktori dan laluan fail output sebagai argumen.

Menjalankan Alat

Simpan kod pada fail, cth., merge_pdfs.py. Jalankannya dari terminal seperti berikut:

python merge_pdfs.py /path/to/directory /path/to/output.pdf
Salin selepas log masuk

Contoh

Andaikan anda mempunyai struktur direktori berikut:

/documents
├── file1.pdf
├── subdir1
│   ├── file2.pdf
├── subdir2
│   ├── file3.pdf
├── .git
│   ├── ignored_file.pdf
Salin selepas log masuk

Jalankan alat seperti berikut:

python merge_pdfs.py /documents /merged.pdf
Salin selepas log masuk

Ini akan menggabungkan file1.pdf, file2.pdf dan file3.pdf ke dalam merged.pdf, melangkau .git.


Ciri-ciri

  1. Penggabungan Rekursif:

    • Alat ini secara automatik menyertakan PDF daripada semua subdirektori.
  2. Pengecualian Direktori:

    • Mengecualikan direktori seperti .venv dan .git untuk mengelakkan fail yang tidak berkaitan.
  3. Penggabungan Diisih:

    • Memastikan PDF ditambahkan dalam susunan yang disusun untuk hasil yang konsisten.
  4. Kesederhanaan CLI:

    • Menyediakan antara muka intuitif untuk pengguna menentukan laluan input dan output.

Nota dan Had

  1. Fail Besar:

    • Menggabungkan sejumlah besar PDF mungkin menggunakan memori yang besar. Uji dengan set data yang lebih kecil dahulu.
  2. Keserasian PDF:

    • Pastikan semua input PDF adalah sah dan tidak rosak.
  3. Pengecualian Tersuai:

    • Ubah suai set EXCLUDED_DIRS untuk mengecualikan direktori tambahan seperti yang diperlukan.

Kesimpulan

Tutorial ini menunjukkan cara mengautomasikan penggabungan PDF daripada struktur direktori menggunakan Python. Alat CLI yang disediakan adalah fleksibel dan boleh disesuaikan untuk aliran kerja yang lebih kompleks. Cubalah dan beritahu kami cara ia berfungsi untuk anda!

Selamat pengekodan! ?

Atas ialah kandungan terperinci Gabungkan PDF Secara Rekursif Menggunakan Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan