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 version 2.7 required, which was not found in the registry
Aug 26 Python
编写Python脚本来获取mp3文件tag信息的教程
May 04 Python
python中的全局变量用法分析
Jun 09 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
Jan 29 Python
转换科学计数法的数值字符串为decimal类型的方法
Jul 16 Python
django如何自己创建一个中间件
Jul 24 Python
Django 自定义分页器的实现代码
Nov 24 Python
使用 Python 遍历目录树的方法
Feb 29 Python
jupyter notebook 实现matplotlib图动态刷新
Apr 22 Python
matplotlib基础绘图命令之bar的使用方法
Aug 13 Python
Django配置跨域并开发测试接口
Nov 04 Python
Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)
May 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进阶学习之反射基本概念与用法分析
2019/06/18 PHP
javascript setinterval 的正确语法如何书写
2014/06/17 Javascript
JavaScript实现N皇后问题算法谜题解答
2014/12/29 Javascript
js读取csv文件并使用json显示出来
2015/01/09 Javascript
使用JavaScript制作一个简单的计数器的方法
2015/07/07 Javascript
Jquery简单分页实现方法
2015/07/24 Javascript
编写高性能Javascript代码的N条建议
2015/10/12 Javascript
js时间戳转为日期格式的方法
2015/12/28 Javascript
关于微信上网页图片点击全屏放大效果
2016/12/19 Javascript
vue-router 路由基础的详解
2017/10/17 Javascript
详解如何使用webpack在vue项目中写jsx语法
2017/11/08 Javascript
解决vue项目报错webpackJsonp is not defined问题
2018/03/14 Javascript
jQuery实现动态添加和删除input框实例代码
2019/03/26 jQuery
swiper4实现移动端导航栏tab滑动切换
2020/10/16 Javascript
代码块高亮可复制显示js插件highlight.js+clipboard.js整合
2021/02/15 Javascript
Django实现图片文字同时提交的方法
2015/05/26 Python
python实现文本去重且不打乱原本顺序
2016/01/26 Python
Python利用Nagios增加微信报警通知的功能
2016/02/18 Python
python 实现在Excel末尾增加新行
2018/05/02 Python
pandas.DataFrame.to_json按行转json的方法
2018/06/05 Python
tensorflow 输出权重到csv或txt的实例
2018/06/14 Python
Python数据类型之String字符串实例详解
2019/05/08 Python
Python3+PyInstall+Sciter解决报错缺少dll、html等文件问题
2019/07/15 Python
Python JSON编解码方式原理详解
2020/01/20 Python
Python3基于plotly模块保存图片表格
2020/08/03 Python
python使用多线程查询数据库的实现示例
2020/08/17 Python
python中time tzset()函数实例用法
2021/02/18 Python
举例说明类变量和实例变量的区别
2016/06/30 面试题
毕业学生推荐信
2013/12/01 职场文书
村级换届选举方案
2014/05/10 职场文书
竞聘上岗演讲
2014/05/19 职场文书
2014年教师节红领巾广播稿
2014/09/10 职场文书
2014四风问题对照检查材料范文
2014/09/15 职场文书
2015年仓管员工作总结
2015/04/21 职场文书
安全生产隐患排查制度
2015/08/05 职场文书
vue @ ~ 相对路径 路径别名设置方式
2022/06/05 Vue.js