⽤python操作PDF⽂件
本次学习的内容主要是:从PDF读取⽂本内容和从已经有的⽂档⽣成新的PDF。
需要⽤到的模块是PyPDF2.
⾸先要在命令⾏中运⾏pip install PyPDF2.
⼀、从PDF读取⽂本
PyPDF2⽆法从pdf⽂档中提取图像,图表和其他媒体,但是它可以提取⽂本,并且将⽂本返回为python字符串。
import PyPDF2
# ===============从pdf中提取⽂本===========
pdffile = open(r'E:\python让繁琐的⼯作⾃动化\13_处理pdf和word⽂档\data\meetingminutes.pdf', 'rb')  # 读取pdf⽂件
pdfreader = PyPDF2.PdfFileReader(pdffile)  # 读⼊到
print(pdfreader.numPages)  # 读取pdf页数======19
读取pdf⽂件的页数是:
获取第⼀页的内容:
page0 = Page(0)  #获取第1页,第⼀页是0
actText())  # 获取第2页的内容,返回的是字符串
内容是
⼆、解密PDF
某些⽂档有加密功能,为了防⽌别⼈阅读,只有在打开⽂档的时候提供⼝令才能阅读。我打开的⽂件的加密⼝令是rosebud.其实在读取⼀个pdf⽂件是⾸先应该确定它是否加密了。如果加密,isEncrypted属性就会返回True.此时就需要⼝令了。
# 某些pdf⽂件是加密的,防⽌别⼈阅读的,只有打开⽂档的时候提供⼝令才能阅读
pdf_reader = PyPDF2.PdfFileReader(open(r'E:\python让繁琐的⼯作⾃动化\13_处理pdf和word⽂档\d
ata\encrypted.pdf','rb'))
print(pdf_reader.isEncrypted)  # ⽂件是否加密
返回的结果是:
如果这时候不输⼊⼝令就获取内容的话。
print(Page(0))  # PyPDF2.utils.PdfReadError: file has not been decrypted ⽂件还没有解锁
会提⽰出现错误。
此时调⽤decrypt⽅法,输⼊⼝令,再读取就可以啦。
print(pdf_reader.decrypt('rosebud'))  # rosebud==正确⼝令显⽰1,其他显⽰0
page_obj = Page(0)  # 这样才能正确读取
print(actText())
返回的结果是:
三、创建PDF
PyPDF2可以创建⼀个新的PDF⽂件,但是不能将任何⽂本写⼊到PDF。其写⼊PDF的能⼒,仅限于从其他PDF中拷贝页⾯、旋转页⾯、重叠页⾯和加密⽂件。后⾯⼀⼀介绍。
四、拷贝页⾯
# ==========拷贝页⾯==============
pdffile1 = open(r'E:\python让繁琐的⼯作⾃动化\13_处理pdf和word⽂档\data\meetingminutes.pdf', 'rb')
pdffile2 = open(r'E:\python让繁琐的⼯作⾃动化\13_处理pdf和word⽂档\data\meetingminutes2.pdf', 'rb')
pdf1_reader = PyPDF2.PdfFileReader(pdffile1)
pdf2_reader = PyPDF2.PdfFileReader(pdffile2)
# 创建⼀个pdf⽂档,这个只是代表pdf⽂档的值,并没有创建实际的⽂档。
pdf_writer = PyPDF2.PdfFileWriter()
# 将⽂档⼀页⼀页的读⼊到新的⽂档
for pagenum in range(pdf1_reader.numPages):
pageobj = Page(pagenum)
pdf_writer.addPage(pageobj)
for pagenum in range(pdf2_reader.numPages):
pageobj = Page(pagenum)
pdf_writer.addPage(pageobj)
# write⽅法才能真正⽣成⼀个⽂件
pdfoutputfile = open('combin.pdf','wb')
pdf_writer.write(pdfoutputfile)
pdfoutputfile.close()
pdffile1.close()
pdffile2.close()
在对应⽬录下⽣成pdf⽂件
五、旋转页⾯
利⽤rotateClockwise()和rotateCounterClockwise()⽅法PDF页⾯可以旋转90的整倍数。
pdffile1 = open(r'E:\python让繁琐的⼯作⾃动化\13_处理pdf和word⽂档\data\meetingminutes.pdf', 'rb')
pdfreaders = PyPDF2.PdfFileReader(pdffile1)
page = Page(0)  # 获取第⼀页
# 创建⼀个新的PDF⽂档
pdfwriter = PyPDF2.PdfFileWriter()
# 添加内容
pdfwriter.addPage(page)
# 真实创建PDF⽂件并写⼊内容
result = open('ratated.pdf','wb')
pdfwriter.write(result)
# 关闭⽂件
result.close()
pdffile1.close()
点击开PDF⽂档,结果是:
六、叠加页⾯
有的时候需要在PDF中添加公司的标志、时间戳或⽔印。我们⽤这个库依然可以实现。
# 给指定的页⾯添加⽔印、公司标志或者时间戳。
pdffile1 = open(r'E:\python让繁琐的⼯作⾃动化\13_处理pdf和word⽂档\data\meetingminutes.pdf', 'rb')
pdf_reader1 = PyPDF2.PdfFileReader(pdffile1)
# 获取该⽂档的第⼀页
first_page = Page(0)
# 打开印有⽔印的PDF⽂件
water_pdf = PyPDF2.PdfFileReader(r'E:\python让繁琐的⼯作⾃动化\13_处理pdf和word⽂档\data\watermark.pdf', 'rb')
# 在上⼀个⽂档的第⼀页中加⼊这个有⽔印的⽂件
Page(Page(0))
# 将读取的内容写⼊到对象中
pdfwriter = PyPDF2.PdfFileWriter()
pdfwriter.addPage(first_page)
结果是:
七、加密PDF
我们可以对拷贝的页⾯进⾏加密。
pdffile1 = open(r'E:\python让繁琐的⼯作⾃动化\13_处理pdf和word⽂档\data\meetingminutes.pdf', 'rb') pdf_reader1 = PyPDF2.PdfFileReader(pdffile1)
# 将读取的内容写⼊对象中
pdfwriter = PyPDF2.PdfFileWriter()
for pagenum in range(pdf_reader1.numPages):
pdfwriter.addPage(Page(pagenum))
# 输⼊⼝令
# 真正创建PDF⽂件
result_pdf = open('encry.pdf','wb')
pdfwriter.write(result_pdf)
# 关闭⽂件
result_pdf.close()
点击⽣成的PDF⽂件。
输⼊密码才可以打开。
参考⽂献《python编程快速上⼿--让繁琐⼯作⾃动化》
python怎么读取py文件

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。