Python主流处理PDF的库总结对比(包含详细示例)
库名 | 主要用途 | 主要功能 | 安装命令 |
---|---|---|---|
PyPDF2 | 操作和合并PDF | 拆分、合并、旋转、裁剪PDF页面,提取文本和元数据 | pip install PyPDF2 |
pdfminer.six | 提取PDF文本 | 高精度提取文本、图像和表格,支持复杂布局和字体 | pip install pdfminer.six |
ReportLab | 生成PDF文件 | 创建包含文本、图像、图形和表格的复杂PDF文档 | pip install reportlab |
PyMuPDF | 读取和操作PDF | 提取文本和图像,处理页面、注释和书签,渲染PDF页面 | pip install PyMuPDF |
pdfplumber | 提取表格和文本 | 高精度提取和分析PDF中的表格和文本 | pip install pdfplumber |
Camelot | 提取PDF表格 | 高精度表格检测和提取,导出为CSV、Excel、JSON等格式 | pip install camelot-py[cv] |
tabula-py | 提取PDF表格 | 基于Java库tabula,提取表格为DataFrame或CSV | pip install tabula-py |
Slate | 提取PDF文本 | 基于pdfminer的简单文本提取工具 | pip install slate |
pdfquery | 高级文本提取 | 结合PDFMiner和lxml,支持复杂查询和文本提取 | pip install pdfquery |
PDFKit | HTML转PDF | 将HTML文档转换为PDF,基于wkhtmltopdf工具 | pip install pdfkit |
pdf2image | PDF转图像 | 使用poppler将PDF页面转换为PIL图像对象 | pip install pdf2image |
详细示例
1. PyPDF2
用途: 操作和合并PDF
import PyPDF2
# 读取PDF文件
with open('sample.pdf', 'rb') as file:
reader = PyPDF2.PdfFileReader(file)
# 提取第一页文本
page = reader.getPage(0)
print(page.extract_text())
# 合并PDF文件
merger = PyPDF2.PdfFileMerger()
merger.append('sample1.pdf')
merger.append('sample2.pdf')
merger.write('merged.pdf')
2. pdfminer.six
用途: 提取PDF文本
from pdfminer.high_level import extract_text
# 提取文本
text = extract_text('sample.pdf')
print(text)
3. ReportLab
用途: 生成PDF文件
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
# 创建PDF
c = canvas.Canvas('generated.pdf', pagesize=letter)
c.drawString(100, 750, 'Hello, World!')
c.save()
4. PyMuPDF (fitz)
用途: 读取和操作PDF
import fitz
# 读取PDF文件
document = fitz.open('sample.pdf')
page = document.load_page(0)
text = page.get_text()
print(text)
# 提取图像
for img in document.get_page_images(0):
xref = img[0]
pix = fitz.Pixmap(document, xref)
if pix.n < 5: # this is GRAY or RGB
pix.save(f'image_{xref}.png')
else: # CMYK: convert to RGB first
pix1 = fitz.Pixmap(fitz.csRGB, pix)
pix1.save(f'image_{xref}.png')
pix1 = None
pix = None
5. pdfplumber
用途: 提取表格和文本
import pdfplumber
# 读取PDF文件
with pdfplumber.open('sample.pdf') as pdf:
page = pdf.pages[0]
text = page.extract_text()
print(text)
# 提取表格
tables = page.extract_tables()
for table in tables:
for row in table:
print(row)
6. Camelot
用途: 提取PDF表格
import camelot
# 提取表格
tables = camelot.read_pdf('sample.pdf', pages='1')
tables[0].to_csv('table.csv')
7. tabula-py
用途: 提取PDF表格
import tabula
# 提取表格
df = tabula.read_pdf('sample.pdf', pages='1')
df.to_csv('table.csv', index=False)
# 批量提取表格
tabula.convert_into('sample.pdf', 'tables.csv', output_format='csv', pages='all')
8. Slate
用途: 提取PDF文本
import slate
# 读取PDF文件
with open('sample.pdf', 'rb') as file:
doc = slate.PDF(file)
for page in doc:
print(page)
9. pdfquery
用途: 高级文本提取
import pdfquery
# 读取PDF文件
pdf = pdfquery.PDFQuery('sample.pdf')
pdf.load(0)
text = pdf.pq('LTTextLineHorizontal:contains("text_to_find")').text()
print(text)
10. PDFKit
用途: HTML转PDF
import pdfkit
# HTML转PDF
pdfkit.from_url('http://example.com', 'out.pdf')
pdfkit.from_file('test.html', 'out.pdf')
pdfkit.from_string('Hello, World!', 'out.pdf')
11. pdf2image
用途: PDF转图像
from pdf2image import convert_from_path
# PDF转图像
images = convert_from_path('sample.pdf')
for i, image in enumerate(images):
image.save(f'page_{i+1}.png', 'PNG')
作者:DEV.IN.