几个关于python Pdf 技巧的分享
作者:zzxiaoma 发布时间:2021-11-30 11:39:58
前言:
PyPDF2是一个纯Python的开源库,能够分割或合并PDF文件,也可以裁剪或转换PDF文件中的页面。我们还可以使用PyPDF2查看PDF文件的元信息,对PDF文件进行加密等。
PyPDF2是一个开源的库,因此在使用之前需要先安装。
pip install PyPDF2
1.读取PDF
import PyPDF2
reader = PyPDF2.PdfFileReader(open('a.pdf','rb'))
print(reader.getNumPages())
print(reader.getIsEncrypted())
print(reader.getDocumentInfo())
page = reader.getPage(8)
print(page.extractText())
首先导入PyPDF2
模块,然后以二进制读模式打开a.pdf文件,并将它传递给PdfFileReader
类的初始化函数。PdfFileReader的初始化函数会返回一个PdfFileReader
类的对象,我们可以使用这个对象来获取PDF文件的信息。
通过getNumPages
函数获取pdf的总页数,通过getIsEncrypted
函数获取文件是否加密,通过getDocumentInfo函数获取文件的元数据,通过传递下标给getPage函数的方式获取PDF页面,下标从0开始,与Python内置的字符串、列表和元组等保持一致。通过PageObject
类的extractText
方法提取页面中的文本。从该方法的返回结果来看,提取PDF文本的效果并不理想。
2.删除pdf的某些页
思路:PyPDF2
并不能直接编辑PDF文件,但是我们可以利用PyPDF2从一个PDF文档拷贝需要的页面到另一个PDF文档,通过这种迂回的方式实现编辑PDF的功能。例如删掉a.pdf中的第一页
import PyPDF2
reader = PyPDF2.PdfFileReader(open('a.pdf','rb'))
output = PyPDF2.PdfFileWriter()
for i in range(1,reader.getNumPages()):
output.addPage(reader.getPage(i))
outputStream = open ("b.pdf","wb")
output.write(outputStream)
outputStream.close()
3.旋转页面
PageObject
类中有部分方法可以修改PDF页面,其中rotateClockwise
和rotateCounterClockwise
方法用来旋转页面。这两个方法只接受一个参数,且参数取值必须是90的倍数,表示旋转多少度。
import PyPDF2
reader = PyPDF2.PdfFileReader(open('a.pdf','rb'))
output = PyPDF2.PdfFileWriter()
page = reader.getPage(0)
page.rotateClockwise(180)
output.addPage(page)
outputStream = open ("b.pdf","wb")
output.write(outputStream)
outputStream.close()
4.合并pdf
from PyPDF2 import PdfFileMerger
merger = PdfFileMerger()
a = open("a.pdf",'rb')
b = open("b.pdf",'rb')
c = open("c.pdf",'rb')
merger.append(fileobj = a,pages = (0,3))
merger.merge(position=2,fileobj=b,pages=(0,1))
merger.append(c)
output = open("d.pdf","wb")
merger.write(output)
append
方法通过fileobj
参数确定要添加的PDF文件,通过pages参数指定要将哪些PDF页面添加到新的PDF文件中,并将要添加的页面添加到merger对象的末尾。merge方法相对于append方法,增加了position参数,我们可以通过position参数指定页面插人的位置。append方法和merge方法的pages参数非常灵活,该参数是一个三元组(start,stop[,step]),分别表示起点、终点和步长。我们可以通过该参数指定合并PDF文件中的页面。
来源:https://blog.51cto.com/u_3764469/5039076


猜你喜欢
- 想要asp能连接mysql数据库需要安装MySQL ODBC 3.51 驱动 http://www.jb51.net/softs/19910
- 我们知道,当你把一个资源文件和一个.py文件放在一起的时候,你可以直接在这个.py文件中,使用文件名读取它。例如:with open(
- 可以通过 reflect.DeepEqual 比较两个 slice/struct/map 是否相等:package main import
- 本文实例讲述了python实现同时给多个变量赋值的方法。分享给大家供大家参考。具体分析如下:python中可以同时给多个变量赋值,下面列举了
- Vue2.0/3.0 双向数据绑定的实现原理双向数据绑定简意 即数据的改变能让页面重新渲染Vue2.0 ES5的原理:Object.defi
- 使用.net2005自带的SQL-Express连接不上。解决方法:1.网络防火墙阻止数据库连接;2.默认SQL-Express没有启动Sa
- 该 GIF 图来自于官网,文末有给出链接。描述依托于百度网盘巨大的的云存储空间,绝大数人会习惯性的将一些资料什么的存储到上面,但是有的私密链
- 1. 数据抽取的概念2. 数据的分类3. JSON数据概述及解析3.1 JSON数据格式3.2 解析库jsonjson模块是Python内置
- 一、引出问题假如有这两张表,它们中的课程可能价格不一样、周期不一样、等等...不一样...,现在有一张价格策略表,怎么就用一张表报保存它们之
- 1、为什么淘宝的手机频道页面,竟然会有笔记本、数码相机、随身听,甚至是游戏之类的栏目,而且还有一个“数码·生活”栏目是包括以上这些设备的综合
- 如何提取JSON数据指定内容假设我们要获取'pic_str'里的数据JSON数据{'err_no': 0,
- 首先创建如下的数组和矩阵,其中a,b为数组,A,B为矩阵import numpy as npa = np.arange(1,5).resha
- 前言mysql中的explain命令可以用来查看sql语句是否使用了索引,用了什么索引,有没有做全表扫描。可以帮助我们优化查询语句。expl
- 根本原因:python定义函数时,一般都会有指定返回值,如果没有显式指定返回值,那么python就会默认返回值为None我们输入的代码如下:
- 前言在前端编程中,事件的应用十分广泛,DOM上的各种事件。在Ajax大规模应用之后,异步请求更得到广泛的认同,而Ajax亦是基于事件机制的。
- 大多数情况下,我们使用 webpack来打包单页应用程序,这个时候只需要配置一个入口,一个模板文件,但也不尽是如此,有时候也会碰到多页面的项
- 如何在网站上提供音乐下载?为用户提供歌曲下载,一般有两种方式,一是直接通过Http,浏览器下载,二是通过ftp协议下载。我们来用Http和浏
- 1、准备工作pip install qcloudsms_py1.注册腾讯云账号2.在产品列表内找到短信,在短信内添加应用3.获取对应的SDK
- 本文通过Python3+PyQt5实现自定义部件–分数滑块。它既能支持键盘也支持鼠标,使用物理(视口)坐标通过绘制方式显示。#!/usr/b
- 前言最近在网上搜了许多关于pandas.DataFrame的操作说明,都是一些基础的操作,但是这些操作组合起来还是比较费时间去正确操作Dat