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中让MySQL查询结果返回字典类型的方法
Aug 22 Python
在Python中使用base64模块处理字符编码的教程
Apr 28 Python
Python实现的简单模板引擎功能示例
Sep 02 Python
使用Python函数进行模块化的实现
Nov 15 Python
django商品分类及商品数据建模实例详解
Jan 03 Python
Python中求对数方法总结
Mar 10 Python
python将字典内容写入json文件的实例代码
Aug 12 Python
Python logging日志库空间不足问题解决
Sep 14 Python
Python用户自定义异常的实现
Dec 25 Python
详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
Jan 24 Python
Python实现我的世界小游戏源代码
Mar 02 Python
pytorch查看网络参数显存占用量等操作
May 12 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 MYSQL中插入当前时间
2008/04/06 PHP
php计算两个日期时间差(返回年、月、日)
2014/06/19 PHP
getimagesize获取图片尺寸实例
2014/11/15 PHP
浅谈php的优缺点
2015/07/14 PHP
深入解析Laravel5.5中的包自动发现Package Auto Discovery
2017/09/13 PHP
Prototype Hash对象 学习
2009/07/19 Javascript
JavaScript中的this实例分析
2011/04/28 Javascript
js字符串转成JSON
2013/11/07 Javascript
javascript实现设置、获取和删除Cookie的方法
2015/06/01 Javascript
JavaScript中setUTCMilliseconds()方法的使用详解
2015/06/12 Javascript
Bootstrap实现input控件失去焦点时验证
2016/08/04 Javascript
js 文字超出长度用省略号代替,鼠标悬停并以悬浮框显示实例
2016/12/06 Javascript
基于node.js制作简单爬虫教程
2017/06/29 Javascript
JS实现的JSON数组去重算法示例
2018/04/11 Javascript
jQuery插件Validation表单验证详解
2018/05/26 jQuery
JS实现监控微信小程序的原理
2018/06/15 Javascript
详解vue-property-decorator使用手册
2019/07/29 Javascript
webpack + vue 打包生成公共配置文件(域名) 方便动态修改
2019/08/29 Javascript
Vue export import 导入导出的多种方式与区别介绍
2020/02/12 Javascript
Python linecache.getline()读取文件中特定一行的脚本
2008/09/06 Python
DJANGO-ALLAUTH社交用户系统的安装配置
2014/11/18 Python
Python 迭代器工具包【推荐】
2016/05/06 Python
Python 实例方法、类方法、静态方法的区别与作用
2019/08/14 Python
pytorch 在网络中添加可训练参数,修改预训练权重文件的方法
2019/08/17 Python
使用pycharm和pylint检查python代码规范操作
2020/06/09 Python
HTML5 Canvas之测试浏览器是否支持Canvas的方法
2015/01/01 HTML / CSS
毕业生学校推荐信范文
2014/05/21 职场文书
我们的节日元宵活动方案
2014/08/23 职场文书
大学生联谊活动策划书(光棍节)
2014/10/10 职场文书
简易离婚协议书范本2014
2014/10/15 职场文书
2015年幼儿园班主任工作总结
2015/05/12 职场文书
南京南京观后感
2015/06/02 职场文书
工作年限证明范本
2015/06/15 职场文书
导游词之无锡古运河
2019/11/14 职场文书
Django + Taro 前后端分离项目实现企业微信登录功能
2022/04/07 Python
MySql按时,天,周,月进行数据统计
2022/08/14 MySQL