agentsclimarketplace

Wps pdf extract

Skill Bwkyd/wps-skills/skills/wps-pdf-extract

42个WPS办公技能,一键安装全搞定。写公文、做报表、排论文、做PPT、算工资、生成合同....覆盖你80%的日常办公场景,让WPS变成你的智能助手。

Install
npx -y skills add Bwkyd/wps-skills --skill wps-pdf-extract

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 5 stars5 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

PDF文字表格提取。PDF里的表格死活复制不出来?帮你把PDF中的文字、表格、 图片提取出来,文字转Word,表格转Excel,图片导出到文件夹。 用于帮助用户从PDF中提取内容。当用户提到PDF提取、PDF转Word、PDF表格时触发。 Extracts text, tables, and images from PDFs into editable formats.

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

5.8 KB, as published. Nobody here has run it

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: 提取内容

# 安装依赖
# pip install PyMuPDF pdfplumber python-docx openpyxl

import fitz  # PyMuPDF
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()
                for t in page_tables:
                    tables.append({
                        'page': i + 1,
                        'data': t,
                    })
        return tables

    def extract_images(self, output_dir):
        """提取图片"""
        os.makedirs(output_dir, exist_ok=True)
        images = []
        for i, page in enumerate(self.doc):
            for j, img in enumerate(page.get_images(full=True)):
                xref = img[0]
                pix = fitz.Pixmap(self.doc, xref)
                if pix.n < 5:  # GRAY or RGB
                    img_path = os.path.join(output_dir, f'page{i+1}_img{j+1}.png')
                    pix.save(img_path)
                else:  # CMYK
                    pix = fitz.Pixmap(fitz.csRGB, pix)
                    img_path = os.path.join(output_dir, f'page{i+1}_img{j+1}.png')
                    pix.save(img_path)
                images.append(img_path)
        return images

    def to_word(self, output_path):
        """转换为Word文档"""
        doc = Document()
        for i, page in enumerate(self.doc):
            if i > 0:
                doc.add_page_break()
            text = page.get_text("blocks")
            for block in sorted(text, key=lambda b: (b[1], b[0])):
                if block[6] == 0:  # text block
                    para = doc.add_paragraph(block[4].strip())
        doc.save(output_path)
        return os.path.abspath(output_path)

    def tables_to_excel(self, output_path):
        """表格导出为Excel"""
        tables = self.extract_tables()
        if not tables:
            return None

        wb = Workbook()
        for idx, table in enumerate(tables):
            ws = wb.active if idx == 0 else wb.create_sheet()
            ws.title = f"表格{idx+1}_P{table['page']}"
            for row_idx, row in enumerate(table['data'], 1):
                for col_idx, cell in enumerate(row, 1):
                    ws.cell(row=row_idx, column=col_idx,
                            value=cell if cell else '')

        wb.save(output_path)
        return os.path.abspath(output_path)

    def close(self):
        self.doc.close()

Step 3: 智能处理

提取策略:
1. 先尝试直接提取文字 → 检查是否有内容
2. 如果文字为空 → 判断为扫描件 → 提示需要OCR
3. 表格优先用pdfplumber → 表格识别率更高
4. 图片用PyMuPDF → 可提取嵌入的原始图片

Step 4: 交付

  1. 文字提取 → 输出.docx或.txt
  2. 表格提取 → 输出.xlsx(每个表格一个sheet)
  3. 图片提取 → 输出到文件夹
  4. 报告提取结果(页数、表格数、图片数)

常见问题处理

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里的图片都提取出来

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.