本文目录导读:

我来详细介绍几种读取PDF内容的Python方法:
使用 PyPDF2(推荐)
import PyPDF2
def read_pdf_pypdf2(file_path):
"""使用PyPDF2读取PDF文件"""
try:
with open(file_path, 'rb') as file:
pdf_reader = PyPDF2.PdfReader(file)
text = ""
# 遍历每一页
for page_num in range(len(pdf_reader.pages)):
page = pdf_reader.pages[page_num]
text += f"\n--- 第 {page_num + 1} 页 ---\n"
text += page.extract_text()
return text
except Exception as e:
return f"读取失败: {str(e)}"
# 使用示例
content = read_pdf_pypdf2("example.pdf")
print(content)
使用 pdfplumber(表格效果好)
import pdfplumber
def read_pdf_plumber(file_path):
"""使用pdfplumber读取PDF文件"""
try:
text = ""
with pdfplumber.open(file_path) as pdf:
for i, page in enumerate(pdf.pages):
text += f"\n--- 第 {i + 1} 页 ---\n"
text += page.extract_text()
# 如果需要提取表格
tables = page.extract_tables()
if tables:
text += "表格内容:\n"
for table in tables:
for row in table:
text += " | ".join(row) + "\n"
return text
except Exception as e:
return f"读取失败: {str(e)}"
# 使用示例
content = read_pdf_plumber("example.pdf")
print(content)
使用 pdfminer.six(功能最全)
from pdfminer.high_level import extract_text
from pdfminer.layout import LAParams
def read_pdf_pdfminer(file_path):
"""使用pdfminer读取PDF文件"""
try:
laparams = LAParams()
text = extract_text(file_path, laparams=laparams)
return text
except Exception as e:
return f"读取失败: {str(e)}"
# 使用示例
content = read_pdf_pdfminer("example.pdf")
print(content)
高级功能:处理扫描版PDF
对于扫描版PDF(图片格式),需要先用OCR识别:
import pytesseract
from pdf2image import convert_from_path
from PIL import Image
def read_scanned_pdf(file_path, language='chi_sim'):
"""读取扫描版PDF(需要安装tesseract-ocr)"""
try:
# 将PDF转换为图片
images = convert_from_path(file_path)
text = ""
for i, image in enumerate(images):
text += f"\n--- 第 {i + 1} 页 ---\n"
# OCR识别
page_text = pytesseract.image_to_string(image, lang=language)
text += page_text
return text
except Exception as e:
return f"读取失败: {str(e)}"
# 使用示例
content = read_scanned_pdf("scanned_doc.pdf")
完整的实用函数
import PyPDF2
import os
class PDFReader:
"""PDF读取器类"""
def __init__(self, file_path):
self.file_path = file_path
self.validate_file()
def validate_file(self):
"""验证文件是否存在"""
if not os.path.exists(self.file_path):
raise FileNotFoundError(f"文件不存在: {self.file_path}")
if not self.file_path.lower().endswith('.pdf'):
raise ValueError("文件不是PDF格式")
def read_all(self):
"""读取所有内容"""
return self.read_pages()
def read_pages(self, start_page=1, end_page=None):
"""读取指定页面的内容"""
try:
with open(self.file_path, 'rb') as file:
pdf_reader = PyPDF2.PdfReader(file)
total_pages = len(pdf_reader.pages)
# 设置页码范围
if end_page is None or end_page > total_pages:
end_page = total_pages
text = ""
for page_num in range(start_page - 1, end_page):
page = pdf_reader.pages[page_num]
text += f"\n--- 第 {page_num + 1} 页 ---\n"
text += page.extract_text() + "\n"
return text
except Exception as e:
return f"读取失败: {str(e)}"
def get_metadata(self):
"""获取PDF元数据"""
try:
with open(self.file_path, 'rb') as file:
pdf_reader = PyPDF2.PdfReader(file)
meta = pdf_reader.metadata
return {
'标题': meta.get('/Title', '无'),
'作者': meta.get('/Author', '无'),
'主题': meta.get('/Subject', '无'),
'页数': len(pdf_reader.pages),
'是否加密': pdf_reader.is_encrypted
}
except Exception as e:
return f"获取元数据失败: {str(e)}"
# 使用示例
if __name__ == "__main__":
# 基本使用
reader = PDFReader("document.pdf")
# 读取所有内容
full_text = reader.read_all()
print(full_text[:500]) # 打印前500个字符
# 读取指定页面
page_1_3 = reader.read_pages(1, 3)
print(page_1_3)
# 获取元数据
metadata = reader.get_metadata()
for key, value in metadata.items():
print(f"{key}: {value}")
安装依赖
# 基础版本 pip install PyPDF2 # 更好的表格处理 pip install pdfplumber # 功能最全 pip install pdfminer.six # OCR功能(扫描版PDF) pip install pytesseract pdf2image # Windows下需要安装tesseract-ocr # 下载地址:https://github.com/UB-Mannheim/tesseract/wiki
选择建议
| 库名 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| PyPDF2 | 简单易用,无需依赖 | 中文支持一般 | 简单文本提取 |
| pdfplumber | 表格处理优秀 | 速度较慢 | 需要处理表格 |
| pdfminer.six | 功能全面,布局准确 | 安装包较大 | 复杂布局文档 |
| pdf2image+OCR | 支持扫描版 | 需要安装OCR引擎 | 图片型PDF |
选择哪个库主要取决于你的PDF类型和需求,对于大多数场景,推荐使用 PyPDF2 或 pdfplumber。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播