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计算最大优先级队列实例
Dec 18 Python
python操作mysql中文显示乱码的解决方法
Oct 11 Python
python使用PIL缩放网络图片并保存的方法
Apr 24 Python
python基础教程之分支、循环简单用法
Jun 16 Python
在python的类中动态添加属性与生成对象
Sep 17 Python
python网络编程调用recv函数完整接收数据的三种方法
Mar 31 Python
Python MySQLdb 使用utf-8 编码插入中文数据问题
Mar 13 Python
介绍一款python类型检查工具pyright(推荐)
Jul 03 Python
基于python实现文件加密功能
Jan 06 Python
详解python os.path.exists判断文件或文件夹是否存在
Nov 16 Python
Python爬虫之Selenium实现窗口截图
Dec 04 Python
python运算符之与用户交互
Apr 13 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
重料打造自己的“宝马”---第三代
2021/03/02 无线电
PHP中的函数-- foreach()的用法详解
2013/06/24 PHP
PHP 实现判断用户是否手机访问
2015/01/21 PHP
PHP转换文本框内容为HTML格式的方法
2016/07/20 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
2017/03/14 PHP
浅谈Yii乐观锁的使用及原理
2017/07/25 PHP
PHP实现的基于单向链表解决约瑟夫环问题示例
2017/09/30 PHP
jQuery Select(单选) 模拟插件 V1.3.62 改进版
2010/07/17 Javascript
关于递归运算的顺序测试代码
2011/11/30 Javascript
AngularJs  Using $location详解及示例代码
2016/09/02 Javascript
微信小程序自定义导航隐藏和显示功能
2017/06/13 Javascript
JavaSctit 利用FileReader和滤镜上传图片预览功能
2017/09/05 Javascript
node上的redis调用优化示例详解
2018/10/30 Javascript
详解微信小程序-扫一扫 wx.scanCode() 扫码大变身
2019/04/30 Javascript
Vue实现随机验证码功能
2020/12/29 Vue.js
[09:22]2014DOTA2西雅图国际邀请赛 主赛事第二日TOPPLAY
2014/07/21 DOTA
为Python的web框架编写MVC配置来使其运行的教程
2015/04/30 Python
python 3.6.5 安装配置方法图文教程
2018/09/18 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
2019/06/19 Python
Python面向对象之Web静态服务器
2019/09/03 Python
kafka-python 获取topic lag值方式
2019/12/23 Python
基于TensorFlow中自定义梯度的2种方式
2020/02/04 Python
Python切割图片成九宫格的示例代码
2020/03/10 Python
使用matplotlib的pyplot模块绘图的实现示例
2020/07/12 Python
介绍一下HDLC(High-Level Data Link Control)高层数据链路协议
2012/01/21 面试题
小区门卫值班制度
2014/01/24 职场文书
工程力学专业自荐信范文
2014/03/17 职场文书
小学生中国梦演讲稿
2014/04/23 职场文书
银行求职信范文
2014/05/26 职场文书
群众路线教育实践活动心得体会(四风)
2014/11/03 职场文书
企业整改报告范文
2014/11/08 职场文书
国家助学贷款承诺书
2015/04/30 职场文书
高老头读书笔记
2015/06/30 职场文书
小学五年级(说明文3篇)
2019/08/13 职场文书
tensorflow+k-means聚类简单实现猫狗图像分类的方法
2021/04/28 Python
python数字图像处理:图像的绘制
2022/06/28 Python