name: PDF 处理 description: 从PDF文件中提取文本和表格,填充表单,合并文档。当处理PDF文件或用户提到PDFs、表单或文档提取时使用。
PDF 处理
快速开始
使用pdfplumber从PDF中提取文本:
import pdfplumber
with pdfplumber.open("document.pdf") as pdf:
text = pdf.pages[0].extract_text()
print(text)
提取表格
自动检测并从PDF中提取表格:
import pdfplumber
with pdfplumber.open("report.pdf") as pdf:
page = pdf.pages[0]
tables = page.extract_tables()
for table in tables:
for row in table:
print(row)
提取所有页面
高效处理多页文档:
import pdfplumber
with pdfplumber.open("document.pdf") as pdf:
full_text = ""
for page in pdf.pages:
full_text += page.extract_text() + "
"
print(full_text)
表单填充
对于PDF表单填充,请参阅FORMS.md获取完整指南,包括字段分析和验证。
合并PDFs
合并多个PDF文件:
from pypdf import PdfMerger
merger = PdfMerger()
for pdf in ["file1.pdf", "file2.pdf", "file3.pdf"]:
merger.append(pdf)
merger.write("merged.pdf")
merger.close()
拆分PDFs
提取特定页面或范围:
from pypdf import PdfReader, PdfWriter
reader = PdfReader("input.pdf")
writer = PdfWriter()
# 提取第2-5页
for page_num in range(1, 5):
writer.add_page(reader.pages[page_num])
with open("output.pdf", "wb") as output:
writer.write(output)
可用包
- pdfplumber - 文本和表格提取(推荐)
- pypdf - PDF操作、合并、拆分
- pdf2image - 将PDF转换为图像(需要poppler)
- pytesseract - 用于扫描PDF的OCR(需要tesseract)
常见模式
提取并保存文本:
import pdfplumber
with pdfplumber.open("input.pdf") as pdf:
text = "
".join(page.extract_text() for page in pdf.pages)
with open("output.txt", "w") as f:
f.write(text)
提取表格到CSV:
import pdfplumber
import csv
with pdfplumber.open("tables.pdf") as pdf:
tables = pdf.pages[0].extract_tables()
with open("output.csv", "w", newline="") as f:
writer = csv.writer(f)
for table in tables:
writer.writerows(table)
错误处理
处理常见PDF问题:
import pdfplumber
try:
with pdfplumber.open("document.pdf") as pdf:
if len(pdf.pages) == 0:
print("PDF没有页面")
else:
text = pdf.pages[0].extract_text()
if text is None or text.strip() == "":
print("页面不包含可提取文本(可能是扫描件)")
else:
print(text)
except Exception as e:
print(f"处理PDF时出错: {e}")
性能提示
- 对于大型PDF,分批处理页面
- 对于多个文件,使用多进程
- 仅提取所需页面而不是整个文档
- 使用后关闭PDF对象