思路是这样的:
pdf -> image -> 识别其中的图表 -> 通过PIL截取图片
1
整个过程尝试了很多方式,最终效果不是很完美,还需要继续探索
包括以下开源库
Tabula
前端截图提取表格数据,效果还可以,使用简单
使用步骤:
下载
https://tabula.technology/
启动 Tabula
打开 http://localhost:8080
如果是安装python的第三方模块,使用命令:
pip install tabula-py
1
ImageMagick
可以进行图片格式转换,pdf转图片
1、安装ImageMagick
mac
brew install ImageMagick
1
Linux
yum install ImageMagick # 安装
yum remove ImageMagick # 卸载
1
2
3
或者:
官网下载对应平台的压缩包:
https://www.imagemagick.org/script/download.php
2、安装ghostscript:
brew install ghostscript
配置ImageMagick环境变量vim ~/.bash_profile
export MAGICK_HOME=/Users/qmp/Applications/ImageMagick-7.0.8
export PATH="$MAGICK_HOME/bin:$PATH"
export DYLD_LIBRARY_PATH="$MAGICK_HOME/lib/"
1
2
3
source ~/.bash_profile
命令行测试
convert -version
convert a.jpg a.png
convert -limit thread 1 names.pdf -background white -alpha remove -colorspace RGB -colorspace sRGB out.jpg
1
2
3
4
5
提高图片质量
$ convert -density 300 -quality 100 test.pdf 1.png
1
参数解析:
-density 300
图像每英寸面积内的像素点数,数值越高图片质量越高
-quality 100
这个为转换png时的压缩率,100表示不压缩
参数设置:
https://www.imagemagick.org/www/script/convert.php
python库wand
支持ImageMagick接口,只支持6版本,而ImageMagick最新为7版本,Mac上尝试安装不成功
http://docs.wand-py.org/
网络资源
pdf转图片:
http://app.xunjiepdf.com/pdf2jpg
http://pdftoword.55.la/pdf-to-jpg/
百度ai通用图像分析:
https://ai.baidu.com/tech/imagerecognition/general
完整过程
先使用ImageMagick将pdf文件转为png图片格式
import os
pdfname = "names.pdf"
os.makedirs("out", exist_ok=True)
cmd = (
"source ~/.bash_profile; "
"convert "
"-limit thread 1 {} "
"-background white "
"-alpha remove "
"-colorspace RGB "
"-colorspace sRGB "
"out/out.jpg"
).format(pdfname)
result = os.popen(cmd)
print(result.read())
-
通过百度AI接口将图片中的主物体识别出来,获取坐标
from aip import AipImageClassify
""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'
filename = "name.png"
client = AipImageClassify(APP_ID, API_KEY, SECRET_KEY)
with open(filename, "rb") as f:
image = f.read()
result = client.objectDetect(image)
print(result)
data = result.get("result")
-
通过百度识别出来的坐标,使用PIL将需要的图片截取出来
width = data.get("width")
height = data.get("height")
top = data.get("top")
left = data.get("left")
from PIL import Image
im = Image.open(filename)
box = (left, top, left + width, top + height)
region = im.crop(box)
region.save("cutting.jpg")
参考:
-
Mac下使用Python进行pdf到image的转换
-
Python 将pdf转成图片
-
利用ImageMagick把pdf批量转换为高质量图片
在工作中,往往需要根据证书模版图片,在指定位置上填写证书获得人的姓名和证书编号,并且生成pdf电子版证书文件。我们可以通过python来实现自动化处理。
Python获取指定目录下的所有文件路径、获取指定目录下所有文件名(但是不包含子目录中文件名)、获取指定目录下所有pdf文件名(但是不包含子目录中pdf文件名)
一些重要文档格式之间的互转在目前显得尤为重要,pdf作为通用格式在现在各个平台上兼容性是最好的,所以写python脚本将这些word文档批量转换pdf是最好的解决方案。
由于windows系统对于word文档有天然的兼容性优势,所以转换起来很简单,普遍上是通过comtypes模块。