# 拆分pdf defpdf_split(pdf_in,pdf_out,start,end): # 初始化一个pdf output = PdfWriter() # 从指定路径读取目标pdf withopen(pdf_in, 'rb') as in_pdf: pdf_file = PdfReader(in_pdf) # 从目标pdf中取出指定页 for i inrange(start, end): output.add_page(pdf_file.pages[i]) # 写入新的pdf,输出到指定路径 withopen(pdf_out, 'ab') as out_pdf: output.write(out_pdf)
if __name__ == '__main__': pdf_in = r'C:\Users\admin\Desktop\新建文件夹\all.pdf' # 获取编号,用于生成拆分后的pdf文件名 pat = r'(?<=[0-9]{4}\])[0-9]+' pages = pdf_reader(pdf_in) startPage = pages-1 endPage = pages for i inrange(pages,0,-1): s = pdf_content(pdf_in,i-1) if"[XXX信][出差申请]"in s: filename = re.findall(pat,s)[0] pdf_out = r'C:\Users\admin\Desktop\新建文件夹\申请编号{}.pdf'.format(filename) startPage = i-1 pdf_split(pdf_in,pdf_out,startPage,endPage) startPage = i-2 endPage = i-1 print('申请编号:{},拆分成功!'.format(filename))
PyPDF2库基本用法整理
PyPDF2历史
PyPDF2是一个免费的开源纯 python PDF 库,能够分割、合并、裁剪和转换 PDF 文件的页面。它还可以向 PDF 文件添加自定义数据、查看选项和密码。PyPDF2也可以从 PDF 中检索文本和元数据。PyPDF2 近期也没有再更新了,最近一个版本发布在2016年,但使用热度依然没有消退。
PDF文件信息处理
1 2 3 4 5 6 7 8 9 10 11
# 读取pdf文件信息 from PyPDF2 import PdfReader defpdf_info(pdf_in): reader = PdfReader(pdf_in) pdfinfo = reader.metadata return reader.numPages , len(reader.pages) , pdfinfo.author , pdfinfo.creator , pdfinfo.producer , pdfinfo.subject , pdfinfo.title if __name__ == '__main__' : pdf_in = r'C:/Users/admin/Desktop/case/测试.pdf' pdfinfo = pdf_info(pdf_in) print(pdfinfo) # 执行结果: (7, 7, 'chen di1', 'Microsoft® Word 适用于 Microsoft 365', 'Microsoft® Word 适用于 Microsoft 365', None, None)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
# 插入文件信息 # write metadata from PyPDF2 import PdfReader,PdfWriter reader = PdfReader(r'C:\Users\Administrator\Desktop\javascript原理.pdf') writer = PdfWriter() for i in reader.pages: writer.add_page(i) writer.add_metadata( { '/Author':'TestAuthor', '/Title':'TestTitle', } ) withopen(r'C:\Users\Administrator\Desktop\test2.pdf','wb') as wf : writer.write(wf)
PDF合并
1 2 3 4 5 6 7 8 9 10 11 12 13 14
# 简单合并pdf from PyPDF2 import PdfMerger defpdf_combine(pdf_in1,pdf_in2,pdf_out): outpdf = PdfMerger() for pdf in [pdf_in1,pdf_in2]: outpdf.append(pdf) outpdf.write(pdf_out) outpdf.close()
如果计划使用 PyPDF2对使用 AES 的 PDF 进行加密或解密,则需要安装一些额外的依赖项。使用常规安装支持使用 RC4进行加密。
pip install PyPDF2[crypto]
1 2 3 4 5 6 7 8 9
from PyPDF2 import PdfReader,PdfWriter reader = PdfReader(r'C:/Users/Administrator/Desktop/test2.pdf') writer = PdfWriter() for i in reader.pages: writer.add_page(i) # 文件加密 writer.encrypt('qwer1234') withopen(r'C:/Users/Administrator/Desktop/test3.pdf','wb') as f : writer.write(f)
1 2 3 4 5 6 7 8 9 10
from PyPDF2 import PdfReader,PdfWriter reader = PdfReader(r'C:/Users/Administrator/Desktop/test3.pdf') writer = PdfWriter() # 文件解密 if reader.is_encrypted: reader.decrypt('qwer1234') for i in reader.pages: writer.add_page(i) withopen(r'C:/Users/Administrator/Desktop/test4.pdf','wb') as f : writer.write(f)