【python 让繁琐工作自动化】处理PDF

从PDF提取文本

import PyPDF2,os  #导入PyPDF2模块
os.chdir('D:/python/python编程快速上手-让繁琐的工作自动化/处理PDF')
pdfObj=open('meetingminutes.pdf','rb') 
#以二进制模式打开.pdf文件,并保存在pdfObj对象中
pdfReader=PyPDF2.PdfFileReader(pdfObj)
#调用PdfFileReader()方法,传入pdfObj作为参数,生成PdfFileReader对象,保存在pdfReader中
pageNum=pdfReader.numPages
#numPages属性,返回该文档的总页数变量类型为int
pageObj=pdfReader.getPage(1)
#为了从某一页中提取文本,需要获得该页的Page对象
#调用PdfFileReader对象的getPage()方法,传入页码作为参数,获取文件的特定页的Page对象
#页码的编号从0开始,也就是第一页的编号为0
txt=pageObj.extractText()
#调用Page对象的extractText()方法,可以返回该页所有文本的字符串

解密PDF

import PyPDF2,os
os.chdir('D:/python/python编程快速上手-让繁琐的工作自动化/处理PDF和word文档')
pdfReader=PyPDF2.PdfFileReader(open('encrypted.pdf','rb'))

x=pdfReader.isEncrypted
##利用pdfReader对象的isEncrypted属性判断文档是否被加密
#加密返回True,未加密返回False
y=pdfReader.decrypt('rosebud')
#调用pdfReader对象的decrypt()函数,传入字符串密码作为参数
#解密成功返回1,反之返回0
pageObj=pdfReader.getPage(0)
##解密成功之后就可以调用函数来读取文件,未解密的情况下会报错

PdfFileReader 对象的属性和方法

属性和方法描述返回数据类型
getDocumentInfo()检索 PDF 文件的文档信息字典
getNumPages()或numPages计算此 PDF 文件中的页数int
getOutlines(node = None,outline = None,)检索文档中出现的文档大纲目标嵌套列表
getPage(pageNumber)从这个 PDF 文件中检索指定编号的页面Page对象
getPageLayout()获取页面布局str:当前正在使用的页面布局,如果未指定None
getPageMode()获取页面模式str:当前正在使用的页面模式,如果未指定None
getPageNumber(pageObject)检索给定 pageObject 处于的页码int
isEncrypted显示 PDF 文件是否加密的属性加密返回True,未加密返回False
decrypt(password)解密PDF文件解密成功返回1,反之返回0

创建PDF

PdfFileWriter对象

属性和方法参数描述返回值返回数据类型错误
addBlankPage(width = None,height = None )width(float)–以默认用户空间单位表示的新页面的宽度。 height(float)–以默认用户空间单位表示的新页面的高度。将空白页附加到此PDF文件并返回。如果未指定页面大小,请使用最后一页的大小。新添加的页面PageObject引发PageSizeNotDefinedError:如果未定义宽度和高度,并且上一页不存在。
addPage(page)(PageObject)–要添加到文档的页面将页面添加到此PDF文件。该页面通常是从PdfFileReader实例获取的
insertPage(page,index = 0 )page(PageObject)–要添加到文档的页面。此参数应为的实例PageObject。index(int)–插入页面的位置。在此PDF文件中插入页面。该页面通常是从PdfFileReader实例获取的
insertBlankPage(width = None,height = None,index = 0 )width(float)–以默认用户空间单位表示的新页面的宽度。height(float)–以默认用户空间单位表示的新页面的高度。index(int)–添加页面的位置。将空白页插入此PDF文件并返回。如果未指定页面大小,使用最后一页的大小新添加的页面PageObject引发PageSizeNotDefinedError:如果未定义宽度和高度,并且上一页不存在。
encrypt(user_pwd,owner_pwd = None,use_128bit = True )user_pwd(str)–“用户密码”,允许使用提供的限制打开和阅读PDF文件。owner_pwd(str)–“所有者密码”,它允许无限制地打开PDF文件。默认情况下,所有者密码与用户密码相同。use_128bit(bool)–是否使用128位加密的标志。如果为false,将使用40位加密。默认情况下,此标志为开。使用PDF Standard加密处理程序对该PDF文件进行加密。
将文件中的页面添加到新文件
import PyPDF2,os
os.chdir('D:/python/python编程快速上手-让繁琐的工作自动化/处理PDF和word文档')

