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实现html转ubb代码(html2ubb)
Jul 03 Python
web.py在SAE中的Session问题解决方法(使用mysql存储)
Jun 24 Python
深入理解Python中装饰器的用法
Jun 28 Python
python矩阵转换为一维数组的实例
Jun 05 Python
pygame游戏之旅 添加键盘按键的方法
Nov 20 Python
uwsgi+nginx部署Django项目操作示例
Dec 04 Python
python进行TCP端口扫描的实现
Dec 21 Python
python实现上传文件到linux指定目录的方法
Jan 03 Python
Python3 读取Word文件方式
Feb 13 Python
Tensorflow中的降维函数tf.reduce_*使用总结
Apr 20 Python
详解Anaconda 的安装教程
Sep 23 Python
Spy++的使用方法及下载教程
Jan 29 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的面向对象编程
2006/10/09 PHP
PHP通过iconv将字符串从GBK转换为UTF8字符集
2011/07/18 PHP
那些年一起学习的PHP(一)
2012/03/21 PHP
PHP session文件独占锁引起阻塞问题解决方法
2015/05/12 PHP
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
2016/03/03 PHP
php readfile()修改文件上传大小设置
2017/08/11 PHP
laravel-admin select框默认选中的方法
2019/10/03 PHP
(转载)JavaScript中匿名函数,函数直接量和闭包
2007/05/08 Javascript
json-lib出现There is a cycle in the hierarchy解决办法
2010/02/24 Javascript
JS 按钮点击触发(兼容IE、火狐)
2013/08/07 Javascript
javascript中typeof操作符和constucor属性检测
2015/02/26 Javascript
JavaScript实现弹出DIV层同时页面背景渐变成半透明效果
2016/03/25 Javascript
Bootstrap所支持的表单控件实例详解
2016/05/16 Javascript
详解JavaScript中|单竖杠运算符的使用方法
2016/05/23 Javascript
js Canvas实现圆形时钟教程
2016/09/19 Javascript
js 只比较时间大小的实例
2017/10/26 Javascript
vue 使用vue-i18n做全局中英文切换的方法
2018/10/29 Javascript
js变量声明var使用与不使用的区别详解
2019/01/21 Javascript
基于JavaScript判断两个对象内容是否相等
2020/01/10 Javascript
Vue CLI4 Vue.config.js标准配置(最全注释)
2020/06/05 Javascript
实例讲解React 组件
2020/07/07 Javascript
python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
2014/06/09 Python
使用Python微信库itchat获得好友和群组已撤回的消息
2018/06/24 Python
django 实现电子支付功能的示例代码
2018/07/25 Python
对Python w和w+权限的区别详解
2019/01/23 Python
Ubuntu16.04安装python3.6.5步骤详解
2020/01/10 Python
带有css3动画效果的兼容多浏览器简单导航条示例
2014/01/26 HTML / CSS
CSS去掉A标签(链接)虚线框的方法
2014/04/01 HTML / CSS
HTML5未来发展趋势
2016/02/01 HTML / CSS
美国最大的存储市场:SpareFoot
2018/07/23 全球购物
C#如何调用Word并打开一个Word文档
2013/05/08 面试题
软件测试企业面试试卷
2016/07/13 面试题
教师档案管理制度
2014/01/23 职场文书
对标管理实施方案
2014/03/12 职场文书
优秀校长事迹材料
2014/12/24 职场文书
世界文化遗产导游词
2019/08/07 职场文书