概念
本文主要阐述在项目《自动提取pdf指定页》中对pdf文件的处理方式。若对项目需求不清楚的用户,请先查看文章《帮你自动化办公的python - 自动提取pdf指定页(项目概述)》。
介绍
本项目用到处理pdf的模块是PyPDF2,它提供了读、写、分割、合并、文件转换等多种操作,包含了PdfFileReader 、 PdfFileWriter等主要操作类,使用之前需要先安装,后期本公众号会出一篇文章,专门阐述PyPDF2模块的使用方式。
核心
1. 获取页码范围,主要通过split方法将xx-xx格式的字符串拆开成页码上限和下限两部分,注意最后提取页码的有效范围包含了下限,却不包含上限,如02-05,有效页码为2、3、4页。
# 检查页码是否正确 list_num = num_str.split('-') if not list_num[0].isdigit() or list_num[0] == "" \ or not list_num[1].isdigit() or list_num[1] == ""\ or int(list_num[0]) < 1 or int(list_num[0]) > int(list_num[1]) : return False print(list_num[0], ' ', list_num[1])
2. 读取pdf文件,并获取pdf文件的页码总数。
# 以读的方式打开源pdf文件 src_fd = self.open_read(src) rd_pdf = PdfFileReader(src_fd) wr_pdf = PdfFileWriter() if int(list_num[1]) > rd_pdf.numPages: # 检查页码是否超界 return False
3. 提取pdf文件指定页码到另一个文件中去,调用addPage方法实现。
注意:range(min,max)只包含了下限而未包含上限,在设定页码范围的时候这点需要尤为注意。
# 保存指定页码信息到新文件 dst_fd = self.open_write(dst) for i in range(int(list_num[0]), int(list_num[1])): wr_pdf.addPage(rd_pdf.getPage(i-1)) wr_pdf.write(dst_fd)
示例
★f_pdf对象(pdf操作类):
属性:无
行为:将pdf文件的指定页范围存储新文件中去。
f_pdf.py
from f_file import * from PyPDF2 import PdfFileWriter, PdfFileReader # pdf文件操作定义 class f_pdf(b_file): def __init__(self): pass # 将pdf文件的指定页范围存储新文件中去 # src:表示源文件 dst: 目标文件 num_str: 页码字符串格式为xx-xx如(2-5或1-10)等 # 成功返回True,失败返回False def save_page(self, src, dst, num_str): if not self.is_file(src): # 检查文件名 return False # 检查页码是否正确 list_num = num_str.split('-') if not list_num[0].isdigit() or list_num[0] == "" \ or not list_num[1].isdigit() or list_num[1] == ""\ or int(list_num[0]) < 1 or int(list_num[0]) > int(list_num[1]) : return False print(list_num[0], ' ', list_num[1]) # 以读的方式打开源pdf文件 src_fd = self.open_read(src) rd_pdf = PdfFileReader(src_fd) wr_pdf = PdfFileWriter() if int(list_num[1]) > rd_pdf.numPages: # 检查页码是否超界 return False # 保存指定页码信息到新文件 dst_fd = self.open_write(dst) for i in range(int(list_num[0]), int(list_num[1])): wr_pdf.addPage(rd_pdf.getPage(i-1)) wr_pdf.write(dst_fd) src_fd.close() dst_fd.close() return True
往期 · 推荐
帮你自动化办公的python-自动提取pdf指定页(文件处理篇)
帮你自动化办公的python-自动提取pdf指定页(项目概述)
也没想象中那么神秘的数据结构-一种通用化的双向链表设计(底层源码)
关注
更多精彩内容,请关注微信公众号:不只会拍照的程序猿,本人致力分享linux、设计模式、C语言、嵌入式、编程相关知识,也会抽空分享些摄影相关内容,同样也分享大量摄影、编程相关视频和源码,另外你若想要本文章源码请关注公众号:不只会拍照的程序猿,后台回复:PDF拆解源码,也可点击此处下载。