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处理文本文件实现生成指定格式文件的方法
Jul 31 Python
Python中tell()方法的使用详解
May 24 Python
Python基于回溯法子集树模板解决取物搭配问题实例
Sep 02 Python
Python编程pygame模块实现移动的小车示例代码
Jan 03 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
Apr 21 Python
基于pandas将类别属性转化为数值属性的方法
Jul 25 Python
python3利用tcp实现文件夹远程传输
Jul 28 Python
浅谈Pycharm中的Python Console与Terminal
Jan 17 Python
Tensorflow Summary用法学习笔记
Jan 10 Python
Python如何使用27行代码绘制星星图
Jul 20 Python
一文带你掌握Pyecharts地理数据可视化的方法
Feb 06 Python
Python中递归以及递归遍历目录详解
Oct 24 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
Home Coffee Roasting
2021/03/03 咖啡文化
PHP新手上路(八)
2006/10/09 PHP
基于Laravel 5.2 regex验证的正确写法
2019/09/29 PHP
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
Javascript 垃圾收集机制介绍理解
2013/05/14 Javascript
jquery中validate与form插件提交的方式小结
2016/03/26 Javascript
BootStrap table使用方法分析
2016/11/08 Javascript
vue 2.0路由之路由嵌套示例详解
2017/05/08 Javascript
webpack本地开发环境无法用IP访问的解决方法
2018/03/20 Javascript
Angular2进阶之如何避免Dom误区
2018/04/02 Javascript
解决Nodejs全局安装模块后找不到命令的问题
2018/05/15 NodeJs
JS实现关闭小广告特效
2021/01/29 Javascript
javascript 设计模式之组合模式原理与应用详解
2020/04/08 Javascript
JS原形与原型链深入详解
2020/05/09 Javascript
Vue ElementUI实现:限制输入框只能输入正整数的问题
2020/07/31 Javascript
vue抽出组件并传值实例
2020/07/31 Javascript
Django的URLconf中使用缺省视图参数的方法
2015/07/18 Python
django开发之settings.py中变量的全局引用详解
2017/03/29 Python
Python实现基于二叉树存储结构的堆排序算法示例
2017/12/08 Python
Python装饰器使用你可能不知道的几种姿势
2019/10/25 Python
tensorflow 获取所有variable或tensor的name示例
2020/01/04 Python
pytorch使用 to 进行类型转换方式
2020/01/08 Python
pandas中ix的使用详细讲解
2020/03/09 Python
CSS3 渐变(Gradients)之CSS3 径向渐变
2016/07/08 HTML / CSS
CSS3 重置iphone浏览器按钮input,select等表单元素的默认样式
2014/10/11 HTML / CSS
森海塞尔美国官网:Sennheiser耳机与耳麦
2017/07/19 全球购物
Vilebrequin欧洲官网:法国豪华泳装品牌(男士沙滩裤)
2018/04/14 全球购物
工地门卫岗位职责
2013/12/30 职场文书
同学聚会老师邀请函
2014/01/28 职场文书
党员专题组织生活会发言材料
2014/10/17 职场文书
县级领导干部开展党的群众路线教育实践活动工作汇报
2014/10/25 职场文书
2015新员工试用期工作总结
2014/12/12 职场文书
2015年财政所工作总结
2015/04/25 职场文书
房屋买卖定金协议书
2016/03/21 职场文书
有趣的二维码:使用MyQR和qrcode来制作二维码
2021/05/10 Python
Python绘制散乱的点构成的图的方法
2022/04/21 Python