pdf转图片 python_Python—PDF文本与图片抽取

67fe1fa347574959b45b44407507673e

PDF是人们日常使用最多的跨平台文档。其是一种用独立于应用程序、硬件、操作系统的方式呈现文档的文件格式。每个PDF文件包含固定布局的平面文档的完整描述,包括文本、字形、图形及其他需要显示的信息。因此,具有良好的跨平台特性,但同时,也为抽取其内容带来了不便。

PDF最初版本于1993发行,最新版本为2.0。

今天,我们使得Python来抽取PDF文档中的文本与图片。

文本抽取

PDF文本抽取相对容易,效果最好的是pdfminer(https://github.com/euske/pdfminer)。基本能抽取出所有文本。

pdfminer是开源的纯Python编写,支持最新至PDF 1.7版本。

pdfminer的使用比较简单

安装:

pip install pdfminer

使用:

python pdf2txt.py -o  -t text -O 

如上就实现了文本抽取,抽取的是纯文本,无格式、字体等信息。

f611dde62dc547a9918a6a5e323e8588

原文

9f4ebab2a2ea455ea8634eb09de96643

抽取出的文本

pdfminer有个麻烦的地方,对于CJK编码的PDF文档,需要手动安装也能正常抽取文字。

图片抽取

PDF图片抽取是个比较难的问题,目前Python可以调用的比较好的库是PyMuPDF(https://github.com/pymupdf/PyMuPDF)。PyPDF2(https://github.com/mstamy2/PyPDF2)库也可以实现部分功能,但已于2018年停止更新。

这些库的问题是,无法抽取出所有的图片,同时,抽取出的图片问题不一。

这里以 https://arxiv.org/pdf/1703.10135.pdf 文件为例。

使用PyMuPDF 代码如下:

import fitz  # PyMuPDFdef get_pixmaps_in_pdf(pdf_filename):    doc = fitz.open(pdf_filename)    xrefs = set()    for page_index in range(doc.pageCount):        for image in doc.getPageImageList(page_index):            xrefs.add(image[0])  # Add XREFs to set so duplicates are ignored    pixmaps = [fitz.Pixmap(doc, xref) for xref in xrefs]    doc.close()    return pixmapsdef write_pixmaps_to_pngs(pixmaps):    for i, pixmap in enumerate(pixmaps):        pixmap.writePNG(f'{i}.png')  # Might want to come up with a better namepixmaps = get_pixmaps_in_pdf('Wang_et_al_2017_Tacotron.pdf')write_pixmaps_to_pngs(pixmaps)

抽取效果如下。整篇PDF文档,只抽取出如下的几个图片。

c2e8b53af79645af825be5d9ab032d12

比如,第二页的图片就无法抽取出来。

25a2f59608a54dec80392289a13a6cbe

理想状态下,第6页的图片与示例应该合并一成一张图抽取出来,但实际上是分开抽取。

487b4f09125d4e778b4610a0b4ac593e

好的。Python抽取PDF文字与图片的介绍就到这里。

大家有更好的图片抽取工具或方法,欢迎留言贡献,谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值