Pdf文件是我们日常工作中经常会遇到的一种文件格式,对于这种文件的提取 pdfplumber 库可以非常出色的完成处理工作,它是一个纯 Python 第三方库,适合 python 3.x 版本,通常用来查看pdf各类信息,能有效提取文本、表格,但不支持修改或生成pdf,也不支持对pdf扫描件的处理。下面就出表格、文本和图片的提取三方面进行说明。
1、表格提取:
下面是提取PDF文件内容中的表格,并保存到XLSX文件中,代码如下:
python
import pdfplumber
from openpyxl import load_workbook
import pandas as pd
i=0
with pdfplumber.open("d:\\待提取的PDF文件.pdf") as pdf:
print(len(pdf.pages))
for page in pdf.pages:
tables=page.extract_tables()
for table in tables:
i=i+1
df = pd.DataFrame(table)
df.to_excel(f'd:\\output{i}.xlsx', index=False)
def readExcels(excelname):
alldata = pd.DataFrame()
wb = load_workbook(excelname)
sheets = wb.sheetnames
for i in sheets:
#print(i)
df = pd.read_excel(excelname,sheet_name=i,engine='openpyxl',header=1)
alldata = alldata._append(df)
2、文本提取:
下面是提取PDF文件内容中的文字内容,并保存到txt文件中,代码如下:
python
import os
from pathlib import Path
import pdfplumber
def extract_text(pdf_path):
with pdfplumber.open(pdf_path) as pdf:
text = ""
for page in pdf.pages:
text += page.extract_text() + "\n"
return text
# 使用示例
pdf_path_name = "d:\\待提取PDF文件.pdf"
pdf_dirname = os.path.dirname(pdf_path_name)
extracted_text = extract_text(pdf_path_name)
with open(f'{pdf_dirname}/{Path(pdf_path_name).stem}.txt', 'w', encoding='utf-8') as f:
f.write(extracted_text)
f.close()
print(f'执行完毕!输出路径:{pdf_dirname}')
3、提取图片:
下面是提取PDF文件内容中的图片,并创建目录保存,代码如下:
python
import pdfplumber
import os
# 定义函数用于提取PDF中的图片并保存
def extract_images_from_pdf(pdf_file, output_folder):
# 创建输出文件夹,如果不存在的话
if not os.path.exists(output_folder):
os.makedirs(output_folder)
with pdfplumber.open(pdf_file) as pdf:
# 遍历每一页
for page_number, page in enumerate(pdf.pages, start=1):
print(f'页码:{page.page_number}')
print(f'页面宽度:{page.width}')
print(f'页面高度:{page.height}')
# 获取该页的所有图片
images = page.images
# 遍历该页的所有图片
for idx, image in enumerate(images, start=1):
# 获取图片的二进制数据
image_data = image['stream'].get_data()
# 构建图片文件名
image_filename = os.path.join(output_folder, f'image_{page_number}_{idx}.png')
# 保存图片到文件
with open(image_filename, 'wb') as f:
f.write(image_data)
print(f'图片已保存至:{image_filename}')
# 调用方法
pdf_file = 'd:\\待提取的PDF文件.pdf'
output_folder = 'extracted_images'
extract_images_from_pdf(pdf_file, output_folder)