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 相关文章推荐
用map函数来完成Python并行任务的简单示例
Apr 02 Python
Python 提取dict转换为xml/json/table并输出的实现代码
Aug 28 Python
基于Python的XSS测试工具XSStrike使用方法
Jul 29 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
Nov 23 Python
python中csv文件的若干读写方法小结
Jul 04 Python
Django 限制用户访问频率的中间件的实现
Aug 23 Python
Python实现针对json中某个关键字段进行排序操作示例
Dec 25 Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
Jan 04 Python
python中字典按键或键值排序的实现代码
Aug 27 Python
关于Django Models CharField 参数说明
Mar 31 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
Nov 28 Python
解决hive中导入text文件遇到的坑
Apr 07 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/03/31 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
PHP7新功能总结
2019/04/14 PHP
laravel中Redis队列监听中断的分析
2020/09/14 PHP
firefox浏览器不支持innerText的解决方法
2013/08/07 Javascript
Extjs3.0 checkboxGroup 动态添加item实现思路
2013/08/14 Javascript
Bootstrap模态对话框的简单使用
2016/04/29 Javascript
js实现图片切换(动画版)
2016/12/25 Javascript
jQuery Masonry瀑布流布局神器使用详解
2017/05/25 jQuery
使用JavaScript实现alert的实例代码
2017/07/06 Javascript
uni-app从安装到卸载的入门教程
2020/05/15 Javascript
vue实现虚拟列表功能的代码
2020/07/28 Javascript
javaScript代码飘红报错看不懂?读完这篇文章再试试
2020/08/19 Javascript
vue 基于abstract 路由模式 实现页面内嵌的示例代码
2020/12/14 Vue.js
[51:29]Alliance vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python追加元素到列表的方法
2015/07/28 Python
Python中方法链的使用方法
2016/02/23 Python
python 递归深度优先搜索与广度优先搜索算法模拟实现
2018/10/22 Python
python3+selenium自动化测试框架详解
2019/03/17 Python
Python3.5 Pandas模块之Series用法实例分析
2019/04/23 Python
基于python的ini配置文件操作工具类
2019/04/24 Python
Python+OpenCV实现将图像转换为二进制格式
2020/01/09 Python
python实现猜拳游戏
2020/03/04 Python
Python 私有属性和私有方法应用场景分析
2020/06/19 Python
详细分析Python垃圾回收机制
2020/07/01 Python
利用Python实现朋友圈中的九宫格图片效果
2020/09/03 Python
HTML5之WebGL 3D概述(下)—借助类库开发及框架介绍
2013/01/31 HTML / CSS
zooplus德国:便宜地订购动物用品、动物饲料、动物食品
2020/05/06 全球购物
《最可爱的人》教学反思
2014/02/14 职场文书
大学生个人自荐信样本
2014/03/02 职场文书
2014年机关工会工作总结
2014/12/19 职场文书
银行保安拾金不昧表扬稿
2015/05/05 职场文书
物业公司管理制度
2015/08/05 职场文书
高中英语教学反思范文
2016/03/02 职场文书
python通配符之glob模块的使用详解
2021/04/24 Python
前端JavaScript大管家 package.json
2021/11/02 Javascript