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的re模块应用实例
Sep 26 Python
Python抓取淘宝下拉框关键词的方法
Jul 08 Python
深入浅析python继承问题
May 29 Python
用Python进行简单图像识别(验证码)
Jan 19 Python
python删除不需要的python文件方法
Apr 24 Python
Python多继承顺序实例分析
May 26 Python
Python实现计算对象的内存大小示例
Jul 10 Python
python实现局域网内实时通信代码
Dec 22 Python
Python random库使用方法及异常处理方案
Mar 02 Python
python实现从ftp上下载文件的实例方法
Jul 19 Python
Python 远程开关机的方法
Nov 18 Python
Python面向对象之成员相关知识总结
Jun 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排序算法(冒泡排序,快速排序)
2012/10/09 PHP
codeigniter中测试通过的分页类示例
2014/04/17 PHP
常用PHP框架功能对照表
2014/10/23 PHP
php字符串操作针对负值的判断分析
2016/07/28 PHP
PHP递归删除多维数组中的某个值
2017/04/17 PHP
js中判断Object、Array、Function等引用类型对象是否相等
2012/08/29 Javascript
js获取多个tagname的节点数组
2013/09/22 Javascript
一道JS前端闭包面试题解析
2015/12/25 Javascript
基于jQuery的AJAX和JSON实现纯html数据模板
2016/08/09 Javascript
Vue.js系列之项目搭建(1)
2017/01/03 Javascript
JavaScript实现读取与输出XML文件数据的方法示例
2018/06/05 Javascript
使用Layer组件弹出多个对话框(非嵌套)与关闭及刷新的例子
2019/09/25 Javascript
详解Vue.js 作用域、slot用法(单个slot、具名slot)
2019/10/15 Javascript
JavaScript或jQuery 获取option value值方法解析
2020/05/12 jQuery
JQuery获得内容和属性方法解析
2020/05/30 jQuery
JavaScript实现答题评分功能页面
2020/06/24 Javascript
js实现双色球效果
2020/08/02 Javascript
[04:53]DOTA2英雄基础教程 祈求者
2014/01/03 DOTA
[05:15]DOTA2英雄梦之声_第16期_灰烬之灵
2014/06/21 DOTA
python 实现语音聊天机器人的示例代码
2018/12/02 Python
python中时间、日期、时间戳的转换的实现方法
2019/07/06 Python
Python3将数据保存为txt文件的方法
2019/09/12 Python
python pyg2plot的原理知识点总结
2021/02/28 Python
比利时网上药店: Drogisterij.net
2017/03/17 全球购物
采用冷却技术的超自然舒适度:GhostBed床垫
2018/09/18 全球购物
Hanro官网:奢华男士和女士内衣、睡衣和家居服
2018/10/25 全球购物
Topshop美国官网:英国快速时尚品牌
2019/05/16 全球购物
Myprotein西班牙官网:欧洲第一大运动营养品牌
2020/02/24 全球购物
新员工欢迎词
2014/01/12 职场文书
任命书模板
2014/06/04 职场文书
合同意向书范本
2014/07/30 职场文书
个人作风建设自查报告
2014/10/22 职场文书
公司承诺函范文
2015/01/21 职场文书
旷工检讨书大全
2015/08/15 职场文书
小学班主任心得体会
2016/01/07 职场文书
Python实战之大鱼吃小鱼游戏的实现
2022/04/01 Python