pdfWrite=PyPDF2.PdfFileWriter()
#创建一个PdfFileWriter对象
def addpage(s):
    pdfReader=PyPDF2.PdfFileReader(open(s,'rb'))#打开一个pdf文件
    for pageNum in range(pdfReader.getNumPages()):
        PageObj=pdfReader.getPage(pageNum)
         #从打开的pdf文件中获取页面(Page对象)
        pdfWrite.addPage(PageObj)
        #使用addPage()方法将Page对象添加到新的PdfFileWriter对象中
addpage('meetingminutes.pdf')
addpage('meetingminutes2.pdf')
pdfFile=open('combinedminutes.pdf','wb')
#创建一个新的pdf文件,以二进制写的方式打开
pdfWrite.write(pdfFile)
#将新的pdf文件(pdfFile)传递给PdfFileWriter对象的write()方法,即写入一个新的pdf文件
pdfFile.close()
加密PDF
import PyPDF2,os
os.chdir('D:/python/python编程快速上手-让繁琐的工作自动化/处理PDF和word文档')

pdfReader=PyPDF2.PdfFileReader(open('meetingminutes.pdf','rb'))
pdfWrite=PyPDF2.PdfFileWriter()
for pageNum in range(pdfReader.getNumPages()):
    pdfWrite.addPage(pdfReader.getPage(pageNum))
    #将meetingminutes.pdf文件中的每一页都添加到PdfFileWriter对象中
pdfWrite.encrypt('123456')
#对PdfFileWriter对象加密,密码为123456,encrypt只传入一个参数,将作为用户口令和所有者口令
pdfFile=open('encrypt_test.pdf','wb')
pdfWrite.write(pdfFile)
#将PdfFileWriter对象写入新文件并保存
pdfFile.close()

编辑PDF

Page对象

属性和方法参数描述
extractText()按照在内容流中提供的顺序找到所有文本绘制命令,然后提取文本。这对于某些PDF文件效果很好,但对其他PDF文件效果不佳,具体取决于所使用的生成器
rotateClockwise(angle)angle(int)–旋转页面的角度。必须以90度为增量将页面顺时针旋转90度
rotateCounterClockwise(angle)angle(int)–旋转页面的角度。必须以90度为增量将页面逆时针旋转90度
mergePage(page2 )page2(PageObject)–要合并到此页面中的页面,应该是的实例PageObject将两个页面的内容流合并为一个
scale(sx, sy)sx(float)–水平轴上的缩放比例。sy(float)–垂直轴上的缩放比例。更新页面大小,以给定的因子缩放页面
scaleBy(factor)factor(float)–缩放因子(对于X和Y轴)更新页面大小,可以按给定因子缩放页面
scaleTo(width, height)width(float)–新的宽度。height(float)–新的高度。更新页面大小,将页面缩放到指定的尺寸
旋转页面
import PyPDF2,os
os.chdir('D:/python/python编程快速上手-让繁琐的工作自动化/处理PDF和word文档')

pdfReader=PyPDF2.PdfFileReader(open('meetingminutes.pdf','rb'))
page=pdfReader.getPage(0)
page.rotateClockwise(90)
#将获取的页面顺时针旋转90°
#只是将Page对象的属性改变,并不会改变原文件
pdfWrite=PyPDF2.PdfFileWriter()
pdfWrite.addPage(page)
pdfFile=open('Rotate_test.pdf','wb')
pdfWrite.write(pdfFile)
#将旋转后的页面写入新文档,从而得到保存
pdfFile.close()

叠加页面
import PyPDF2,os
os.chdir('D:/python/python编程快速上手-让繁琐的工作自动化/处理PDF和word文档')

pdfReader=PyPDF2.PdfFileReader(open('meetingminutes.pdf','rb'))
page=pdfReader.getPage(0)
#获取pdf文件的第一页
pdfWaterMarkReader=PyPDF2.PdfFileReader(open('watermark.pdf','rb'))
#获取watermark.pdf文件的第一页作为要合并的页面
page.mergePage(pdfWaterMarkReader.getPage(0))
#将watermark.pdf文件的第一页合并到meetingminutes.pdf的第一页
pdfWrite=PyPDF2.PdfFileWriter()
pdfWrite.addPage(page)
pdfFile=open('meragePage_test.pdf','wb')
pdfWrite.write(pdfFile)
#将合并后的Page对象添加到PdfFileWriter对象并保存到新文件中
pdfFile.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

TongTong-12138

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

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

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

打赏作者

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

抵扣说明:

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

余额充值