一、第三方库介绍
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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论