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 ip正则式
May 07 Python
跟老齐学Python之折腾一下目录
Oct 24 Python
用Python进行基础的函数式编程的教程
Mar 31 Python
详解Python中的文本处理
Apr 11 Python
Python求导数的方法
May 09 Python
Python字符串处理之count()方法的使用
May 18 Python
PyQt5每天必学之日历控件QCalendarWidget
Apr 19 Python
python3+PyQt5实现自定义窗口部件Counters
Apr 20 Python
关于python写入文件自动换行的问题
Jun 23 Python
django model的update时auto_now不被更新的原因及解决方式
Apr 01 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
Jun 04 Python
python在package下继续嵌套一个package
Apr 14 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实现上传图片文件代码
2015/07/19 PHP
Yii的Srbac插件用法详解
2016/07/14 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
2017/08/18 PHP
控制打印时页眉角的代码
2007/02/08 Javascript
如何做到打开一个页面,过几分钟自动转到另一页面
2007/04/20 Javascript
jQuery-ui中自动完成实现方法
2010/06/10 Javascript
Jquery replace 字符替换实现代码
2010/12/02 Javascript
用Jquery实现多级下拉框无刷新的联动
2010/12/22 Javascript
JavaScript数组函数unshift、shift、pop、push使用实例
2014/08/27 Javascript
jquery实现点击弹出带标题栏的弹出层(从右上角飞入)效果
2015/09/19 Javascript
JavaScript实现标题栏文字轮播效果代码
2015/10/24 Javascript
AngulerJS学习之按需动态加载文件
2017/02/13 Javascript
BootstrapValidator实现注册校验和登录错误提示效果
2017/03/10 Javascript
微信小程序开发教程之增加mixin扩展
2017/08/09 Javascript
webpack4 升级迁移的实现
2018/09/12 Javascript
React手稿之 React-Saga的详解
2018/11/12 Javascript
推荐几个不错的console调试技巧实现
2019/12/20 Javascript
详解如何在Javascript中使用Object.freeze()
2020/10/18 Javascript
vue祖孙组件之间的数据传递案例
2020/12/07 Vue.js
python pdb调试方法分享
2014/01/21 Python
Python基础中所出现的异常报错总结
2016/11/19 Python
Python3.5集合及其常见运算实例详解
2019/05/01 Python
python构建指数平滑预测模型示例
2019/11/21 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
2020/02/27 Python
TensorFlow2.1.0最新版本安装详细教程
2020/04/08 Python
python 图像增强算法实现详解
2021/01/24 Python
canvas 基础之图像处理的使用
2020/04/10 HTML / CSS
保加利亚手表、香水、化妆品和珠宝购物网站:Brasty.bg
2020/04/22 全球购物
一些PHP的面试题
2015/05/06 面试题
部队领导证婚词
2014/01/12 职场文书
多媒体专业自我鉴定
2014/02/28 职场文书
应届生找工作求职信
2014/06/24 职场文书
党的群众路线教育实践活动心得体会(医院)
2014/11/03 职场文书
个人落户申请书怎么写?
2019/06/28 职场文书
该怎么书写道歉信?
2019/07/03 职场文书
阿里云服务器部署RabbitMQ集群的详细教程
2022/06/01 Servers