如何高效从PDF中提取文本、表格及图片内容?

2026-06-07 13:491阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

先聊聊PDF到底是个啥

我好了。 说实话,PDF就像那种硬邦邦的文档砖墙。 跨平台、排版不跑位,谁用谁爱嗯。 可是它天生只读,想挖里面的宝藏——文字、表格、图片—— 就得动点手脚。 别慌,咱今天把这些“开锁”技巧全拆出来保证你看完能直接上手。

文本提取:从直接复制到OCR全覆盖

最简单的办法, 就是打开PDF全选Ctrl+C,然后粘进Word。 哈哈,这招对纯文字PDF真的管用。 但要是遇到排版乱七八糟,或者复制出来满是乱码,怎么办? 这时候就要请出OCR啦。

如何高效从PDF中提取文本、表格及图片内容?

客观地说... 常见的Python库有pdfplumber和pytesseract配合使用。

import pdfplumber
from PIL import Image
import pytesseract
def extract_text:
    texts = 
    with pdfplumber.open as pdf:
        for page in pdf.pages:
            # 先尝试直接抓文字
            txt = page.extract_text
            if txt:
                texts.append
            else:
                # 没有可选文字, 用截图+OCR
                img = page.to_image.original
                ocr_txt = pytesseract.image_to_string
                texts.append
    return "
".join

代码里先抢一波可直接抽的文字,抽不到再让OCR来救场。 不对不对,我忘了说要装好tesseract可施行文件,你懂的,那玩意儿得先装好才能跑。

小技巧:只提取页面局部

有时候只想要左上角那块标题。 Spire.PDF这类库都支持矩形区域提取。

# 假设使用Spire.PDF
from spire.pdf import PdfDocument, PdfTextExtractor, PdfTextExtractOptions
from spire.pdf.common import RectangleF
doc = PdfDocument
doc.LoadFromFile
page = doc.Pages
extractor = PdfTextExtractor
options = PdfTextExtractOptions
options.ExtractArea = RectangleF   # x,y,w,h
text = extractor.ExtractText
print

表格提取:别让数据变成“一锅粥”

PDF里的表格往往没有真实的单元格结构,只是靠文字间距排版。 直接copy粘进Excel,后来啊行列乱套,那叫一个尴尬。 这里推荐两条路:一条是专门识别表格线条的库;另一条是把文字按空白划分,再自行拼装,纯正。。

用pdfplumber抓表格

换个角度看.… pdfplumber自带表格检测功能,用起来比我想象中还顺手。

import pdfplumber
import csv
def pdf_table_to_csv:
    with pdfplumber.open as pdf:
        page = pdf.pages          # 假设只要第一页
        table = page.extract_table
        if table:
            with open as f:
                writer = csv.writer
                writer.writerows
pdf_table_to_csv

如果表格里有合并单元格或斜线, 那就可能抓不到,这时候可以调节参数或者改用下面的方法。

Spire.PDF深度表格抽取

这个库能遍历每个单元格, 把文本逐个写进Excel工作簿,灵活度满分。

from spire.pdf import PdfDocument
from spire.pdf.common import *
from spire.xls import Workbook
doc = PdfDocument
doc.LoadFromFile
extractor = doc.TableExtractor   # 假设有这个属性
wb = Workbook
wb.Worksheets.Clear
for i in range:
    tables = extractor.ExtractTable
    if tables:
        for tbl in tables:
            sheet = wb.Worksheets.Add
            rows = tbl.GetRowCount
            cols = tbl.GetColumnCount
            for r in range:
                for c in range:
                    txt = tbl.GetText
                    sheet.Range.Value2 = txt
wb.SaveToFile
doc.Close

我血槽空了。 看着代码有点长?别怕,你可以把它封装成函数,然后循环文件夹批量搞定。

如何高效从PDF中提取文本、表格及图片内容?

图片提取:把高质量素材搬出来

设计师们常说:“图少了项目难推进”。 PDF里埋着的大图、 闹笑话。 logo甚至矢量图,都能一次性导出。

Spire.PDF图片助手示例

from spire.pdf import PdfDocument
from spire.pdf.common import *
doc = PdfDocument
doc.LoadFromFile
helper = doc.ImageHelper
img_idx = 0
for i in range:
    imgs_info = helper.GetImagesInfo
    for info in imgs_info:
        img_idx += 1
        out_name = f'img_{img_idx}.png'
        info.Image.Save   # 自动保存为PNG
        print
doc.Close

