在python中有许多开源的库可以处理Pdf文档,最常用的Pypdf2库可以读取文档,合并,分割pdf文档,但是也有局限性:
无法提取文档中的文字
提取PDF文字需要使用另外的库,如pdfplumbe
提取PDF中的图片需要使用fitz库
使用pdfplumbe提取文字
pdfplumbe使用可以用来解析PDF文件,获取其文本内容、标题、表格等的开源工具;
开源代码地址:https://github.com/jsvine/pdfplumber
安装pdfplumbe:
pip install pdfplumbe
引入:
import pdfplumbe
简单使用代码示例:
filepath = 'H:/test_w.pdf'
def extract_text_info(filepath):
"""
提取PDF中的文字
@param filepath:文件路径
@return:
"""
with pdfplumber.open(filepath) as pdf:
# 获取第2页数据
page = pdf.pages[3]
print(page.extract_text()) #提取文字
table = page.extract_tables() #提取表格
print(table)
for row in table:
print(row)
pdfplumber提供了两种读取pdf的方式:
pdfplumber.open("path/to/file.pdf")
pdfplumber.load(file_like_object)
这两种方法都返回pdfplumber.PDF类的实例(instance)。
加载带密码的pdf需要传入参数password,例如:
pdfplumber.open("file.pdf", password = "test")
fitz的简单使用
使用fitz需要同时安装fitz和PyMuPDF,否则会报错
安装:
pip install fitz PyMupdf
引入:
import fitz
使用fitz将pdf转为图片:
def pdf2img():
import fitz
'''pdf转图片'''
with fitz.open(filepath) as doc:
for page in doc:
mat = fitz.Matrix(2,2)
pix = page.get_pixmap(matrix= mat)
pix.save(f'H:/{page.number}.png')
使用fitz转换图片
使用fitz添加pdf的文本注释
def update():
import fitz
'''添加文本注释为关键词添加高亮、删除线、下划线注释'''
word1,word2,word3 = ('高亮','删除线','注释')
with fitz.open(filepath) as doc:
for page in doc:
page.add_text_annot((200,200),'文本注释')
for txt in page.search_for(word1):
page.add_highlight_annot(txt)
for txt in page.search_for(word2):
page.add_strikeout_annot(txt)
for txt in page.search_for(word3):
page.add_underline_annot(txt)
doc.save('H:\\添加注释.pdf')