场景
手动合并PDF文件是一个繁琐且耗时的过程,特别是当需要合并大量文件时。自动化工具可以迅速完成这一任务,从而节省宝贵的时间,使用可视化工具PDFShaper-Professional
仍然无法摆脱全自动,仍需要人为干预去做文件选定,可参考使用以下代码做文件选定、合并,流程全自动化处理。
功能
将doc1_1.pdf
、…、doc1_200.pdf
、… 、doc1001_1.pdf
、… 、doc1001_100.pdf
自动批量合并成doc1.pdf
、… 、doc1001.pdf
说明
-
确定一个合并顺序(这里基于数字后缀,可改),确定一个要合并的文件在名称上的共性(这里基于相同的前缀,可改),参考格式:
docName_index.pdf
-
创建输入目录(
./pdf
)
doc1_1.pdf
、…、doc1_200.pdf
、… 、doc1001_1.pdf
、… 、doc1001_100.pdf
-
创建输出目录(
./output
)
存放doc1.pdf
、… 、doc1001.pdf
代码
import os
from PyPDF2 import PdfMerger
def merge_pdfs_by_prefix(directory, prefix):
# 收集所有具有相同前缀的PDF文件
pdf_files = [os.path.join(directory, f) for f in os.listdir(directory) if f.startswith(prefix) and f.endswith('.pdf')]
# 对文件进行排序,确保合并的顺序是正确的
pdf_files.sort(key=lambda x: int(''.join(filter(str.isdigit, os.path.basename(x)))))
# print(pdf_files)
# exit(0)
merger = PdfMerger()
for pdf_file in pdf_files:
merger.append(pdf_file)
output_pdf = f"output/{prefix}.pdf"
merger.write(output_pdf)
merger.close()
print(f"Merged PDF files into {output_pdf}")
def extract_prefix(directory):
#提取前缀集合
res =[ item[:item.find('_')] for item in os.listdir(directory) ]
res = list(set(res))
# print(res)
# exit(0)
return res
if __name__ =='__main__':
directory = './pdf'
prefix_list = extract_prefix(directory)
for prefix in prefix_list:
merge_pdfs_by_prefix(directory, prefix)