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.

物联沃分享整理
物联沃-IOTWORD物联网 » Python主流处理PDF的库总结对比(包含详细示例)

发表回复