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备份Mysql脚本
Aug 11 Python
Python利用matplotlib生成图片背景及图例透明的效果
Apr 27 Python
浅谈使用Python内置函数getattr实现分发模式
Jan 22 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
Feb 10 Python
浅谈pytorch和Numpy的区别以及相互转换方法
Jul 26 Python
浅析python继承与多重继承
Sep 13 Python
Python 读写文件的操作代码
Sep 20 Python
对python中的乘法dot和对应分量相乘multiply详解
Nov 14 Python
python 使用pdfminer3k 读取PDF文档的例子
Aug 27 Python
python:目标检测模型预测准确度计算方式(基于IoU)
Jan 18 Python
在Tensorflow中实现leakyRelu操作详解(高效)
Jun 30 Python
使用Python提取文本中含有特定字符串的方法示例
Dec 09 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中读取和写入WORD文档的代码
2008/04/09 PHP
使用PHP把HTML生成PDF文件的几个开源项目介绍
2014/11/17 PHP
php实现用户注册密码的crypt加密
2017/06/08 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
jquery 经典动画菜单效果代码
2010/01/26 Javascript
jQuery .attr()和.removeAttr()方法操作元素属性示例
2013/07/16 Javascript
Node.js中JavaScript操作MySQL的常用方法整理
2016/03/01 Javascript
js实现文字超出部分用省略号代替实例代码
2016/09/01 Javascript
原生js实现addclass,removeclass,toggleclasss实例
2016/11/24 Javascript
Vue自定义指令详解
2017/07/28 Javascript
详解Nodejs 通过 fs.createWriteStream 保存文件
2017/10/10 NodeJs
基于vue.js快速搭建图书管理平台
2017/10/29 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
解决vue2.0路由跳转未匹配相应用路由避免出现空白页面的问题
2018/08/24 Javascript
JS字符串补全方法padStart()和padEnd()
2020/05/27 Javascript
[03:54]Ehome出征西雅图 回顾2016国际邀请赛晋级之路
2016/08/02 DOTA
[01:03:37]Secret vs VGJ.S Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
python提取内容关键词的方法
2015/03/16 Python
如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求
2015/10/13 Python
python在Windows下安装setuptools(easy_install工具)步骤详解
2016/07/01 Python
理解python中生成器用法
2017/12/20 Python
如何使用python爬虫爬取要登陆的网站
2019/07/12 Python
pytorch 预训练层的使用方法
2019/08/20 Python
浅析Python语言自带的数据结构有哪些
2019/08/27 Python
用Python 执行cmd命令
2020/12/18 Python
html5 canvas实现跟随鼠标旋转的箭头
2016/03/11 HTML / CSS
HTML5表单验证特性(知识点小结)
2020/03/10 HTML / CSS
eBay澳大利亚站:eBay.com.au
2018/02/02 全球购物
美国一站式电动和手动工具商店:International Tool
2020/11/26 全球购物
J2EE相关知识面试题
2013/08/26 面试题
实习教师个人的自我评价
2013/11/08 职场文书
《中国的气候》教学反思
2014/02/23 职场文书
经典而简洁的婚礼主持词
2014/03/13 职场文书
老干部工作汇报材料
2014/10/28 职场文书
2016年毕业实习心得体会范文
2015/10/09 职场文书
如何设计高效合理的MySQL查询语句
2021/05/26 MySQL