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格式化css文件的方法
Mar 10 Python
Python实现删除文件中含“指定内容”的行示例
Jun 09 Python
python实现学生信息管理系统
Apr 05 Python
安装python时MySQLdb报错的问题描述及解决方法
Mar 20 Python
tensorflow 中对数组元素的操作方法
Jul 27 Python
python实现合并两个排序的链表
Mar 03 Python
Pycharm使用之设置代码字体大小和颜色主题的教程
Jul 12 Python
django的ORM操作 增加和查询
Jul 26 Python
浅析PyTorch中nn.Linear的使用
Aug 18 Python
PyQT5 emit 和 connect的用法详解
Dec 13 Python
如何基于Python创建目录文件夹
Dec 31 Python
K近邻法(KNN)相关知识总结以及如何用python实现
Jan 28 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无限分类的类
2007/01/02 PHP
PHP 面向对象实现代码
2009/11/11 PHP
获取远程文件大小的php函数
2010/01/11 PHP
PHP读取文件内容的五种方式
2015/12/28 PHP
Yii2超好用的日期和时间组件(值得收藏)
2016/05/05 PHP
javascript实现文本域写入字符时限定字数
2014/02/12 Javascript
AngularJS入门教程(二):AngularJS模板
2014/12/06 Javascript
bootstrap table 服务器端分页例子分享
2015/02/10 Javascript
PHP 数组current和next用法分享
2015/03/05 Javascript
推荐阅读的js快速判断IE浏览器(兼容IE10与IE11)
2015/12/13 Javascript
jQuery实现的自定义弹出层效果实例详解
2016/09/04 Javascript
JS之相等操作符详解
2016/09/13 Javascript
Ajax与服务器(JSON)通信实例代码
2016/11/05 Javascript
分享一个精简的vue.js 图片lazyload插件实例
2017/03/13 Javascript
js+html制作简单日历的方法
2017/06/27 Javascript
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
2017/10/26 Javascript
轻松理解vue的双向数据绑定问题
2017/10/30 Javascript
JavaScript使用享元模式实现文件上传优化操作示例
2018/08/07 Javascript
详解使用jest对vue项目进行单元测试
2018/09/07 Javascript
使用vue2.0创建的项目的步骤方法
2018/09/25 Javascript
使用异步controller与jQuery实现卷帘式分页
2019/06/18 jQuery
Python ldap实现登录实例代码
2016/09/30 Python
python中多个装饰器的执行顺序详解
2018/10/08 Python
Python玩转Excel的读写改实例
2019/02/22 Python
详解pytorch 0.4.0迁移指南
2019/06/16 Python
Python自定义一个异常类的方法
2019/06/27 Python
tensorflow之自定义神经网络层实例
2020/02/07 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
2021/02/03 Python
image-set实现Retina屏幕下图片显示详细介绍
2012/12/24 HTML / CSS
HTML5新增加标签和功能概述
2016/09/05 HTML / CSS
稀有和绝版书籍:Biblio.com
2017/02/02 全球购物
20世纪40年代连衣裙和复古服装:The Seamstress Of Bloomsbury
2018/07/24 全球购物
大学生职业规划书的范本
2014/02/18 职场文书
洗发露广告词
2014/03/14 职场文书
redis限流的实际应用
2021/04/24 Redis
MySQL数据迁移相关总结
2021/04/29 MySQL