Python提取PDF内容的方法(文本、图像、线条等)


Posted in Python onSeptember 25, 2019

1.安装PDFminer3k

使用pip 命令安装

pip install pdfminer3k

2.编写测试

你可以在这里获得官方参考:PDFMiner

如果你不喜欢看英文的官方文档,这里的翻译也许对你有帮助:中文PDFMiner文档

下面的程序,我拓展了官方给出的例子,你可以通过这个例子统计出来你的pdf文件一共包含哪些内容,比如文本框,曲线,图片等

#!/usr/bin/python
# -*- coding: utf-8 -*-

__author__ = 'yooongchun'

import sys
import importlib
importlib.reload(sys)

from pdfminer.pdfparser import PDFParser,PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import *
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed

'''
解析pdf文件,获取文件中包含的各种对象
'''


# 解析pdf文件函数
def parse(pdf_path):
  fp = open(pdf_path, 'rb') # 以二进制读模式打开
  # 用文件对象来创建一个pdf文档分析器
  parser = PDFParser(fp)
  # 创建一个PDF文档
  doc = PDFDocument()
  # 连接分析器 与文档对象
  parser.set_document(doc)
  doc.set_parser(parser)

  # 提供初始化密码
  # 如果没有密码 就创建一个空的字符串
  doc.initialize()

  # 检测文档是否提供txt转换,不提供就忽略
  if not doc.is_extractable:
    raise PDFTextExtractionNotAllowed
  else:
    # 创建PDf 资源管理器 来管理共享资源
    rsrcmgr = PDFResourceManager()
    # 创建一个PDF设备对象
    laparams = LAParams()
    device = PDFPageAggregator(rsrcmgr, laparams=laparams)
    # 创建一个PDF解释器对象
    interpreter = PDFPageInterpreter(rsrcmgr, device)

    # 用来计数页面,图片,曲线,figure,水平文本框等对象的数量
    num_page, num_image, num_curve, num_figure, num_TextBoxHorizontal = 0, 0, 0, 0, 0

    # 循环遍历列表,每次处理一个page的内容
    for page in doc.get_pages(): # doc.get_pages() 获取page列表
      num_page += 1 # 页面增一
      interpreter.process_page(page)
      # 接受该页面的LTPage对象
      layout = device.get_result()
      for x in layout:
        if isinstance(x,LTImage): # 图片对象
          num_image += 1
        if isinstance(x,LTCurve): # 曲线对象
          num_curve += 1
        if isinstance(x,LTFigure): # figure对象
          num_figure += 1
        if isinstance(x, LTTextBoxHorizontal): # 获取文本内容
          num_TextBoxHorizontal += 1 # 水平文本框对象增一
          # 保存文本内容
          with open(r'test.txt', 'a') as f:
            results = x.get_text()
            f.write(results + '\n')
    print('对象数量:\n','页面数:%s\n'%num_page,'图片数:%s\n'%num_image,'曲线数:%s\n'%num_curve,'水平文本框:%s\n'
       %num_TextBoxHorizontal)


if __name__ == '__main__':
  pdf_path = r'C:\Users\fanyu\Desktop\pdf\test.pdf'
  parse(pdf_path)

其实在上面的layout 对象中有更多的内容可提取,这个自己按需来写就好,然后对曲线,文本框等对象,都会有位置属性,可直接获取,自己debug 查看以下对象属性获取即可。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python3基础之输入和输出实例分析
Aug 18 Python
zookeeper python接口实例详解
Jan 18 Python
Python使用Django实现博客系统完整版
Sep 29 Python
简单实现Python爬取网络图片
Apr 01 Python
pandas修改DataFrame列名的方法
Apr 08 Python
浅谈pandas中DataFrame关于显示值省略的解决方法
Apr 08 Python
Python 获取div标签中的文字实例
Dec 20 Python
Python socket实现多对多全双工通信的方法
Feb 13 Python
详解Python中正则匹配TAB及空格的小技巧
Jul 26 Python
PYTHON EVAL的用法及注意事项解析
Sep 06 Python
python shutil文件操作工具使用实例分析
Dec 25 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
Feb 20 Python
python使用 request 发送表单数据操作示例
Sep 25 #Python
Python实现PyPDF2处理PDF文件的方法示例
Sep 25 #Python
python mqtt 客户端的实现代码实例
Sep 25 #Python
python实现的登录与提交表单数据功能示例
Sep 25 #Python
python 利用pyttsx3文字转语音过程详解
Sep 25 #Python
python retrying模块的使用方法详解
Sep 25 #Python
Python 实现一个手机号码获取妹子名字的功能
Sep 25 #Python
You might like
劣质的PHP代码简化
2010/02/08 PHP
PHP判断远程图片是否存在的几种方法
2014/05/04 PHP
JavaScript中的私有成员
2006/09/18 Javascript
jQuery 标题的自动翻转实现代码
2009/10/14 Javascript
jQuery 加上最后自己的验证
2009/11/04 Javascript
3种Jquery限制文本框只能输入数字字母的方法
2014/12/03 Javascript
流量统计器如何鉴别C#:WebBrowser中伪造referer
2015/01/07 Javascript
JavaScript中的对象与JSON
2015/07/03 Javascript
JavaScript实现显示函数调用堆栈的方法
2016/04/21 Javascript
jquery实现轮播图效果
2017/02/13 Javascript
利用C/C++编写node.js原生模块的方法教程
2017/07/07 Javascript
Vue中使用clipboard实现复制功能
2018/09/05 Javascript
angularJS实现不同视图同步刷新详解
2018/10/09 Javascript
详解如何解决vue开发请求数据跨域的问题(基于浏览器的配置解决)
2018/11/12 Javascript
JavaScript中使用Spread运算符的八种方法总结
2020/06/18 Javascript
vue实现列表滚动的过渡动画
2020/06/29 Javascript
详细解读Python中的__init__()方法
2015/05/02 Python
python获取外网ip地址的方法总结
2015/07/02 Python
python版学生管理系统
2018/01/10 Python
Python实现通讯录功能
2018/02/22 Python
Django实现web端tailf日志文件功能及实例详解
2019/07/28 Python
安装docker-compose的两种最简方法
2019/07/30 Python
opencv实现简单人脸识别
2021/02/19 Python
Django如何使用jwt获取用户信息
2020/04/21 Python
python爬虫可以爬什么
2020/06/16 Python
HTML5中5个简单实用的API
2014/04/28 HTML / CSS
兰芝美国网上商城:购买LANEIGE睡眠面膜等
2017/06/30 全球购物
英国时尚饰品和发饰购物网站:Claire’s
2017/07/04 全球购物
美国在线印刷公司:PsPrint
2017/10/12 全球购物
MAC Cosmetics巴西官方网站:M·A·C彩妆
2019/04/18 全球购物
应届生船舶驾驶求职信
2013/10/19 职场文书
机械工程师岗位职责
2014/06/16 职场文书
销售口号霸气押韵
2015/12/24 职场文书
又涨知识了,自律到底多重要?
2019/06/27 职场文书
中国现代文学之经典散文三篇
2019/09/18 职场文书
Python中npy和mat文件的保存与读取
2022/04/24 Python