Python实现PDF内容抽取PyMuPDF

最近需要把扫描的PDF转换成文本,试用了pdfminer,pypdf2等工具,解析图片的效果都不太好,用起来也比较麻烦,后来试用了PyMuPDF,相对其它工具,它最新版本屏蔽了更多细节,围绕Page进行操作,调用非常方便。除了PDF它还支持解析epub等电子书格式。

目前网上例程大多是只抽取图片,没有同时转换图片和文字,且因为旧版本API,大多已无法正常运行。本文将示例其用法。

安装

$ pip install pymupdf==1.18.19

如果提取找不到fiz.h,建议更新pip版本

$ pip3.6 install --upgrade pip

例程

def parse(inpath, outpath):
    remove(TMPDIR) # 清除临时目录 
    os.mkdir(TMPDIR)
    remove(outpath) # 清除输出文件

    t0 = time.clock()
    doc = fitz.open(inpath)
    lenXREF = doc.xrefLength()
    print("文件名:{}, 页数: {}, 对象: {}".format(inpath, len(doc), lenXREF - 1))

    imgcount = 0
    for i,page in enumerate(doc):
        t1 = time.clock()
        # 文字
        text = page.get_text()
        if len(text) > 0:
             write_file(outpath, text, 'a')
        # 图片        
        imglist = page.get_images() # 解析该页中图片
        for item in imglist:
            xref = item[0]
            pix = fitz.Pixmap(doc, xref)
            new_name = "{}.png".format(imgcount)
            # 如果pix.n<5,可以直接存为PNG
            path = os.path.join(TMPDIR, new_name)
            if pix.n < 5:
                pix.writePNG(path)
            # 否则先转换CMYK
            else:
                pix0 = fitz.Pixmap(fitz.csRGB, pix)
                pix0.writePNG(path)
                pix0 = None
            pix = None
            if OCR_ONLINE:
                text = img_to_str_baidu(path)
            else:
                text = img_to_str_tesseract(path)
            print("img->text", text)
            write_file(outpath, text, 'a')
            write_file(outpath, '\n' + '-----------' + '\n', 'a')
            imgcount += 1
        print("page {} 运行时间:{}s".format(i, {t1 - t0}))

完整例程请见参考部分

参考

帮助文档 https://pymupdf.readthedocs.io/en/latest/tutorial.html

源码地址 https://github.com/pymupdf/PyMuPDF

完整例程 https://github.com/xieyan0811/pdfconv.git

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值