本文主要是介绍Python实现合并与拆分多个PDF文档中的指定页,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《Python实现合并与拆分多个PDF文档中的指定页》这篇文章主要为大家详细介绍了如何使用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的实际路径 } # 定义要javascript提取的页码(注意:页码从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_fijavascriptle: 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(oujstput_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_China编程1.pdf
)。
- 生成输出文件的路径和名称,格式为
writer.write(output_file)
:- 将当前页保存为一个单独的 PDF 文件。
方法扩展
下面小编为大家整理了一些python关于PDF文档的其他应用,希望对大家有所帮助
1.python提取多个pdf特定页,并合并为新pdf文件
方法如下
import os
from PyPDF2 import PdfReader, PdfWriter
class PdfMerge:
def __init__(self, fileList, dstFile):
self.fileList = fileList
self.dstFile = dstFile
def readPdf(self, pdfFile, pageRange):
pageList = []
pdf_reader = PdfReader(pdfFile)
for i in range(len(pdf_reader.pages)):
if i in pageRange:
pageList.append(pdf_reader.pages[i])
return pageList
def writePdf(self, pageList):
pdf_writer = PdfWriter()
for page in pageList:
pdf_writer.add_page(page)
with open(self.dstFile, 'wb') as out:
pdf_writer.write(out)
def getRangeList(sphpelf, rangeStr):
rangeList = []
if rangeStr.find(':') >= 0:
r = rangeStr.split(':')
if len(r) != 2:
print("rangeStr[%s] split [:] failed!"%(rangeStr))
return rangeList
mi = int(r[0])
ma = int(r[1])
for i in range(mi, ma):
rangeList.append(i)
elif rangeStr.find(',') >= 0:
r = rangeStr.split(',')
mi = int(r[0])
ma = int(r[1])
for i in r:
rangeList.append(int(i))
elif rangeStr.isnumeric():
rangeList.append(int(rangeStr))
else:
print("rangeStr split failed! not find [:] and [,]")
return rangeList
def mergePdf(self):
pageList = []
for pdf in self.fileList:
file = pdf["file"]
fileRange = self.getRangeList(pdf["range"])
print("file[{}] rangeStr[{}] rangeList{}".format(file, pdf["range"], fileRange))
pageList.extend(self.readPdf(file, fileRange))
self.writePdf(pageList)
def main():
fileList = [{"file":"source/1_任务书.pdf", "range":"0:10"},{"file":"source/20230409074902162.pdf", "range":"0"}]
# fileList = [{"file":"source/1_任务书.pdf", "range":"0,1,5,6,7"},{"file":"source/20230409074902162.pdf", "range":"0"}]
fileProcess = PdfMerge(fileList, "source/任务书.pdf")
fileProcess.mergePdf()
if __name__ == "__main__":
main()
2.批量截取PDF指定页面
说明:此脚本用于批量截取pdf指定页面。
import os from PyPDF2 import PdfFileWriter, PdfFileReader def get_file(path, all_files): FileNames = os.listdir(path) for file_name in FileNames: cur_path = os.path.join(path, file_name) if os.path.isdir(cur_path): get_file(cur_path, all_files) else: if file_name.endswith('.pdf'): all_files.append(cur_path) return all_files def extract_one_pdf(pdf_path, save_dir, start_page, end_page): pdf_name = pdf_path.split("\\")[-1] print(f"Processing file -- {pdf_path}") if not os.path.exists(save_dir): print(save_dir) os.makedirs(save_dir) pdf_file = PdfFileReader(pdf_path, strict=False) pdf_pages = pdf_file.getNumPages() if not -1 < start_page < end_page < pdf_pages: raise ValueError("Pages Error") pdf_output = PdfFileWriter() for i in range(start_page, end_page): page = pdf_file.getPage(i) pdf_output.addPage(page) with open(save_dir + pdf_name, 'wb') as out: pdf_output.write(out) def extract_many_pdf(pdf_dir_path, save_path, start_page, end_page): source_files = get_file(pdf_dir_path, []) for i, file in enumerate(source_files): file_name = file.split("\\")[-1] save_file = file.replace(pdf_dir_path, save_path) save_dir = save_file.replace(file_name, '') extract_one_pdf(file, save_dir, start_page, end_page) if __name__ == '__main__': path = "C:\\Users\\Lenovo\\Desktop\\test\\" out_path = "C:\\Users\\Lenovo\\Desktop\\pdf_out\\" extract_many_pdf(path, out_path, 0, 1)
到此这篇关于Python实现合并与拆分多个PDF文档中的指定页的文章就介绍到这了,更多相关Python合并与拆分PDF内容请搜索编程China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!
这篇关于Python实现合并与拆分多个PDF文档中的指定页的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!