Python實現(xiàn)合并與拆分多個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 = {
'數(shù)模.pdf': r'D:\Users\Documents\WeChat Files\FileStorage\File\2025-03\數(shù)學一模每日一練5(3.18).pdf', # 替換為A.pdf的實際路徑
'數(shù)招.pdf': r'D:\Users\Documents\WeChat Files\FileStorage\File\2025-03\自招考試—數(shù)學每日一練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 = {
'數(shù)模.pdf': [0], # 提取A.pdf的第1頁和第3頁
'數(shù)招.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頁
}
# 創(chuàng)建一個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:用于創(chuàng)建和寫入新的 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' # 替換為輸出目錄的實際路徑
# 如果輸出目錄不存在,則創(chuàng)建它
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):
# 創(chuàng)建一個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:- 用于創(chuàng)建新的 PDF 文件。
os.makedirs(output_dir):- 如果輸出目錄不存在,則創(chuàng)建它。
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 文件。
方法擴展
下面小編為大家整理了一些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(self, 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實現(xiàn)合并與拆分多個PDF文檔中的指定頁的文章就介紹到這了,更多相關Python合并與拆分PDF內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python使用Transformers實現(xiàn)機器翻譯功能
近年來,機器翻譯技術飛速發(fā)展,從傳統(tǒng)的基于規(guī)則的翻譯到統(tǒng)計機器翻譯,再到如今流行的神經網絡翻譯模型,尤其是基于Transformer架構的模型,翻譯效果已經有了質的飛躍,本文將詳細介紹如何使用Transformers庫來實現(xiàn)一個機器翻譯模型,需要的朋友可以參考下2024-11-11
tensorflow pb to tflite 精度下降詳解
這篇文章主要介紹了tensorflow pb to tflite 精度下降詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
Python + selenium自動化環(huán)境搭建的完整步驟
這篇文章主要給大家介紹了關于Python + selenium自動化環(huán)境搭建的相關資料,文中通過圖文將實現(xiàn)的步驟一步步介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧2018-05-05
python MNIST手寫識別數(shù)據(jù)調用API的方法
這篇文章主要介紹了python MNIST手寫識別數(shù)據(jù)調用API的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08

