教你用Python截图PDF并快速提取文本,建议收藏

今天我将分享Python截图PDF,在指定区域并提取文本

先说需求:PDF文件结构都一致,对于下图红框区域截图并提取文本
img

测试pdfplumber库

先试用一下pdfplumber看看能否提取出文本

import pdfplumber

with pdfplumber.open(“测试文档.pdf”) as p:

​ page = p.pages[0]

​ print(page.extract_text()

运行结果:

Date of Test : 2020-11-05 R

Test Engineer : ? e

s

KAYSER-THREDE Contact Name : WX u

l

00 EVAluation Version: 2.1.7 sample.def ta

1 n

t

0

8

Z0

Y, 6

X,

g] 40 1

n [ . P

o

ati20 ag

r

e e

cel o

ac0 f J

071H 7

-20 .0; Vo = 15 / 2020-11HEAD00ead Acce 822-75

0-40 3.889 m1-0500E2ACleration -HFC

1080 /s; M = 11 RA / CFC SP 1 Res A_202

g]60 60 kg 1000ultant 0_11_

t [ 0

n 5

ulta40 13

s

e _

r0 2

2 5

00

0 F

-200 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 rid

a

time [ms] y

, 6

.1

A1

Analysis Interval: 0 - 1000 [ms] naly.202

Max(61 ms) = 72 g; Min(4.3 ms) = 0.04043 g s0

cHoICn t=. A330m7 (s5(55.64. 6-1 6 -6 .539 m.61s )m; Hs)IC =3 665 =.7 340 g7; ( c5u5.m4 .- A 636m.3s m =s 7);0 H.1I8C g15 = 307 (55.4 - 66.3 ms) is: IA 11:2

T3

试用后发现,pdfplumber提取对这种存在旋转文字的pdf文字提取效果非常糟糕,即使是正常顺序的位置,也出现了交错现象。

通过PyMuPDF实现区域截图和区域文字提取

官方文档:https://pymupdf.readthedocs.io/en/latest/index.html

Github:https://github.com/pymupdf/PyMuPDF

安装:

pip install pymupdf

截图

先测试截取左下角的部分:

from IPython.display import oc = fitz.open(“测试文档.pdf”)

page = pdfDoc[0]

mat = fitz.Matrix(1, 1) # 1.5表示放大1.5倍

rect = page.rect

clip = fitz.Rect(0, 0.87*rect.height,

rect.width*0.8, rect.height)

pix = page.getPixmap(matrix=mat, alpha=False, clip=clip)

display(https://img-blog.csdnimg.cn/img_convert/4d9085e91f5bebc9cd34e7a25e3377fe.png)

- fitz.Matrix(1, 1)的两个参数表示宽度和高度的放大系数,上面的截的图较小可以通过该参数放大

- fitz.Rect有好几种坐标模式,我选择了(x0, y0, x1, y1)这种坐标模式来定位要截取的区域

- page.getPixmap传入放大系数和区域即可获取图片对象,可直接获取图片的数据也可以写入到文件保存起来

再测试截取右上角部分:

```python

clip = fitz.Rect(0.8rect.width, 0.27rect.height,

rect.width*0.9, rect.height)

pix = page.getPixmap(matrix=mat.preRotate(-90), alpha=False, clip=clip)

display(https://img-blog.csdnimg.cn/img_convert/a759983bd8b9da691e1572f310b673c8.png)

mat.preRotate(-90)实现了截取区域逆时针旋转90度。

保存图片很简单,只需调用write.write# 文字提取

通过fitz.Rect要提取文字的区域即可:

```python

a_text = page.getText(clip=clip)

print(a_text)

\1. Page of J7822-75-HFCA_2020_11_05 13_25

Head Acceleration SP 1 Resultant

11HEAD0000E2ACRA / CFC1000

75 / 2020-11-05

0.0; Vo = 13.889 m/s; M = 1160 kg

Friday, 6.11.2020 11:23

Analysis: IAT

这段文本提取的效果还不错!

再测试一下左下角部分:

img

clip = fitz.Rect(0, 0.87*rect.height,

rect.width*0.8, rect.height)

b_text = page.getText(clip=clip)

print(b_text)

Max(61 ms) = 72 g; Min(4.3 ms) = 0.04043 g

cont. A3ms(56.61 - 59.61 ms) = 65.74 g; cum. A3ms = 70.18 g

HIC = 307 (55.4 - 66.3 ms); HIC36 = 307 (55.4 - 66.3 ms); HIC15 = 307 (55.4 - 66.3 ms)

Analysis Interval: 0 - 1000 [ms]

文本行顺序处理

文字的行顺序似乎与原始图片的文本顺序不一致。不过我们可以借助pandas自定义排序,还原到一致的顺序。

importpandasaspd

tmp = pd.DataFrame(b_text.splitlines(), columns=[“a”])

tmp[“b”] = (tmp.a.str[:2]).astype(“category”)

tmp.b.cat.set_categories(

[‘An’,‘re’,‘vi’,‘Ma’,‘co’,‘VC’,‘ES’], inplace=True)

tmp.sort_values(‘b’, inplace=True)

b_text =‘\n’.join(tmp.a.to_list())

print(b_text)

Analysis Interval: 0 - 1000 [ms]

Max(61 ms) = 72 g; Min(4.3 ms) = 0.04043 g

cont. A3ms(56.61 - 59.61 ms) = 65.74 g; cum. A3ms = 70.18 g

HIC = 307 (55.4 - 66.3 ms); HIC36 = 307 (55.4 - 66.3 ms); HIC15 = 307 (55.4 - 66.3 ms)

前5页运行结果展示

img

\1. Page of J7822-75-HFCA_2020_11_05 13_25

Head Acceleration SP 1 Resultant

11HEAD0000E2ACRA / CFC1000

75 / 2020-11-05

0.0; Vo = 13.889 m/s; M = 1160 kg

Friday, 6.11.2020 11:23

Analysis: IAT

img

Analysis Interval: 0 - 1000 [ms]

Max(61 ms) = 72 g; Min(4.3 ms) = 0.04043 g

cont. A3ms(56.61 - 59.61 ms) = 65.74 g; cum. A3ms = 70.18 g

HIC = 307 (55.4 - 66.3 ms); HIC36 = 307 (55.4 - 66.3 ms); HIC15 = 307 (55.4 - 66.3 ms)

img

\2. Page of J7822-75-HFCA_2020_11_05 13_25

Head Acceleration X SP 1

11HEAD0000E2ACXA / CFC1000

75 / 2020-11-05

0.0; Vo = 13.889 m/s; M = 1160 kg

Friday, 6.11.2020 11:23

Analysis: IAT

img

Analysis Interval: 0 - 1000 [ms]

Max(65.5 ms) = 8.15 g; Min(52.2 ms) = -7.426 g

img

\3. Page of J7822-75-HFCA_2020_11_05 13_25

Head Acceleration Y SP 1

11HEAD0000E2ACYA / CFC1000

75 / 2020-11-05

0.0; Vo = 13.889 m/s; M = 1160 kg

Friday, 6.11.2020 11:23

Analysis: IAT

img

Analysis Interval: 0 - 1000 [ms]

Max(59.4 ms) = 71.87 g; Min(52 ms) = -9.89 g

img

\4. Page of J7822-75-HFCA_2020_11_05 13_25

Head Acceleration Z SP 1

11HEAD0000E2ACZA / CFC1000

75 / 2020-11-05

0.0; Vo = 13.889 m/s; M = 1160 kg

Friday, 6.11.2020 11:23

Analysis: IAT

img

Analysis Interval: 0 - 1000 [ms]

Max(56.5 ms) = 20.39 g; Min(63.6 ms) = -23.43 g

img

\5. Page of J7822-75-HFCA_2020_11_05 13_25

Rib Left Upper Displacement Y SP 1

11RIBSLEUPE2DSYC / CFC180

75 / 2020-11-05

0.0; Vo = 13.889 m/s; M = 1160 kg

Friday, 6.11.2020 11:23

Analysis: IAT

img

Analysis Interval: 0 - 1000 [ms]

Max(314.8 ms) = 0.2821 mm; Min(52.9 ms) = -33.24 mm

-END-


学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习、自动化测试带你从零基础系统性的学好Python!

👉[CSDN大礼包:《python安装工具&全套学习资料》免费分享]安全链接,放心点击

👉Python学习大礼包👈

在这里插入图片描述

👉Python学习路线汇总👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取哈)
在这里插入图片描述

👉Python必备开发工具👈

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python实战案例👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python书籍和视频合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

👉Python面试刷题👈

👉Python副业兼职路线👈

在这里插入图片描述
在这里插入图片描述
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以点击链接免费领取或者保存图片到wx扫描二v码免费领取保证100%免费

👉[CSDN大礼包:《python安装工具&全套学习资料》免费分享]安全链接,放心点击

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值