ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python | 实现pdf文件分页

2022-01-03 10:00:15  阅读:165  来源: 互联网

标签:分页 Python 页数 start path pdf 页码 page


不知道大家有没有遇到过这么一种情况,就比如一个pdf格式的电子书,我们经常浏览的是其中的一部分,而这电子书的页数很大,每当需要浏览时,就需要翻到对应的页码,就有点儿繁琐。

还有一些情况,比如,我们想分享pdf文件里的部分内容给别人,我们也需要用到pdf分页,不仅可以分析指定内容,而且也可以减少发送文件的大小O(∩_∩)O哈哈~

总之,pdf的分页,我们在现实生活中,是难免会遇到的事。当你遇到时,你是怎么解决的呢?

在Python中,实现pdf分页,是及其简单的,只需要运行几行代码,即可实现,不管你的pdf文件有多大,下面让我们一起看看吧~
注:每部分代码的作用,我都注释在了代码后面,注意查看喔~

from PyPDF2 import PdfFileReader, PdfFileWriter
import os


def split(path, page_num):
    try:  # 捕获值异常错误,就是只输入了一个页数的时候
        page_start, page_end = page_num.split()
    except ValueError:
        page_start = page_num
        page_end = page_num
    output_name = os.path.splitext(path)[0] + f'({page_start}-{page_end}).pdf'  # 输出分割后的pdf文件
    page_start, page_end = int(page_start), int(page_end)  # 将页码转为整数类型
    if os.path.splitext(path)[1] == '':  # 判断文件格式是否以.pdf结尾
        path = path + ".pdf"
    try:
        pdf = PdfFileReader(path)  # 读取pdf
    except FileNotFoundError:
        print("Error:请确认您输入的pdf文件是否存在!")
        return
    pdf_writer = PdfFileWriter()  # pdf写入对象

    if page_start < 1 or page_end > pdf.getNumPages():  # 判断页码是否在合理范围内,即有没有小于或大于pdf文件的页数
        print("Error:页码超出合理范围,请确定您输入的页数区间在合理范围之内!")
        return
    for page in range(page_start-1, page_end):  # 需要分割的pdf页数区间,因为读取的页数是从0开始计数的,所以减1
        pdf_writer.addPage(pdf.getPage(page))  # pdf页数读取,存于内存,并未开始写入
    with open(output_name, 'wb') as output_pdf:
        pdf_writer.write(output_pdf)  # 开始写入指定页数区间的pdf
    print("分页完成,注意查收:" + output_name)


if __name__ == '__main__':
    source_path = input("请输入需要分割的pdf的文件:")  # 需要分割的pdf文件
    pages = input("请输入分割的起始页和终止页,以空格分开:")
    split(source_path, pages)

其实最主要的代码就下面的几行:

pdf = PdfFileReader(path)  # 读取pdf
pdf_writer = PdfFileWriter()  # pdf写入对象
for page in range(page_start, page_end):  # 需要分割的pdf页数区间
    pdf_writer.addPage(pdf.getPage(page))  # pdf页数读取,存于内存,并未开始写入
with open(output_name, 'wb') as output_pdf:
    pdf_writer.write(output_pdf)  # 开始写入指定页数区间的pdf

我只是在其基础上增加了一些异常错误捕获并解决的代码,并实现代码的循环利用,而不是只针对于一个pdf文件。

代码使用展示:
1.源文件

书的页数还是挺大的

2.目标页数区间

注意,虽然这里的页码是271,但并不代表就是271,因为读取的pdf文件页码是整个文件的页码,就比如书的封面,目录的页数也得包含进去。

所以,我们可以简单算一下,书的页码第一页与到封面差了几页,我这里差的是13页,所以就是271+13=284作为分割起始页,需要截取的页数对应书上的页码是276,276+13=289,所以终止页就是289

3.代码运行

4.异常捕获的代码展示:
输入的起始页小于1:

pdf页码一共才600页,然后输入了终止页为700:

5.其它
要求的是区间,但你可以输入1 1,1:

代码还可以继续完善,感兴趣的小伙伴可以开动开动一下自己聪明的脑袋瓜子haha

标签:分页,Python,页数,start,path,pdf,页码,page
来源: https://blog.csdn.net/m0_51460728/article/details/122267394

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有