指定文件夹中读取所有 PDF 文件,并将它们合并为一个文件,每个文件的文件名作为书签:
导入必要的库: 首先导入 os
和 PyPDF2
库。
pip install PyPDF2
运行程序之前,建议把文件先排好序,弄到一个文件夹里。
合并程序如下:
import os
from PyPDF2 import PdfReader, PdfWriter
def merge_pdfs_with_bookmarks(pdf_folder, output):
pdf_writer = PdfWriter()
pdf_files = [os.path.join(pdf_folder, f) for f in os.listdir(pdf_folder) if f.endswith('.pdf')]
current_page = 0 # 用于跟踪当前页面编号
for file in pdf_files:
pdf_reader = PdfReader(file)
num_pages = len(pdf_reader.pages)
# 添加文件中的每一页
for page_num in range(num_pages):
page = pdf_reader.pages[page_num]
pdf_writer.add_page(page)
# 添加书签,书签标题为文件名,书签位置为当前页码
bookmark_title = os.path.basename(file)
pdf_writer.add_outline_item(bookmark_title, current_page)
current_page += num_pages # 更新当前页码
# 保存合并后的PDF文件
with open(output, 'wb') as out_file:
pdf_writer.write(out_file)
if __name__ == '__main__':
pdf_folder = 'path/to/your/pdf/folder' # 替换为实际的PDF文件夹路径
output_pdf = 'merged.pdf' # 输出合并的PDF文件名
merge_pdfs_with_bookmarks(pdf_folder, output_pdf)
print(f"合并完成,输出文件: {output_pdf}")
说明
获取文件夹中的所有 PDF 文件:
- 使用
os.listdir(pdf_folder)
列出文件夹中的所有文件。 - 使用列表推导式筛选出所有以
.pdf
结尾的文件,并组合成完整路径。
- 初始化
current_page
: 用于跟踪当前页面编号。 - 读取并添加每个 PDF 文件的页面: 使用
PdfReader
读取每个文件,遍历每一页并添加到PdfWriter
实例中。 - 添加书签: 使用
add_outline_item
方法添加书签,书签的标题为文件名,位置为当前页面编号。 - 更新当前页码: 每添加一个文件的所有页面后,更新
current_page
以正确计算下一个书签的位置。
使用步骤
- 将脚本中的
pdf_folder
路径替换为实际存放 PDF 文件的文件夹路径。 - 设置输出文件的文件名。
- 运行脚本。
此程序会将指定文件夹中的所有 PDF 文件合并为一个 PDF 文件,并为每个文件添加一个书签,书签的标题为文件名。