python使用pdfminer解析pdf文件的方法示例


Posted in Python onDecember 20, 2018

最近要做个从 pdf 文件中抽取文本内容的工具,大概查了一下 python 里可以使用 pdfminer 来实现。下面就看看怎样使用吧。
PDFMiner是一个可以从PDF文档中提取信息的工具。与其他PDF相关的工具不同,它注重的完全是获取和分析文本数据。PDFMiner允许你获取某一页中文本的准确位置和一些诸如字体、行数的信息。它包括一个PDF转换器,可以把PDF文件转换成HTML等格式。它还有一个扩展的PDF解析器,可以用于除文本分析以外的其他用途。

PDFMiner内置两个好用的工具:pdf2txt.py和dumppdf.py

pdf2txt.py从PDF文件中提取所有文本内容。但不能识别画成图片的文本,这需要特征识别。对于加密的PDF你需要提供一个密码才能解析,对于没有提取权限的PDF文档你得不到任何文本。

dumppdf.py把PDF文件内容变成pseudo-XML格式。这个程序主要用于debug,但是它也可能用于提取一些有意义的内容(比如图片)。

官方主页:https://euske.github.io/pdfminer/

其特征有:1、完全使用python编写。(适用于2.4或更新版本)2、解析,分析,并转换成PDF文档。3、PDF-1.7规范的支持。(几乎)4、中日韩语言和垂直书写脚本支持。5、各种字体类型(Type1、TrueType、Type3,和CID)的支持。6、基本加密(RC4)的支持。7、PDF与HTML转换。8、纲要(TOC)的提取。9、标签内容提取。10、通过分组文本块重建原始的布局。
如果你的Python有安装pip模块,就可以通过命令“python pip install pdfminer”,自动安装pdfminer。

解析pdf文件用到的类:

  • PDFParser:从一个文件中获取数据
  • PDFDocument:保存获取的数据,和PDFParser是相互关联的
  • PDFPageInterpreter处理页面内容
  • PDFDevice将其翻译成你需要的格式
  • PDFResourceManager用于存储共享资源,如字体或图像。

python的工具,安装当然是使用pip安装了。

pip install pdfminer

命令行方式

为了使用方便,pdfminer 提供了一个命令行工具来直接转换pdf文件,使用方法如下:

pdf2txt.py <path_to_pdf_file>

编程方式

除了命令行方式以外,对于复杂应用场景,pdfminer 也提供了以编程方式来转换 pdf 文件,主要使用下面几个类来实现:

  • PDFParser: 用来解析pdf文件。
  • PDFDocument:用来保存 PDFParser 解析后的对象。
  • PDFPageInterpreter:用来处理解析后的文档页面内容。
  • PDFResourceManager:pdf 共享资源管理器,用于存储共享资源,如字体或图像。

下面看一个例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage, PDFTextExtractionNotAllowed
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams
import StringIO


class PDFUtils():

  def __init__(self):
    pass

  def pdf2txt(self, path):
    output = StringIO.StringIO()
    with open(path, 'rb') as f:
      praser = PDFParser(f)

      doc = PDFDocument(praser)

      if not doc.is_extractable:
        raise PDFTextExtractionNotAllowed

      pdfrm = PDFResourceManager()

      laparams = LAParams()

      device = PDFPageAggregator(pdfrm, laparams=laparams)

      interpreter = PDFPageInterpreter(pdfrm, device)

      for page in PDFPage.create_pages(doc):
        interpreter.process_page(page)
        layout = device.get_result()
        for x in layout:
          if hasattr(x, "get_text"):
            content = x.get_text()
            output.write(content)

    content = output.getvalue()
    output.close()
    return content


if __name__ == '__main__':
  path = u'/tmp/abc.pdf'
  pdf_utils = PDFUtils()
  print pdf_utils.pdf2txt(path)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现的防DDoS脚本
Feb 08 Python
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
Jun 13 Python
python+mongodb数据抓取详细介绍
Oct 25 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
May 27 Python
用Pytorch训练CNN(数据集MNIST,使用GPU的方法)
Aug 19 Python
python Kmeans算法原理深入解析
Aug 23 Python
python使用多线程编写tcp客户端程序
Sep 02 Python
通过 Python 和 OpenCV 实现目标数量监控
Jan 05 Python
解决Tensorflow占用GPU显存问题
Feb 03 Python
Python如何将字符串转换为日期
Jul 31 Python
Python 下载Bing壁纸的示例
Sep 29 Python
python中zip()函数遍历多个列表方法
Feb 18 Python
python爬取指定微信公众号文章
Dec 20 #Python
在Django中URL正则表达式匹配的方法
Dec 20 #Python
python采集微信公众号文章
Dec 20 #Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
Dec 19 #Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
Dec 19 #Python
python3实现网络爬虫之BeautifulSoup使用详解
Dec 19 #Python
python爬虫超时的处理的实例
Dec 19 #Python
You might like
PHP学习之PHP表达式
2006/10/09 PHP
PHP数字前补0的自带函数sprintf 和number_format的用法(详解)
2017/02/06 PHP
PHP实现基于回溯法求解迷宫问题的方法详解
2017/08/17 PHP
PHP一致性hash分布式算法封装类定义与用法示例
2018/08/04 PHP
js获取页面传来参数的方法
2014/09/06 Javascript
jQuery基础知识小结
2014/12/22 Javascript
javascript 应用小技巧方法汇总
2015/07/05 Javascript
js实现黑色简易的滑动门网页tab选项卡效果
2015/08/31 Javascript
关于在Servelet中如何获取当前时间的操作方法
2016/06/28 Javascript
Vue 组件(component)教程之实现精美的日历方法示例
2018/01/08 Javascript
详解用Node.js写一个简单的命令行工具
2018/03/01 Javascript
ES6中的迭代器、Generator函数及Generator函数的异步操作方法
2019/05/12 Javascript
javascript实现自由编辑图片代码详解
2019/06/21 Javascript
jquery实现吸顶导航效果
2020/01/08 jQuery
Vue3.0的优化总结
2020/10/16 Javascript
js实现简单图片拖拽效果
2021/02/22 Javascript
[02:40]DOTA2超级联赛专访430 从小就爱玩对抗性游戏
2013/06/18 DOTA
Python实现的用户登录系统功能示例
2018/02/05 Python
对python 通过ssh访问数据库的实例详解
2019/02/19 Python
python opencv 批量改变图片的尺寸大小的方法
2019/06/28 Python
pytorch实现Tensor变量之间的转换
2020/02/17 Python
python3 中使用urllib问题以及urllib详解
2020/08/03 Python
基于 Python 实践感知器分类算法
2021/01/07 Python
Html5移动端适配IphoneX等机型的方法
2019/06/25 HTML / CSS
高山背包:High Sierra
2017/11/23 全球购物
PHP面试题集
2016/12/18 面试题
新学期班主任寄语
2014/01/18 职场文书
银行职员个人的工作自我评价
2014/02/15 职场文书
村委会贫困证明范本
2014/09/17 职场文书
车辆年检委托书范本
2014/10/14 职场文书
商铺门面租房协议书
2014/10/21 职场文书
老公保证书怎么写
2015/02/26 职场文书
2015年公司后勤管理工作总结
2015/05/13 职场文书
初中班主任工作随笔
2015/08/15 职场文书
准备去美国留学,那么大学申请文书应该怎么写?
2019/08/12 职场文书
十大最强格斗系宝可梦,超梦X仅排第十,第二最重格斗礼仪
2022/03/18 日漫