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连接mysql调用存储过程示例
Mar 05 Python
用Python进行基础的函数式编程的教程
Mar 31 Python
python获得一个月有多少天的方法
Jun 04 Python
python实现聚类算法原理
Feb 12 Python
Python中的 is 和 == 以及字符串驻留机制详解
Jun 28 Python
Python考拉兹猜想输出序列代码实践
Jul 05 Python
python爬虫神器Pyppeteer入门及使用
Jul 13 Python
Django中reverse反转并且传递参数的方法
Aug 06 Python
Python中文分词库jieba,pkusegwg性能准确度比较
Feb 11 Python
python标准库os库的函数介绍
Feb 12 Python
python实现股票历史数据可视化分析案例
Jun 10 Python
Python&Matlab实现灰狼优化算法的示例代码
Mar 21 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设计模式 Prototype (原型模式)代码
2011/06/26 PHP
PHP中执行cmd命令的方法
2014/10/11 PHP
smarty模板引擎基础知识入门
2015/03/30 PHP
在php中设置session用memcache来存储的方法总结
2016/01/14 PHP
PHP连接MySQL进行增、删、改、查操作
2017/02/19 PHP
Yii2 批量插入、更新数据实例
2017/03/15 PHP
详解Laravel5.6 Passport实现Api接口认证
2018/07/27 PHP
PDO::getAvailableDrivers讲解
2019/01/28 PHP
javascript实现的鼠标链接提示效果生成器代码
2007/06/28 Javascript
jquery使用remove()方法删除指定class子元素
2015/03/26 Javascript
分享我对JS插件开发的一些感想和心得
2016/02/04 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
最实用的jQuery分页插件
2016/10/09 Javascript
NodeJS基础API搭建服务器详细过程记录
2017/04/01 NodeJs
使用Browserify来实现CommonJS的浏览器加载方法
2017/05/14 Javascript
JavaScript监听手机物理返回键的两种解决方法
2017/08/14 Javascript
微信公众号H5支付接口调用方法
2019/01/10 Javascript
Vue 页面权限控制和登陆验证功能的实例代码
2019/06/20 Javascript
JS数组reduce()方法原理及使用技巧解析
2020/07/14 Javascript
Vue性能优化的方法
2020/07/30 Javascript
Python ljust rjust center输出
2008/09/06 Python
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
2018/04/02 Python
多个应用共存的Django配置方法
2018/05/30 Python
django认证系统实现自定义权限管理的方法
2018/07/16 Python
Python3中关于cookie的创建与保存
2018/10/21 Python
python 重命名轴索引的方法
2018/11/10 Python
Python3 SSH远程连接服务器的方法示例
2018/12/29 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
2019/04/29 Python
快速查找Python安装路径方法
2020/02/06 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
2020/06/03 Python
python3 re返回形式总结
2020/11/20 Python
HTML5调用手机发短信和打电话功能
2020/04/29 HTML / CSS
俄罗斯披萨、寿司和面食送货到家服务:2 Берега
2019/12/15 全球购物
央视元宵晚会主持串词
2014/03/25 职场文书
群众路线领导班子四风对照检查材料
2014/09/27 职场文书
安全员岗位职责范本
2015/04/11 职场文书