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装饰器使用方法实例
Nov 21 Python
使用Python的Flask框架来搭建第一个Web应用程序
Jun 04 Python
python搭建虚拟环境的步骤详解
Sep 27 Python
python与php实现分割文件代码
Mar 06 Python
Python之文字转图片方法
May 10 Python
Anaconda 离线安装 python 包的操作方法
Jun 11 Python
详解python中Numpy的属性与创建矩阵
Sep 10 Python
django富文本编辑器的实现示例
Apr 10 Python
python字符串替换第一个字符串的方法
Jun 26 Python
python pip源配置,pip配置文件存放位置的方法
Jul 12 Python
python collections模块的使用
Oct 16 Python
Python os库常用操作代码汇总
Nov 03 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 数组遍历的差异(array_diff 的实现)
2008/03/23 PHP
php教程 插件机制在PHP中实现方案
2012/11/02 PHP
thinkphp模板输出技巧汇总
2014/11/24 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
2016/11/15 PHP
php图形jpgraph操作实例分析
2017/02/22 PHP
PHP运用foreach神奇的转换数组(实例讲解)
2018/02/01 PHP
在js中判断checkboxlist(.net控件客户端id)是否有选中
2013/04/11 Javascript
js获取某月的最后一天日期的简单实例
2013/06/22 Javascript
jQuery老黄历完整实现方法
2015/01/16 Javascript
HTML中使背景图片自适应浏览器大小实例详解
2017/04/06 Javascript
详解Nodejs之静态资源处理
2017/06/05 NodeJs
详谈js对url进行编码和解码(三种方式的区别)
2017/08/16 Javascript
vue实现分页的三种效果
2020/06/23 Javascript
vue通过接口直接下载java生成好的Excel表格案例
2020/10/26 Javascript
[05:06]DOTA2-DPC中国联赛 正赛 VG vs Magma选手采访
2021/03/11 DOTA
Python 过滤字符串的技巧,map与itertools.imap
2008/09/06 Python
python获取点击的坐标画图形的方法
2019/07/09 Python
python 定时器每天就执行一次的实现代码
2019/08/14 Python
Python3 使用pillow库生成随机验证码
2019/08/26 Python
python清空命令行方式
2020/01/13 Python
详解PyQt5中textBrowser显示print语句输出的简单方法
2020/08/07 Python
分享一个H5原生form表单的checkbox特效代码
2018/02/26 HTML / CSS
简单html5代码获取地理位置
2014/03/31 HTML / CSS
canvas进阶之如何画出平滑的曲线
2018/10/15 HTML / CSS
美国高端婴童品牌:Hanna Andersson
2016/10/30 全球购物
医院护士专业个人的求职信
2013/12/09 职场文书
初中考试作弊检讨书
2014/02/01 职场文书
国旗下的演讲稿
2014/05/08 职场文书
政府信息公开实施方案
2014/05/09 职场文书
医学专业自荐信
2014/06/14 职场文书
2014年机关党建工作总结
2014/11/11 职场文书
单位考核聘任报告
2015/03/02 职场文书
建筑工程材料员岗位职责
2015/04/11 职场文书
储备店长岗位职责
2015/04/14 职场文书
python爬取新闻门户网站的示例
2021/04/25 Python
python之json文件转xml文件案例讲解
2021/08/07 Python