| name | wps-pdf-extract |
| description | PDF文字表格提取。PDF里的表格死活复制不出来?帮你把PDF中的文字、表格、
图片提取出来,文字转Word,表格转Excel,图片导出到文件夹。
用于帮助用户从PDF中提取内容。当用户提到PDF提取、PDF转Word、PDF表格时触发。
Extracts text, tables, and images from PDFs into editable formats.
|
| license | MIT |
| user-invocable | true |
| argument-hint | [PDF文件路径] |
| allowed-tools | Read, Grep, Glob, Bash, Write, Edit |
| metadata | {"author":"BWKYD","title":"PDF内容提取","description_zh":"从PDF中提取文字、表格和图片,转成Word或Excel格式","tags":["PDF","提取","转换","表格","WPS"],"version":"1.0.1","license":"MIT"} |
PDF内容提取工具
PDF → 提取文字/表格/图片 → 转为可编辑的Word/Excel。
告别"PDF里的表格复制不出来"的痛苦。
When to Use
- 从PDF中提取文字内容
- 提取PDF中的表格到Excel
- 提取PDF中的图片
- PDF转可编辑Word
- 用户说"PDF里的表格怎么弄出来""PDF转Word"
When NOT to Use
- PDF合并/拆分 → 使用
wps-pdf-merge-split
- PDF加水印 → 使用
wps-watermark
工作流程
Step 1: 诊断PDF类型
PDF类型判断:
├─ 文字型PDF(可选中文字)→ 直接提取
├─ 扫描型PDF(图片)→ 需要OCR → 提示用户
└─ 混合型(部分文字部分图片)→ 分别处理
Step 2: 提取内容
import fitz
import pdfplumber
from docx import Document
from openpyxl import Workbook
import os
class PDFExtractor:
"""PDF内容提取器"""
def __init__(self, pdf_path):
self.pdf_path = pdf_path
self.doc = fitz.open(pdf_path)
def extract_text(self, pages=None):
"""提取全部文字"""
text = []
page_range = pages or range(len(self.doc))
for i in page_range:
page = self.doc[i]
text.append(page.get_text())
return '\n'.join(text)
def extract_tables(self, pages=None):
"""提取表格(使用pdfplumber)"""
tables = []
with pdfplumber.open(self.pdf_path) as pdf:
page_range = pages or range(len(pdf.pages))
for i in page_range:
page_tables = pdf.pages[i].extract_tables()
t page_tables:
tables.append({
: i + ,
: t,
})
tables
():
os.makedirs(output_dir, exist_ok=)
images = []
i, page (.doc):
j, img (page.get_images(full=)):
xref = img[]
pix = fitz.Pixmap(.doc, xref)
pix.n < :
img_path = os.path.join(output_dir, )
pix.save(img_path)
:
pix = fitz.Pixmap(fitz.csRGB, pix)
img_path = os.path.join(output_dir, )
pix.save(img_path)
images.append(img_path)
images
():
doc = Document()
i, page (.doc):
i > :
doc.add_page_break()
text = page.get_text()
block (text, key= b: (b[], b[])):
block[] == :
para = doc.add_paragraph(block[].strip())
doc.save(output_path)
os.path.abspath(output_path)
():
tables = .extract_tables()
tables:
wb = Workbook()
idx, table (tables):
ws = wb.active idx == wb.create_sheet()
ws.title =
row_idx, row (table[], ):
col_idx, cell (row, ):
ws.cell(row=row_idx, column=col_idx,
value=cell cell )
wb.save(output_path)
os.path.abspath(output_path)
():
.doc.close()
Step 3: 智能处理
提取策略:
1. 先尝试直接提取文字 → 检查是否有内容
2. 如果文字为空 → 判断为扫描件 → 提示需要OCR
3. 表格优先用pdfplumber → 表格识别率更高
4. 图片用PyMuPDF → 可提取嵌入的原始图片
Step 4: 交付
- 文字提取 → 输出.docx或.txt
- 表格提取 → 输出.xlsx(每个表格一个sheet)
- 图片提取 → 输出到文件夹
- 报告提取结果(页数、表格数、图片数)
常见问题处理
Q: PDF转Word后格式乱了?
A: PDF本质是"画"出来的,不是"排版"出来的。
完美还原几乎不可能,建议提取文字后重新排版。
Q: 表格提取不完整?
A: 1. 检查PDF中表格是否有完整边框线
2. 尝试调整pdfplumber的table_settings参数
3. 无边框表格识别率较低
Q: 中文乱码?
A: 1. PDF可能使用了嵌入字体
2. 尝试 page.get_text("text") 替代默认模式
3. 扫描件需要OCR(推荐用WPS自带的OCR功能)
示例
/wps-pdf-extract 把report.pdf的文字提取出来转成Word
/wps-pdf-extract 提取financial_report.pdf里的所有表格到Excel
/wps-pdf-extract 把这个PDF里的图片都提取出来