这么干, 你根本不用截图,也不担心分辨率缩水。 如果你的PDF是扫描件, 我始终觉得... 那图片其实就是整页扫描图,这时候先走OCR再切割会更靠谱。

自动化批处理:一次性搞定千文件

手动点几下太慢?我们来写个“遍历文件夹+自动分类”的脚本吧,等..….。

import os
from spire.pdf import PdfDocument
def batch_extract:
    if not os.path.isdir:
        os.makedirs
    for file in os.listdir:
        if not file.lower.endswith:
            continue
        src_path = os.path.join
        name_no_ext = os.path.splitext
        dst_folder = os.path.join
        os.makedirs
        doc = PdfDocument
        doc.LoadFromFile
        # 提取文本
        txt_all = 
        for p in range:
            txt_all.append)
        with open,'w',encoding='utf-8') as f:
            f.write)
        # 提取图片
        helper=doc.ImageHelper
        img_cnt=0
        for p in range:
            infos=helper.GetImagesInfo
            for info in infos:
                img_cnt+=1
                img_path=os.path.join
                info.Image.Save
        doc.Close
        print
batch_extract

运行完后 你会在extracted目录下看到每个PDF对应的子文件夹,里面放着text.txt和若干png。 害, 这段代码里用了Spire自带的页面文字抽取方法,如果你用的是pdfplumber,只要把对应调用换掉即可——很灵活,极度舒适。。

实战小贴士:别让细节拖慢效率

  • - 把常用路径写进环境变量, 免得每次敲长串路径;
  • - 批量处理前先跑一次小样本,确认编码和空行情况;
  • - 对于中文OCR记得加上lang='chi_sim',不然只能识别英文;
  • - 如果遇到加密PDF,需要提前解密,否则库会报错——记得找密码或使用娱乐工具。
  • - 导出的CSV如果出现多余引号,用Excel打开后另存为UTF‑8即可解决乱码问题。

从“只读”到“可编辑”,一步到位

总算说完了吧?哈哈, 一下:

文本——优先直接抽,不行再走OCR; 表格——先试pdfplumber,再需要精准结构时选Spire; 图片——Spire.ImageHelper秒出高清素材; 批量——写个遍历脚本,一键搞定上千份文档,瞎扯。。

)

标签:表格

先聊聊PDF到底是个啥

我好了。 说实话,PDF就像那种硬邦邦的文档砖墙。 跨平台、排版不跑位,谁用谁爱嗯。 可是它天生只读,想挖里面的宝藏——文字、表格、图片—— 就得动点手脚。 别慌,咱今天把这些“开锁”技巧全拆出来保证你看完能直接上手。

文本提取:从直接复制到OCR全覆盖

最简单的办法, 就是打开PDF全选Ctrl+C,然后粘进Word。 哈哈,这招对纯文字PDF真的管用。 但要是遇到排版乱七八糟,或者复制出来满是乱码,怎么办? 这时候就要请出OCR啦。

如何高效从PDF中提取文本、表格及图片内容?

客观地说... 常见的Python库有pdfplumber和pytesseract配合使用。

import pdfplumber
from PIL import Image
import pytesseract
def extract_text:
    texts = 
    with pdfplumber.open as pdf:
        for page in pdf.pages:
            # 先尝试直接抓文字
            txt = page.extract_text
            if txt:
                texts.append
            else:
                # 没有可选文字, 用截图+OCR
                img = page.to_image.original
                ocr_txt = pytesseract.image_to_string
                texts.append
    return "
".join

代码里先抢一波可直接抽的文字,抽不到再让OCR来救场。 不对不对,我忘了说要装好tesseract可施行文件,你懂的,那玩意儿得先装好才能跑。

小技巧:只提取页面局部

有时候只想要左上角那块标题。 Spire.PDF这类库都支持矩形区域提取。

# 假设使用Spire.PDF
from spire.pdf import PdfDocument, PdfTextExtractor, PdfTextExtractOptions
from spire.pdf.common import RectangleF
doc = PdfDocument
doc.LoadFromFile
page = doc.Pages
extractor = PdfTextExtractor
options = PdfTextExtractOptions
options.ExtractArea = RectangleF   # x,y,w,h
text = extractor.ExtractText
print

表格提取:别让数据变成“一锅粥”

PDF里的表格往往没有真实的单元格结构,只是靠文字间距排版。 直接copy粘进Excel,后来啊行列乱套,那叫一个尴尬。 这里推荐两条路:一条是专门识别表格线条的库;另一条是把文字按空白划分,再自行拼装,纯正。。

