python使用PyPDF2 和 pdfplumber操作PDF文件

 更新时间:2025年01月05日 09:32:32   作者:秃了也弱了。  
本文主要介绍了Python中用于操作PDF的两个库:PyPDF2和pdfplumber,下面就来具体介绍一下两个库的使用方法,具有一定的参考价值,感兴趣的可以了解一下

一、第三方库介绍

Python 操作 PDF 会用到两个库,分别是:PyPDF2 和 pdfplumber。

PyPDF2 可以更好的读取、写入、分割、合并PDF文件;
pdfplumber 可以更好的读取 PDF 文件中内容和提取 PDF 中的表格,主要应用于机器生成的PDF,而非扫描的PDF文档。

对应的官网分别是:

PyPDF2:https://pythonhosted.org/PyPDF2/

pdfplumber:https://github.com/jsvine/pdfplumber

由于这两个库都不是 Python 的标准库,所以在使用之前都需要单独安装,在终端中依次输入如下命令进行安装:
pip install PyPDF2pip install pdfplumber

二、基本使用

1、拆分pdf

拆分的大概思路如下:
读取 PDF 的整体信息、总页数等
按照页数每页拆分为一个PDF
将小的文件块重新保存为新的 PDF 文件

import os.path
from PyPDF2 import PdfFileReader, PdfFileWriter

pdf_path = r"D:\自动化\pdf.pdf"
out_dir = r"D:\自动化\pdf\拆分"

if not os.path.exists(out_dir):
	os.makedirs(out_dir)
	
# 获取 PdfFileReader 对象
pdf_reader = PdfFileReader(pdf_path)

# 获取 pdf 文件页数
pageCount = pdf_reader.getNumPages()
for page in range(pageCount):
	pdf_writer = PdfFileWriter()
	pdf_writer.addPage(pdf_reader.getPage(page))
	out_path = out_dir + "\\%s.pdf" % page
	with open(out_path, "wb") as out:
		pdf_writer.write(out)
import os
from PyPDF2 import PdfFileWriter, PdfFileReader

"""
	拆分PDF为多个小的PDF文件,
	@param filename:拆分后的文件名
	@param filepath:文件路径
	@param save_dir:保存小的PDF的文件路径
	@param step: 每step间隔的页面生成一个文件,例如step=3,表示0-2页、2-5页...为一个文件
	@return:
"""
def 拆分PDF(file_name, file_path, save_dir, step=3):
	if not os.path.exists(save_dir):
		os.mkdir(save_dir)

	if step < 1:
		print("输入的拆分间隔不能小于1")
		return

	pdf_reader = PdfFileReader(file_path)
	# 获取文件总页数
	pageCount = pdf_reader.getNumPages()
	# 读取每一页的数据
	for page in range(0, pageCount, step):
		pdf_writer = PdfFileWriter()
		# 拆分pdf,每 step 页的拆分成一个文件
		for index in range(page, page + step):
			if index < pageCount:
				pdf_writer.addPage(pdf_reader.getPage(index))
		# 保存拆分后的小文件
		childName = '%s%s.pdf' % (file_name, int(page / step) + 1)
		save_path = os.path.join(save_dir, childName)
		print(save_path)
		with open(save_path, "wb") as out:
			pdf_writer.write(out)
	print("文件已成功拆分,保存路径为:" + save_dir)

if __name__ == '__main__':
	拆分PDF('拆分PDF', 'D:\自动化\pdf\二期第1讲.pdf', 'D:\自动化\pdf\拆分2', 4)

2、合并pdf

比起拆分来,合并的思路更加简单:
确定要合并的 文件顺序
循环追加到一个文件块中
保存成一个新的文件

from PyPDF2 import PdfFileReader, PdfFileWriter
import os

pdf_dir = r"D:\自动化\pdf\拆分"
out_path = r"D:\自动化\pdf\merge.pdf"

pdfList = os.listdir(pdf_dir)
pdf_writer = PdfFileWriter()
for i in range(len(pdfList)):
	path = pdf_dir + "\\%s.pdf" % i
	pdf_reader = PdfFileReader(path)
	for page in range(pdf_reader.getNumPages()):
		pdf_writer.addPage(pdf_reader.getPage(page))

with open(out_path, "wb") as out:
	pdf_writer.write(out)

3、提取文字内容

import pdfplumber

pdf_path = r"D:\自动化\pdf\道德经.pdf"
with pdfplumber.open(pdf_path) as pdf:
	# 读取所有内容
	for page in pdf.pages:
		print(page.extract_text())

