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代码真的很爽
Aug 26 Python
python自然语言编码转换模块codecs介绍
Apr 08 Python
Python使用pygame模块编写俄罗斯方块游戏的代码实例
Dec 08 Python
对web.py设置favicon.ico的方法详解
Dec 04 Python
在Pycharm中设置默认自动换行的方法
Jan 16 Python
python实现比较类的两个instance(对象)是否相等的方法分析
Jun 26 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
Mar 09 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
Apr 07 Python
如何用python处理excel表格
Jun 09 Python
keras-siamese用自己的数据集实现详解
Jun 10 Python
Django静态文件加载失败解决方案
Aug 26 Python
一文读懂python Scrapy爬虫框架
Feb 24 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中用PDO查询Mysql来避免SQL注入风险的方法
2013/04/25 PHP
关于jQuery参考实例2.0 用jQuery选择元素
2013/04/07 Javascript
兼容IE和Firefox火狐的上下、左右循环无间断滚动JS代码
2013/04/19 Javascript
Javascript实现页面跳转的几种方式分享
2013/10/26 Javascript
javasciprt下jquery函数$.post执行无响应的解决方法
2014/03/13 Javascript
js+css实现文字散开重组动画特效代码分享
2015/08/21 Javascript
js验证身份证号有效性并提示对应信息
2015/10/19 Javascript
学习JavaScript设计模式(策略模式)
2015/11/26 Javascript
JavaScript 下载svg图片为png格式
2018/06/21 Javascript
ES6的Fetch异步请求的实现方法
2018/12/07 Javascript
微信小程序实现判断是分享到群还是个人功能示例
2019/05/03 Javascript
Vue实现push数组并删除的例子
2019/11/01 Javascript
深入理解 TypeScript Reflect Metadata
2019/12/12 Javascript
JavaScript设计模式--简单工厂模式实例分析【XHR工厂案例】
2020/05/23 Javascript
python中使用smtplib和email模块发送邮件实例
2014/04/22 Python
Python获取当前公网ip并自动断开宽带连接实例代码
2018/01/12 Python
对Python 2.7 pandas 中的read_excel详解
2018/05/04 Python
对python中array.sum(axis=?)的用法介绍
2018/06/28 Python
对python3 中方法各种参数和返回值详解
2018/12/15 Python
新手入门学习python Numpy基础操作
2020/03/02 Python
python shapely.geometry.polygon任意两个四边形的IOU计算实例
2020/04/12 Python
Jupyter notebook如何实现指定浏览器打开
2020/05/13 Python
HTML5本地存储之Web Storage应用介绍
2013/01/06 HTML / CSS
Nike德国官网:Nike.com (DE)
2018/11/13 全球购物
Diesel美国网上商店:意大利牛仔时装品牌
2020/12/10 全球购物
英语专业大学生求职简历的自我评价
2013/10/18 职场文书
最新的咖啡店创业计划书
2013/12/30 职场文书
求职信内容怎么写
2014/05/26 职场文书
无保留意见审计报告
2015/06/05 职场文书
个人合作协议范本
2015/08/06 职场文书
大学新生入学感想
2015/08/07 职场文书
爱国主义主题班会
2015/08/14 职场文书
《飘》英文读后感五篇
2019/10/11 职场文书
SQL注入详解及防范方法
2021/12/06 MySQL
Python线程池与GIL全局锁实现抽奖小案例
2022/04/13 Python
PostgreSQL怎么创建分区表详解
2022/06/25 PostgreSQL