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学习手册中的python多态示例代码
Jan 21 Python
Python中字符编码简介、方法及使用建议
Jan 08 Python
Python pickle模块用法实例
Apr 14 Python
Python实现基本线性数据结构
Aug 22 Python
快速了解Python开发中的cookie及简单代码示例
Jan 17 Python
使用Python监控文件内容变化代码实例
Jun 04 Python
用Python将mysql数据导出成json的方法
Aug 21 Python
解决Pycharm运行时找不到文件的问题
Oct 29 Python
Python解释器以及PyCharm的安装教程图文详解
Feb 26 Python
python温度转换华氏温度实现代码
Dec 06 Python
python plt.plot bar 如何设置绘图尺寸大小
Jun 01 Python
Python 类,对象,数据分类,函数参数传递详解
Sep 25 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中运用jQuery的Ajax跨域调用实现代码
2012/02/21 PHP
php实现四舍五入的方法小结
2015/03/03 PHP
php设计模式之代理模式分析【星际争霸游戏案例】
2020/03/23 PHP
文本框只能选择数据到文本框禁止手动输入
2013/11/22 Javascript
浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入
2016/01/19 Javascript
JavaScript Ajax编程 应用篇
2016/07/02 Javascript
常用的js验证和数据处理总结
2016/08/02 Javascript
angular实现IM聊天图片发送实例
2017/05/08 Javascript
JS简单实现动态添加HTML标记的方法示例
2018/04/08 Javascript
vuex 动态注册方法 registerModule的实现
2019/07/03 Javascript
JS如何把字符串转换成json
2020/02/21 Javascript
JavaScript实现简单进度条效果
2020/03/25 Javascript
VueJS实现用户管理系统
2020/05/29 Javascript
[50:58]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 Mineski vs EG
2018/04/03 DOTA
python使用Flask框架获取用户IP地址的方法
2015/03/21 Python
python获取当前时间对应unix时间戳的方法
2015/05/15 Python
Python用Bottle轻量级框架进行Web开发
2016/06/08 Python
深入理解Python中变量赋值的问题
2017/01/12 Python
Python运算符重载详解及实例代码
2017/03/07 Python
利用Python如何实现一个小说网站雏形
2018/11/23 Python
Python中最大递归深度值的探讨
2019/03/05 Python
详解pandas的外部数据导入与常用方法
2019/05/01 Python
基于python二叉树的构造和打印例子
2019/08/09 Python
python 读取更新中的log 或其它文本方式
2019/12/24 Python
Python制作运行进度条的实现效果(代码运行不无聊)
2021/02/24 Python
Skyscanner阿联酋:全球领先的旅游搜索平台
2017/11/25 全球购物
微软日本官方网站:Microsoft日本
2017/11/26 全球购物
常务副总经理岗位职责
2014/04/12 职场文书
抵押贷款承诺书
2014/05/30 职场文书
学生安全责任书模板
2014/07/25 职场文书
2014年个人教学工作总结
2014/12/09 职场文书
顶岗实习计划书
2015/01/16 职场文书
研究生给导师的自荐信
2015/03/06 职场文书
2016年党员干部廉政承诺书
2016/03/24 职场文书
教你使用pyinstaller打包Python教程
2021/05/27 Python
深入理解mysql事务隔离级别和存储引擎
2022/04/12 MySQL