帮你自动化办公的python - 自动提取pdf指定页(pdf处理篇)

概念

本文主要阐述在项目《自动提取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指定页(项目概述)

也没想象中那么神秘的数据结构-一种通用化的双向链表设计(底层源码)

也没想象中那么神秘的数据结构-一环扣一环的“链表”(双向链表)

我用C语言玩对象,偷偷关注着你的观察者模式(基类设计)

关注

更多精彩内容,请关注微信公众号:不只会拍照的程序猿,本人致力分享linux、设计模式、C语言、嵌入式、编程相关知识,也会抽空分享些摄影相关内容,同样也分享大量摄影、编程相关视频和源码,另外你若想要本文章源码请关注公众号:不只会拍照的程序猿,后台回复:PDF拆解源码,也可点击此处下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不只会拍照的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值