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 相关文章推荐
Python的ORM框架SQLAlchemy入门教程
Apr 28 Python
Python多进程机制实例详解
Jul 02 Python
Python列出一个文件夹及其子目录的所有文件
Jun 30 Python
python版本坑:md5例子(python2与python3中md5区别)
Jun 20 Python
python 爬虫 批量获取代理ip的实例代码
May 22 Python
对Python3 解析html的几种操作方式小结
Feb 16 Python
python写日志文件操作类与应用示例
Jul 01 Python
Django打印出在数据库中执行的语句问题
Jul 25 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
Aug 31 Python
python实现while循环打印星星的四种形状
Nov 23 Python
Virtualenv 搭建 Py项目运行环境的教程详解
Jun 22 Python
手残删除python之后的补救方法
Jun 26 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
js触发asp.net的Button的Onclick事件应用
2013/02/02 Javascript
JavaScript中的关键字"VAR"使用详解 分享
2013/07/31 Javascript
jQuery实现的Div窗口震动特效
2014/06/09 Javascript
js调试系列 源码定位与调试[基础篇]
2014/06/18 Javascript
JavaScript实现Iterator模式实例分析
2015/06/09 Javascript
Ajax中解析Json的两种方法对比分析
2015/06/25 Javascript
利用jquery获取select下拉框的值
2016/11/23 Javascript
JS点击缩略图整屏居中放大图片效果
2017/07/04 Javascript
vue+echarts实现动态绘制图表及异步加载数据的方法
2018/10/17 Javascript
JS/HTML5游戏常用算法之碰撞检测 像素检测算法实例详解
2018/12/12 Javascript
微信小程序生成二维码的示例代码
2019/03/29 Javascript
一篇文章介绍redux、react-redux、redux-saga总结
2019/05/23 Javascript
vue如何自动化打包测试环境和正式环境的dist/test文件
2019/06/06 Javascript
es6中Promise 对象基本功能与用法实例分析
2020/02/23 Javascript
ant-design-vue 时间选择器赋值默认时间的操作
2020/10/27 Javascript
nuxt.js添加环境变量,区分项目打包环境操作
2020/11/06 Javascript
python实现数值积分的Simpson方法实例分析
2015/06/05 Python
Python SQLite3数据库日期与时间常见函数用法分析
2017/08/14 Python
python基于C/S模式实现聊天室功能
2019/01/09 Python
选择python进行数据分析的理由和优势
2019/06/25 Python
pandas通过字典生成dataframe的方法步骤
2019/07/23 Python
Matplotlib scatter绘制散点图的方法实现
2020/01/02 Python
python 使用三引号时容易犯的小错误
2020/10/21 Python
Python生成pdf目录书签的实例方法
2020/10/29 Python
Python使用tkinter制作在线翻译软件
2021/02/22 Python
世界上最大的罕见唱片、CD和音乐纪念品网上商店:991.com
2018/05/03 全球购物
Eyeko美国:屡获殊荣的睫毛膏、眼线笔和眉妆
2018/07/05 全球购物
expedia比利时:预订航班+酒店并省钱
2018/07/13 全球购物
Pamela Love官网:纽约设计师Pamela Love的精美、时尚和穿孔珠宝
2020/10/19 全球购物
企业统计员岗位职责
2013/12/13 职场文书
茶叶生产计划书
2014/01/10 职场文书
纪检干部现实表现材料
2014/08/21 职场文书
股指期货心得体会
2014/09/10 职场文书
党政领导班子群众路线对照检查材料思想汇报
2014/09/27 职场文书
让人瞬间清醒的句子,句句经典,字字如金
2019/07/08 职场文书
详解如何使用Node.js实现热重载页面
2021/05/06 Javascript