Python操作pdf会用到两个库:
在使用前需要先对其进行安装
pip install PyPDF2 pip install pdfplumber
将一个pdf拆分为几个小的pdf,主要用到PyPDF2这个库
拆分思路如下:
import os import PyPDF2 from PyPDF2 import PdfFileReader from PyPDF2 import PdfFileWriter def split_pdf(filename, filepath, save_dirpath, step=5): """ 拆分PDF为多个小的PDF文件, @param filename:文件名 @param filepath:文件路径,包含pdf的名字 @param save_dirpath:保存小的PDF的文件路径 @param step: 每step间隔的页面生成一个文件,例如step=5,表示0-4页、5-9页...为一个文件 @return: """ if not os.path.exists(save_dirpath): os.mkdir(save_dirpath) pdf_reader = PdfFileReader(filepath) # 读取每一页的数据 pages = pdf_reader.getNumPages() for page in range(0, pages, step): pdf_writer = PdfFileWriter() # 拆分pdf,每 step 页的拆分为一个文件 for index in range(page, page+step): if index < pages: pdf_writer.addPage(pdf_reader.getPage(index)) # 保存拆分后的小文件 save_path = os.path.join(save_dirpath, filename+str(int(page/step)+1)+'.pdf') print(save_path) with open(save_path, "wb") as out: pdf_writer.write(out) print("文件已成功拆分,保存路径为:"+save_dirpath) filename='易方达中小盘混合型证券投资基金2020年中期报告' filepath=r'E:\数据分析\python办公\易方达中小盘混合型证券投资基金2020年中期报告.pdf' save_dirpath='E:\数据分析\python办公\pdf拆分' split_pdf(filename,filepath,save_dirpath,step=5)
注意:第一次用的时候会报错
解决方法是从python安装包下找到PyPDF2\utils.py
将其中的238 行的
r = s.encode('latin-1') if len(s) < 2: bc[s] = r return r
改为
try: r = s.encode('latin-1') if len(s) < 2: bc[s] = r return r except Exception as e: r = s.encode('utf-8') if len(s) < 2: bc[s] = r return r
改完后一定要重启python,否则不成功
思路:
def concat_pdf(filename, read_dirpath, save_filepath): """ 合并多个PDF文件 @param filename:文件名前缀 @param read_dirpath:要合并的PDF目录 @param save_filepath:合并后的PDF文件路径,包含新pdf的名字 @return: """ pdf_writer = PdfFileWriter() # 对文件名进行排序 list_filename = os.listdir(read_dirpath) list_filename.sort(key=lambda x: int(x[:-4].replace(filename, ""))) for filename in list_filename: print(filename) filepath = os.path.join(read_dirpath, filename) # 读取文件并获取文件的页数 pdf_reader = PdfFileReader(filepath) pages = pdf_reader.getNumPages() # 逐页添加 for page in range(pages): pdf_writer.addPage(pdf_reader.getPage(page)) # 保存合并后的文件 with open(save_filepath, "wb") as out: pdf_writer.write(out) print("文件已成功合并,保存路径为:"+save_filepath) filename='易方达中小盘混合型证券投资基金2020年中期报告' read_dirpath='E:\数据分析\python办公\pdf拆分' save_filepath='E:\数据分析\python办公\pdf合并\易方达中小盘混合型证券投资基金2020年中期报告.pdf' concat_pdf(filename,read_dirpath,save_filepath)