Python实现批量合并PDF文件

一、个人需求

今天,又需要合并PDF文件,就又编写了一个Python代码。

二、环境需求

一台电脑

Python环境

下载需要的库函数

pip install pymupdf

三、编写代码

"""
Author: LeopardRich [email protected]
Date: 2023-11-30 21:47:35
Description: Function functionality@批量合并PDF文件
Copyright (c) 2024 by LeopardRich [email protected], All Rights Reserved.
"""

import os

import fitz


def search_all_fit_files(folder: str) -> list:
    """寻找文件夹下符合条件的文件

    :param folder: 文件夹路径
    :return: 符合条件的文件绝对路径的列表
    """
    PDFs = []
    for file in os.listdir(folder):
        if os.path.isfile(os.path.join(folder, file)) and \
                (file.endswith('.pdf') or file.endswith('.PDF')) and not file.startswith("~$"):
            PDFs.append(os.path.abspath(os.path.join(folder_path, file)))
    return PDFs


def merge_pdf_files(folder: str, output=None) -> None:
    """批量合并PDF文件

    :param folder: {str} 文件夹路径
    :param output: {str} 输出文件的绝对路径
    :return: None
    """

    # 处理output默认值
    if output is None or not output.endswith("pdf") or not output.endswith("PDF"):
        output = os.path.join(folder, "默认.pdf")

    # 获取所有PDF文件
    PDFs = search_all_fit_files(folder)

    # 防止合并的文件只有一个
    assert len(PDFs) > 2

    print(f"将要合并的文件{PDFs}")

    # 定义文件头
    header = fitz.open(PDFs.pop(0))

    # 添加文件
    for file_path in PDFs:
        next_PDF = fitz.open(file_path)
        header.insert_pdf(next_PDF)

    # 保存文件
    header.save(output)

    print(f"合并后的文件保存在{output}")


if __name__ == "__main__":
    # 替换成你的文件夹路径
    folder_path = r'D:\Desktop'

    # 替换成你想要的输出文件路径
    output_file = r'D:\Desktop\merged.pdf'
    merge_pdf_files(folder_path, output_file)

四、代码不足

本次代码存在以下已知问题:

  1. 合并的顺序按照程序读取顺序,不可控,后续可以添加修改PDFs的函数。
  2. 代码可能存在异常处理不完全的情况。

五、个人收获

编写代码的时候,为了略微扩展,应该阅读官方文档。

本次推荐阅读:

PyMuPDF官方文档

你可能感兴趣的:(自制脚本,pdf,python)