批量合并PDF文档
在本篇技术博客中,我们将探讨如何利用Python的PyPDF2库来批量合并PDF文档。这是一个非常实用的功能,特别适用于需要将多个PDF报告或文件整合成一个PDF的场合。我们还会讨论如何通过命令行打包Python脚本为独立的可执行文件,以便在没有Python环境的计算机上运行。
导入用到的包
在开始编写代码之前,我们需要确保导入了所有必须的库。在这个例子中,我们只需要两个库:os
和PyPDF2
。
os
库将帮助我们处理文件和目录,例如更改当前工作目录或列出目录内容。PyPDF2
库提供了操作PDF文件的功能,包括合并PDF文档。
import os
from time import sleep
from PyPDF2 import PdfMerger, PdfReader
在这段代码中,我们还导入了sleep
函数,它将在程序的最后用来暂停程序,以便用户能看到程序的输出结果。
打包命令
在代码的注释中,我们提供了一个打包命令,这个命令使用Nuitka工具将Python脚本转换为独立的可执行文件。这样,用户不需要安装Python或任何依赖库就能运行我们的脚本。这个命令排除了不需要打包的库,并设置了程序图标和输出目录。
nuitka --standalone --mingw64 --show-progress --show-memory --nofollow-import-to=PyPDF2,PIL,tkinter,http,email --windows-icon-from-ico=3.带有界面的PDF合并工具使用PyPDF2和Tkinter.ico --output-dir=o 1.批量合并PDF.py
代码详细解释
让我们逐步解释代码的每一部分。
用户交互
首先,我们打印一条消息,并要求用户输入包含PDF文件的目录路径。
file_path = input("请输入需要合并的PDF所在路径:")
更改工作目录
我们尝试更改到用户指定的目录。如果指定的目录不存在,我们会捕获一个OSError
异常,并告知用户。
try:
os.chdir(file_path)
except OSError as e:
print(e)
print("文件夹不存在,请检查路径是否正确,程序5s后异常退出")
sleep(5)
exit()
读取和排序PDF文件
接下来,我们读取指定目录下的所有文件,并通过修改时间对它们进行排序,以确保合并的PDF文档是按照文件的修改顺序来的。
pdfs = os.listdir('.')
sorted_file_list = sorted(pdfs, key=lambda x: os.path.getmtime(os.path.join('.', x)))
合并PDF文件
我们创建一个PdfMerger
对象,并遍历排序后的PDF文件列表,将每个PDF文件添加到PdfMerger
对象中。
pdf_all = PdfMerger()
for pdf in sorted_file_list:
with open(pdf, "rb") as temp:
pdfreader = PdfReader(temp)
pdf_all.append(pdfreader, import_outline=True)
保存合并后的PDF
最后,我们定义一个文件名,将合并后的PDF保存到这个文件,并关闭文件。
pdf_save = open(r".\pdfall.pdf", "wb")
pdf_all.write(pdf_save)
pdf_save.close()
程序结束提示
在程序的最后,我们打印出合并完成的消息,并让程序暂停5秒钟,然后自动关闭。
print("合并完成,程序5秒后自动关闭")
sleep(5)
这样,我们就完成了一个简单的批量合并PDF文档的脚本。用户可以通过命令行运行这个脚本,也可以通过Nuitka打包成可执行文件,方便在任何没有Python环境的计算机上使用。