一、个人需求
今天,又需要合并PDF文件,就又编写了一个Python代码。
二、环境需求
一台电脑
Python环境
下载需要的库函数
pip install pymupdf
三、编写代码
"""
Author: LeopardRich 2829176648@qq.com
Date: 2023-11-30 21:47:35
Description: Function functionality@批量合并PDF文件
Copyright (c) 2024 by LeopardRich 2829176648@qq.com, 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)
四、代码不足
本次代码存在以下已知问题:
- 合并的顺序按照程序读取顺序,不可控,后续可以添加修改PDFs的函数。
- 代码可能存在异常处理不完全的情况。
五、个人收获
编写代码的时候,为了略微扩展,应该阅读官方文档。
本次推荐阅读: