Python 将多个PDF文档中的指定页,合并生成新的PDF、拆份PDF
pip install PyPDF2 -i https://pypi.tuna.tsinghua.edu.cn/simple
将多个PDF文档中的指定页,合并生成新的PDF
代码如下:
from PyPDF2 import PdfReader, PdfWriter
# pip install PyPDF2 -i https://pypi.tuna.tsinghua.edu.cn/simple
# 定义要处理的PDF文件及其完整路径
pdf_files = {
'数模.pdf': r'D:\Users\Documents\WeChat Files\FileStorage\File\2025-03\数学一模每日一练5(3.18).pdf', # 替换为A.pdf的实际路径
'数招.pdf': r'D:\Users\Documents\WeChat Files\FileStorage\File\2025-03\自招考试—数学每日一练5(3.18).pdf', # 替换为B.pdf的实际路径
'物模.pdf': r'D:\Users\Documents\WeChat Files\FileStorage\File\2025-03\物理一模每日一练5(3.18).pdf', # 替换为C.pdf的实际路径
'物招.pdf': r'D:\Users\Documents\WeChat Files\FileStorage\File\2025-03\自招考试—物理每日一练5(3.18).pdf', # 替换为C.pdf的实际路径
'化模.pdf': r'D:\Users\Documents\WeChat Files\FileStorage\File\2025-03\化学一模每日一练5(3.18).pdf', # 替换为C.pdf的实际路径
'化招.pdf': r'D:\Users\Documents\WeChat Files\FileStorage\File\2025-03\自招版—化学每日一练5(3.18).pdf' # 替换为C.pdf的实际路径
}
# 定义要提取的页码(注意:页码从0开始)
pages_to_extract = {
'数模.pdf': [0], # 提取A.pdf的第1页和第3页
'数招.pdf': [0], # 提取B.pdf的第2页
'物模.pdf': [0], # 提取C.pdf的第1页和第2页
'物招.pdf': [0], # 提取A.pdf的第1页和第3页
'化模.pdf': [0], # 提取B.pdf的第2页
'化招.pdf': [0] # 提取C.pdf的第1页和第2页
}
# 创建一个PdfWriter对象来保存合并后的PDF
output_pdf = PdfWriter()
# 遍历每个PDF文件
for pdf_name, pdf_path in pdf_files.items():
# 读取PDF文件
reader = PdfReader(pdf_path)
# 获取要提取的页码
pages = pages_to_extract.get(pdf_name, [])
# 遍历要提取的页码
for page_num in pages:
# 获取指定页
page = reader.pages[page_num]
# 将页添加到输出PDF中
output_pdf.add_page(page)
# 将合并后的PDF写入到输出文件
output_path = r'D:\Users\Desktop\0319.pdf' # 替换为输出文件的实际路径
with open(output_path, 'wb') as output_file:
output_pdf.write(output_file)
print(f"PDF合并完成,已保存为 {output_path}")
代码说明:
- PdfReader:用于读取 PDF 文件。
- PdfWriter:用于创建和写入新的 PDF 文件。
- pages_to_extract:一个字典,指定每个 PDF 文件中要提取的页码。注意,页码从 0 开始。
- output_pdf.add_page(page):将指定的页面添加到输出 PDF 中。
- output_pdf.write(output_file):将合并后的 PDF 写入到输出文件。
拆分PDF
from PyPDF2 import PdfReader, PdfWriter
import os
# 定义要处理的PDF文件及其完整路径
pdf_files = {
'a.pdf': '/path/to/a.pdf', # 替换为a.pdf的实际路径
'b.pdf': '/path/to/b.pdf', # 替换为b.pdf的实际路径
'c.pdf': '/path/to/c.pdf' # 替换为c.pdf的实际路径
}
# 定义输出目录
output_dir = '/path/to/output' # 替换为输出目录的实际路径
# 如果输出目录不存在,则创建它
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 遍历每个PDF文件
for pdf_name, pdf_path in pdf_files.items():
# 读取PDF文件
reader = PdfReader(pdf_path)
# 遍历PDF的每一页
for page_num, page in enumerate(reader.pages):
# 创建一个PdfWriter对象
writer = PdfWriter()
# 将当前页添加到PdfWriter中
writer.add_page(page)
# 生成输出文件名
output_filename = os.path.join(output_dir, f'{pdf_name}_page_{page_num + 1}.pdf')
# 将当前页保存为一个单独的PDF文件
with open(output_filename, 'wb') as output_file:
writer.write(output_file)
print(f"已保存: {output_filename}")
print("所有页面已拆分为单独的PDF文件!")
代码说明:
PdfReader:- 用于读取 PDF 文件。
PdfWriter:- 用于创建新的 PDF 文件。
os.makedirs(output_dir):- 如果输出目录不存在,则创建它。
enumerate(reader.pages):- 遍历 PDF 的每一页,
page_num是页码(从 0 开始),page是当前页内容。
- 遍历 PDF 的每一页,
output_filename:- 生成输出文件的路径和名称,格式为
{pdf_name}_page_{page_num + 1}.pdf(例如a.pdf_page_1.pdf)。
- 生成输出文件的路径和名称,格式为
writer.write(output_file):- 将当前页保存为一个单独的 PDF 文件。
本文来自博客园,作者:VipSoft 转载请注明原文链接:https://www.cnblogs.com/vipsoft/p/18780855
浙公网安备 33010602011771号