用pdfplumber抓表格

换个角度看.… pdfplumber自带表格检测功能,用起来比我想象中还顺手。

import pdfplumber
import csv
def pdf_table_to_csv:
    with pdfplumber.open as pdf:
        page = pdf.pages          # 假设只要第一页
        table = page.extract_table
        if table:
            with open as f:
                writer = csv.writer
                writer.writerows
pdf_table_to_csv

如果表格里有合并单元格或斜线, 那就可能抓不到,这时候可以调节参数或者改用下面的方法。

Spire.PDF深度表格抽取

这个库能遍历每个单元格, 把文本逐个写进Excel工作簿,灵活度满分。

from spire.pdf import PdfDocument
from spire.pdf.common import *
from spire.xls import Workbook
doc = PdfDocument
doc.LoadFromFile
extractor = doc.TableExtractor   # 假设有这个属性
wb = Workbook
wb.Worksheets.Clear
for i in range:
    tables = extractor.ExtractTable
    if tables:
        for tbl in tables:
            sheet = wb.Worksheets.Add
            rows = tbl.GetRowCount
            cols = tbl.GetColumnCount
            for r in range:
                for c in range:
                    txt = tbl.GetText
                    sheet.Range.Value2 = txt
wb.SaveToFile
doc.Close

我血槽空了。 看着代码有点长?别怕,你可以把它封装成函数,然后循环文件夹批量搞定。

如何高效从PDF中提取文本、表格及图片内容?

图片提取:把高质量素材搬出来

设计师们常说:“图少了项目难推进”。 PDF里埋着的大图、 闹笑话。 logo甚至矢量图,都能一次性导出。

Spire.PDF图片助手示例

from spire.pdf import PdfDocument
from spire.pdf.common import *
doc = PdfDocument
doc.LoadFromFile
helper = doc.ImageHelper
img_idx = 0
for i in range:
    imgs_info = helper.GetImagesInfo
    for info in imgs_info:
        img_idx += 1
        out_name = f'img_{img_idx}.png'
        info.Image.Save   # 自动保存为PNG
        print
doc.Close

这么干, 你根本不用截图,也不担心分辨率缩水。 如果你的PDF是扫描件, 我始终觉得... 那图片其实就是整页扫描图,这时候先走OCR再切割会更靠谱。

自动化批处理:一次性搞定千文件

手动点几下太慢?我们来写个“遍历文件夹+自动分类”的脚本吧,等..….。

import os
from spire.pdf import PdfDocument
def batch_extract:
    if not os.path.isdir:
        os.makedirs
    for file in os.listdir:
        if not file.lower.endswith:
            continue
        src_path = os.path.join
        name_no_ext = os.path.splitext
        dst_folder = os.path.join
        os.makedirs
        doc = PdfDocument
        doc.LoadFromFile
        # 提取文本
        txt_all = 
        for p in range:
            txt_all.append)
        with open,'w',encoding='utf-8') as f:
            f.write)
        # 提取图片
        helper=doc.ImageHelper
        img_cnt=0
        for p in range:
            infos=helper.GetImagesInfo
            for info in infos:
                img_cnt+=1
                img_path=os.path.join
                info.Image.Save
        doc.Close
        print
batch_extract

运行完后 你会在extracted目录下看到每个PDF对应的子文件夹,里面放着text.txt和若干png。 害, 这段代码里用了Spire自带的页面文字抽取方法,如果你用的是pdfplumber,只要把对应调用换掉即可——很灵活,极度舒适。。

实战小贴士:别让细节拖慢效率

  • - 把常用路径写进环境变量, 免得每次敲长串路径;
  • - 批量处理前先跑一次小样本,确认编码和空行情况;
  • - 对于中文OCR记得加上lang='chi_sim',不然只能识别英文;
  • - 如果遇到加密PDF,需要提前解密,否则库会报错——记得找密码或使用娱乐工具。
  • - 导出的CSV如果出现多余引号,用Excel打开后另存为UTF‑8即可解决乱码问题。

从“只读”到“可编辑”,一步到位

总算说完了吧?哈哈, 一下:

文本——优先直接抽,不行再走OCR; 表格——先试pdfplumber,再需要精准结构时选Spire; 图片——Spire.ImageHelper秒出高清素材; 批量——写个遍历脚本,一键搞定上千份文档,瞎扯。。

)

标签:表格