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将阿拉伯数字转换为罗马数字的方法
Jul 10 Python
Python序列循环移位的3种方法推荐
Apr 09 Python
python正则表达式之对号入座篇
Jul 24 Python
Python中实例化class的执行顺序示例详解
Oct 14 Python
django模板结构优化的方法
Feb 28 Python
python3下载抖音视频的完整代码
Jun 05 Python
Django 对象关系映射(ORM)源码详解
Aug 06 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
Jan 06 Python
python读取ini配置的类封装代码实例
Jan 08 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
Jul 31 Python
Python中常见的数制转换有哪些
May 27 Python
python 如何执行控制台命令与操作剪切板
May 20 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
如何使用FireFox插件FirePHP调试PHP
2013/07/23 PHP
Thinkphp3.2实用篇之计算型验证码示例
2017/02/09 PHP
javascript this用法小结
2008/12/19 Javascript
JavaScript设置IFrame高度自适应(兼容各主流浏览器)
2013/06/05 Javascript
JS实现OCX控件的事件响应示例
2014/09/17 Javascript
jQuery实现设置、移除文本框默认值功能
2015/01/13 Javascript
javascript将异步校验表单改写为同步表单
2015/01/27 Javascript
Javascript函数式编程语言
2015/10/11 Javascript
jquery判断密码强度的验证代码
2020/04/22 Javascript
JavaScript判断浏览器对CSS3属性是否支持的多种方法
2016/11/13 Javascript
Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件
2017/09/18 Javascript
Vue项目使用CDN优化首屏加载问题
2018/04/01 Javascript
layui table去掉右侧滑动条的实现方法
2019/09/05 Javascript
python自动化测试之setUp与tearDown实例
2014/09/28 Python
Python中的choice()方法使用详解
2015/05/15 Python
Python中用于转换字母为小写的lower()方法使用简介
2015/05/19 Python
Python的Django应用程序解决AJAX跨域访问问题的方法
2016/05/31 Python
Python 备份程序代码实现
2017/03/06 Python
Python中字典的浅拷贝与深拷贝用法实例分析
2018/01/02 Python
利用numpy和pandas处理csv文件中的时间方法
2018/04/19 Python
详解Python中第三方库Faker
2020/09/25 Python
IE支持HTML5的解决方法
2009/10/20 HTML / CSS
HTML5开发动态音频图的实现
2020/07/02 HTML / CSS
Notino意大利:购买香水和化妆品
2018/11/14 全球购物
美国领先的个性化礼品商城:Personalization Mall
2019/07/27 全球购物
俄罗斯苹果优质经销商商店:iPort
2020/05/27 全球购物
销售高级职员求职信
2013/10/29 职场文书
酒店前台接待岗位职责
2013/12/03 职场文书
校本教研工作制度
2014/01/22 职场文书
求职信需要的五点内容
2014/02/01 职场文书
幼儿园优秀教师事迹
2014/02/13 职场文书
五一劳动节活动记录
2014/03/23 职场文书
节约用水演讲稿
2014/05/21 职场文书
《去年的树》教学反思
2016/02/18 职场文书
MATLAB 如何求取离散点的曲率最大值
2021/04/16 Python
PHP面试题 wakeup魔法 Ezpop pop序列化与反序列化
2022/04/11 PHP