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入门篇之文件
Oct 20 Python
python删除特定文件的方法
Jul 30 Python
Python批量更改文件名的实现方法
Oct 29 Python
Python读取Json字典写入Excel表格的方法
Jan 03 Python
python3库numpy数组属性的查看方法
Apr 17 Python
Python 中的lambda函数介绍
Oct 10 Python
如何使用python进行pdf文件分割
Nov 11 Python
使用Pandas将inf, nan转化成特定的值
Dec 19 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
Jan 04 Python
python开发入门——set的使用
Sep 03 Python
Django修改app名称和数据表迁移方案实现
Sep 17 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
Oct 30 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 excel类 phpExcel使用方法介绍
2010/08/21 PHP
三个类概括PHP的五种设计模式
2012/09/05 PHP
去掉destoon资讯内容页keywords关键字自带的文章标题的方法
2014/08/21 PHP
php实现根据字符串生成对应数组的方法
2014/09/22 PHP
php中filter_input函数用法分析
2014/11/15 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
Laravel框架实现利用监听器进行sql语句记录功能
2018/06/06 PHP
Javascript Request获取请求参数如何实现
2012/11/28 Javascript
js判断页面中是否有指定控件的简单实例
2014/03/04 Javascript
jquery实现仿JqueryUi可拖动的DIV实例
2015/07/31 Javascript
jquery模拟进度条实现方法
2015/08/03 Javascript
js多功能分页组件layPage使用方法详解
2016/05/19 Javascript
jQuery仿京东商城楼梯式导航定位菜单
2016/07/25 Javascript
利用Javascript实现BMI计算器
2016/08/16 Javascript
JS简单实现仿百度控制台输出信息效果
2016/09/04 Javascript
JS中对数组元素进行增删改移的方法总结
2016/12/15 Javascript
解决拦截器对ajax请求的拦截实例详解
2016/12/21 Javascript
JavaScript 实现 Tab 点击切换实例代码
2017/03/25 Javascript
用js屏蔽被http劫持的浮动广告实现方法
2017/08/10 Javascript
vue-awesome-swiper滑块插件使用方法详解
2017/11/27 Javascript
js 两数组去除重复数值的实例
2017/12/06 Javascript
js删除对象/数组中null、undefined、空对象及空数组方法示例
2018/11/14 Javascript
Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题
2019/04/16 Javascript
python list使用示例 list中找连续的数字
2014/01/27 Python
python获取当前目录路径和上级路径的实例
2018/04/26 Python
pip安装py_zipkin时提示的SSL问题对应
2018/12/29 Python
对IPython交互模式下的退出方法详解
2019/02/16 Python
python-sys.stdout作为默认函数参数的实现
2020/02/21 Python
固特异美国在线轮胎店:Goodyear Tire
2019/02/23 全球购物
电子狗项圈:eDog Australia
2019/12/04 全球购物
什么是Assembly(程序集)
2014/09/14 面试题
哈弗商学院毕业生求职信
2014/02/26 职场文书
安全先进个人材料
2014/12/29 职场文书
餐厅如何利用“营销策略”扭转亏本局面
2019/10/15 职场文书
聊聊基于pytorch实现Resnet对本地数据集的训练问题
2022/03/25 Python
python多次执行绘制条形图
2022/04/20 Python