pdf文件合并并生成新的目录
import pikepdf
import os
from datetime import datetime
def merge_pdfs_with_outline():
# 获取当前目录下所有的PDF文件
pdf_files = [f for f in os.listdir('.') if f.endswith('.pdf')]
if len(pdf_files) < 2:
print("当前目录下PDF文件少于2个!")
return
try:
# 按文件名排序
pdf_files.sort()
# 生成输出文件名
output_name = 'merged_output.pdf'
# 创建一个新的PDF文件
merged_pdf = pikepdf.Pdf.new()
# 创建目录结构
outline = merged_pdf.open_outline()
# 记录当前页码
current_page = 0
# 合并选中的文件
for pdf_file in pdf_files:
print(f"正在处理: {pdf_file}")
pdf = pikepdf.Pdf.open(pdf_file)
# 先添加页面
merged_pdf.pages.extend(pdf.pages)
# 添加文件到目录
if current_page < len(merged_pdf.pages) and current_page!=0:
outline.add(
title='Book'+os.path.splitext(pdf_file)[0].lstrip('0'),
destination=merged_pdf.pages[current_page].index
)
# 如果原PDF有目录,也添加其目录项
if '/Outlines' in pdf.Root:
try:
source_outline = pdf.open_outline()
for item in source_outline.root:
# 获取目标页码
dest_page = item.destination
if isinstance(dest_page, pikepdf.Array):
raw_page = dest_page[0]
page = pikepdf.Page(raw_page)
page_index=int(page.label)
elif isinstance(dest_page, int):
page_index=dest_page
else:
page_index = 0
if current_page + page_index < len(merged_pdf.pages):
outline.add(
title=item.title,
destination=merged_pdf.pages[current_page + page_index-1].index
)
except Exception as e:
print(f"处理文件 {pdf_file} 的目录时出错:{str(e)}")
# 更新页码
current_page += len(pdf.pages)
# 保存合并后的文件
merged_pdf.save(output_name)
print(f"\nPDF文件合并成功!")
print(f"输出文件:{output_name}")
print(f"合并的文件:{', '.join(pdf_files)}")
except Exception as e:
print(f"合并过程中出现错误:{str(e)}")
if __name__ == '__main__':
merge_pdfs_with_outline()
以上代码使用pikepdf实现若干个pdf文件按照名称排序生成新的pdf文件并生成新的目录结构

浙公网安备 33010602011771号