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 相关文章推荐
安装ElasticSearch搜索工具并配置Python驱动的方法
Dec 22 Python
Python读大数据txt
Mar 28 Python
Python的网络编程库Gevent的安装及使用技巧
Jun 24 Python
12个步骤教你理解Python装饰器
Jul 01 Python
django如何自己创建一个中间件
Jul 24 Python
opencv调整图像亮度对比度的示例代码
Sep 27 Python
python opencv将表格图片按照表格框线分割和识别
Oct 30 Python
解决tensorflow由于未初始化变量而导致的错误问题
Jan 06 Python
python GUI库图形界面开发之PyQt5拖放控件实例详解
Feb 25 Python
Python pytesseract验证码识别库用法解析
Jun 29 Python
python中最小二乘法详细讲解
Feb 19 Python
Django 实现jwt认证的示例
Apr 30 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面向对象三大特点学习(充分理解抽象、封装、继承、多态)
2012/05/07 PHP
ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
2014/10/29 PHP
部署PHP时的4个配置修改说明
2015/10/19 PHP
smarty高级特性之过滤器的使用方法
2015/12/25 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
2016/11/29 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
ajax无刷新动态调用股票信息(改良版)
2008/11/01 Javascript
JS无法捕获滚动条上的mouse up事件的原因猜想
2012/03/21 Javascript
JavaScript之自定义类型
2012/05/04 Javascript
jQuery学习笔记之jQuery中的$
2015/01/19 Javascript
js实现鼠标触发图片抖动效果的方法
2015/02/27 Javascript
jQuery中的ajax async同步和异步详解
2015/09/29 Javascript
JavaScript实现弹出模态窗体并接受传值的方法
2016/02/12 Javascript
js实现加载更多功能实例
2016/10/27 Javascript
iview中Select 选择器多选校验方法
2018/03/15 Javascript
jQuery与原生JavaScript选择HTML元素集合用法对比分析
2019/11/26 jQuery
详解JS预解析原理
2020/06/16 Javascript
vue 保留两位小数 不能直接用toFixed(2) 的解决
2020/08/07 Javascript
Vue实现一种简单的无限循环滚动动画的示例
2021/01/10 Vue.js
跟老齐学Python之用Python计算
2014/09/12 Python
Python中 Lambda表达式全面解析
2016/11/28 Python
Django 路由控制的实现
2019/07/17 Python
使用Python制作一个打字训练小工具
2019/10/01 Python
python实现将json多行数据传入到mysql中使用
2019/12/31 Python
使用Python操作ArangoDB的方法步骤
2020/02/02 Python
python实现图像外边界跟踪操作
2020/07/13 Python
CSS3之transition实现下划线的示例代码
2018/05/30 HTML / CSS
canvas拼图功能实现代码示例
2018/11/21 HTML / CSS
输入一行文字,找出其中大写字母、小写字母、空格、数字、及其他字符各有多少
2016/04/15 面试题
新闻网站实习自我鉴定
2013/09/25 职场文书
大学生毕业求职的自我评价
2013/09/29 职场文书
元旦晚会主持词
2014/03/24 职场文书
公司副总经理任命书
2014/06/05 职场文书
2015届本科毕业生自我鉴定
2014/09/27 职场文书
学生评语集锦
2015/01/04 职场文书
springboot+zookeeper实现分布式锁
2022/03/21 Java/Android