# 读取第一页的文字内容
# page = pdf.pages[0]
# print(page.extract_text())

4、提取表格内容

extract_table():获取page页的第一个表格数据,表格数据为一个二维列表
extract_tables():获取page页的所有表格数据,表格数据为一个三维列表

import pdfplumber
pdf_path = r"D:\自动化\pdf\道德经.pdf"
with pdfplumber.open(pdf_path) as pdf:
	# 获取第2页数据
	page = pdf.pages[1]
	# 获取第2页的第一个表格的内容
	table = page.extract_table()
	print(type(table), table)
	
	# 获取第2页所有表格的内容
	tables = page.extract_tables()
	print(type(tables), tables)

5、PDF加密

PDF 文件加密需要使用 encrypt 函数,对应的加密代码也比较简单:

from PyPDF2 import PdfFileReader, PdfFileWriter

pdf_path = r"D:\自动化\pdf\道德经.pdf"
sava_path = r"D:\自动化\pdf\加密后.pdf"

pdf_reader = PdfFileReader(pdf_path)
pdf_writer = PdfFileWriter()
for page in range(pdf_reader.getNumPages()):
	pdf_writer.addPage(pdf_reader.getPage(page))

# 添加密码
pdf_writer.encrypt("mima")

with open(sava_path, "wb") as out:
	pdf_writer.write(out)

6、PDF解密

PDF 文件加密需要使用 encrypt 函数,解密则是使用decrypt 函数,代码如下:

from PyPDF2 import PdfFileReader, PdfFileWriter

pdf_path = r"D:\自动化\pdf\加密后.pdf"
sava_path = r"D:\自动化\pdf\解密后.pdf"

pdf_reader = PdfFileReader(pdf_path)

# 利用密码解密
pdf_reader.decrypt('mima')
pdf_writer = PdfFileWriter()
for page in range(pdf_reader.getNumPages()):
	pdf_writer.addPage(pdf_reader.getPage(page))
with open(sava_path, "wb") as out:
	pdf_writer.write(out)

到此这篇关于python使用PyPDF2 和 pdfplumber操作PDF文件的文章就介绍到这了,更多相关PyPDF2 和 pdfplumber操作PDF内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Python安装模块的常见问题及解决方法

    Python安装模块的常见问题及解决方法

    下面小编就为大家分享一篇Python安装模块的常见问题及解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • Python之两种模式的生产者消费者模型详解

    Python之两种模式的生产者消费者模型详解

    今天小编就为大家分享一篇Python之两种模式的生产者消费者模型详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Mysql数据库反向生成Django里面的models指令方式

    Mysql数据库反向生成Django里面的models指令方式

    这篇文章主要介绍了Mysql数据库反向生成Django里面的models指令方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Django中URL视图函数的一些高级概念介绍

    Django中URL视图函数的一些高级概念介绍

    这篇文章主要介绍了Django中URL视图函数的一些高级概念,Django是Python重多人气框架中最为著名的一个,需要的朋友可以参考下
    2015-07-07
  • 深入了解Python的继承

    深入了解Python的继承

    这篇文章主要为大家介绍了Python 继承,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • python通过pil为png图片填充上背景颜色的方法

    python通过pil为png图片填充上背景颜色的方法

    这篇文章主要介绍了python通过pil为png图片填充上背景颜色的方法,实例分析了Python使用pil模块操作png图片的技巧,非常具有实用价值,需要的朋友可以参考下
    2015-03-03
  • Python Pandas中布尔索引的用法详解

    Python Pandas中布尔索引的用法详解

    布尔索引是一种使用 DataFrame 中数据的实际值的索引。本文将通过一些示例为大家详细讲讲Python中布尔索引的用法,需要的可以参考一下
    2022-08-08
  • python中的测试框架

    python中的测试框架

    这篇文章主要介绍了python中测试框架的相关资料,帮助大家更好的理解和使用python进行测试,感兴趣的朋友可以了解下
    2020-11-11
  • 使用python写一个自动浏览文章的脚本实例

    使用python写一个自动浏览文章的脚本实例

    今天小编就为大家分享一篇使用python写一个自动浏览文章的脚本实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python实现将pdf文档保存成图片格式

    Python实现将pdf文档保存成图片格式

    有时候我们会碰到只支持图片上传的场景,如何编程快速将pdf转成图片呢?可以使用 Python 的 pdf2image 库仅10行代码就能将 PDF 文档保存为图片格式,所以本文给大家介绍了如何使用Python实现将pdf文档保存成图片格式,需要的朋友可以参考下
    2024-10-10

最新评论