Python | 实现pdf文件分页
不知道大家有没有遇到过这么一种情况,就比如一个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 | 实现pdf文件分页的更多相关文章
- Python绘制PDF文件~超简单的小程序
Python绘制PDF文件 项目简介 这次项目很简单,本次项目课,代码不超过40行,主要是使用 urllib和reportlab模块,来生成一个pdf文件. reportlab官方文档 http:// ...
- 使用Python从PDF文件中提取数据
前言 数据是数据科学中任何分析的关键,大多数分析中最常用的数据集类型是存储在逗号分隔值(csv)表中的干净数据.然而,由于可移植文档格式(pdf)文件是最常用的文件格式之一,因此每个数据科学家都应该了 ...
- 记一次为解决Python读取PDF文件的Shell操作
目录 一.背景 二.问题 三.解决 四.一顿分析及 Shell 操作 五.后续 一.背景 本想将 PDF 文件转换为 Word 文档,然后网上搜索了一下发现有挺多转换的软件.有的是免费的.收费,咱也不 ...
- Python实现PDF文件截取
python3截取PDF文件中的一部分. from PyPDF2 import PdfFileWriter, PdfFileReader # 开始页 start_page = 0 # 截止页 end_ ...
- windows下用Python把pdf文件转化为图片
依赖:PyMuPDF(pip install pymupdf) # -*- coding: utf-8 -*- """ 1.安装库 pip install pymupdf ...
- python读取pdf文件
pdfplumber简介 Pdfplumber是一个可以处理pdf格式信息的库.可以查找关于每个文本字符.矩阵.和行的详细信息,也可以对表格进行提取并进行可视化调试. 文档参考https://gith ...
- 使用python进行pdf文件分割
Python代码 import os from pyPdf import PdfFileWriter, PdfFileReader def split(pdf_file, delta, output_ ...
- 【python】用python生成pdf文件
转自:https://www.davidfischer.name/2015/08/generating-pdfs-with-and-without-python/ from reportlab.pla ...
- 基于Python实现对PDF文件的OCR识别
http://www.jb51.net/article/89955.htm https://pythontips.com/2016/02/25/ocr-on-pdf-files-using-pytho ...
随机推荐
- jdbc核心技术-宋红康
视频地址 JDBC核心技术 第1章:JDBC概述 1.1 数据的持久化 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,特别是企业级应用,数据持久化意味着将 ...
- ByteArrayOutputStream小测试
import java.io.*; import org.junit.Test; public class ByteArrayOutputStreamTest { @Test public void ...
- 跨 Docker 宿主机网络 overlay 类型
跨 Docker 宿主机网络 overlay 类型 前言 a. 本文主要为 Docker的视频教程 笔记. b. 环境为 三台 CentOS 7.0 虚拟机 (Vmware Workstation 1 ...
- PTA 面向对象程序设计 6-3 面积计算器(函数重载)
6-3 面积计算器(函数重载) 实现一个面积计算器,它能够计算矩形或长方体的面积. 函数接口定义: int area(int x, int y); int area(int x, int y, int ...
- jquery播放视频事件
$('video').trigger('play'); $('video').trigger('pause'); 判断video播放器的播放状态,并进行切换播放,需要这样 let video = $( ...
- Writing in the Science 01
INTRODUCTION What makes good writing? Good writing communicates an idea clearly and effectively. Goo ...
- python刷题第四周
本周有所收获的题目: 第一题: 第4章-17 水仙花数(20 分) (20 分) 水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身. 例如:153=1×1×1+5×5×5 ...
- 测试验收标准checklist
需求实现功能清单 功能实现目的 需求改造功能清单 关联功能清单 关联系统 端到端全流程场景 业务联系性场景 业务全流程场景 上下需求关联规则 业务角度在流程中关注项 财报.评级 授信方案 反洗钱 面向 ...
- 让selenium规避网站的检测
在使用selenium对某些网站模拟访问的时候会被检测出来,检测出来之后就有可能拿不到我们想要的数据,那么我们怎么可以规避掉呢? 在使用谷歌浏览器的时候我们右键-检查-console-输入window ...
- pkusc2021游记
@ 目录 前言 Day 0 Day 1 Day 2 Day 3 前言 到时候APIO的大概也会写在这篇里吧. Day 0 车,公交,飞机,公交,车 坐了半天的交通终于到了,整个人都坐的晕乎乎的,然后看 ...