最近要做个从 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,但是它也可能用于提取一些有意义的内容(比如图片)。

其特征有: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

编程方式

除了命令行方式以外,对于复杂应用场景,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处理pdf实例_python使用pdfminer解析pdf文件的方法示例相关推荐

  1. python selenium爬虫实例_python使用selenium爬虫知乎的方法示例

    说起爬虫一般想到的情况是,使用 python 中都通过 requests 库获取网页内容,然后通过 beautifulSoup 进行筛选文档中的标签和内容.但是这样有个问题就是,容易被反扒机制所拦住. ...

  2. java 解析xls 文件_java简单解析xls文件的方法示例【读取和写入】

    本文实例讲述了java简单解析xls文件的方法.分享给大家供大家参考,具体如下: 读取: import java.io.*; import jxl.*; import jxl.write.*; imp ...

  3. python求数字平均值_Python简单计算数组元素平均值的方法示例

    本文实例讲述了Python简单计算数组元素平均值的方法.分享给大家供大家参考,具体如下: Python 环境:Python 2.7.12 x64 IDE : Wing IDE Professional ...

  4. python辗转相除_Python基于辗转相除法求解最大公约数的方法示例

    Python基于辗转相除法求解最大公约数的方法示例 本文实例讲述了Python基于辗转相除法求解最大公约数的方法.分享给大家供大家参考,具体如下: 之前总结过一次高德纳TAOCP中的最大公约数求解,其 ...

  5. python 播放mp3模块_Python基于pygame模块播放MP3的方法示例

    1 IDLE1 1 IDLE是python创初人Guido van Rossum使用python and Tkinter来创建的一个集成开发环境.要使用I 2018-04-14 为什么使用Python ...

  6. python 修改excel 路径_python更改已存在excel文件的方法

    这篇文章主要介绍了关于python更改已存在excel文件的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 需要用到的包: import xlrd import xlwt impo ...

  7. python处理pdf实例_python 使用pdfminer3k 读取PDF文档的例子

    1.安装 pdfminer3k 通过pip安装: pip install pdfminer3k 下载安装:在网页 https://pypi.org/project/pdfminer3k/1.3.1/# ...

  8. python处理pdf实例_Python程序图片和pdf上文字识别实例

    实例一:先减少背景杂音,再做图片文字识别 为了提高识别率,先用opencv-python对扫描的图片做预处理(减少背景杂音),然后调用pytesseract识别图片上的文字.处理方式就是: 学习Pyt ...

  9. python实现加密字符串_Python实现对字符串的加密解密方法示例

    本文实例讲述了Python实现对字符串的加密解密方法.分享给大家供大家参考,具体如下: 需求是是要将密码存在数据库里,所以要加密解密是可逆的,在数据库里不要有特殊字符,防止数据库备份和恢复中出错. 安 ...

最新文章

  1. 复杂场景下的复杂缺陷检测方法--深度学习算法综述
  2. 自动化Build的方法如下所示
  3. Python Web学习笔记之TCP的3次握手与4次挥手过程
  4. update的内部原理
  5. 伦巴时间步的动作要领_军训动作要领已到,请签收
  6. 线上Go项目的Docker镜像应该怎么构建?
  7. 研究:打乒乓球可预防近视
  8. 好程序员web前端分享常见html5语义化标签
  9. 大数据如何影响企业的决策
  10. 图书管理系统(C语言实现)
  11. android app 马甲包,关于Android多渠道打包和马甲包问题
  12. 第二证券|A股集体收涨,汽车产业链爆发!房地产延续强势
  13. 微商如何用百度来进行引流推广?
  14. 广州:推动电子印章、签名等“应用尽用”,实现政务服务“四免”
  15. Unity UGUI DoTween 学习笔记
  16. 智慧渣土运输管控系统
  17. 快速粘贴与自动填表软件V1.0 注册版
  18. 23/09/2022 c语言细节
  19. 算法报告五--跳马问题
  20. iis下如何配置Rewrite(Rewrite下载与配置)

热门文章

  1. Android学习笔记---26_采用JSON格式返回数据给资讯客户端,效率上要高于xml文件解析和传输
  2. oracle数据库异常---SP2-1503: 无法初始化 Oracle 调用界面 SP2-1503: 无法初始化 Oracle 问题的解决办法
  3. 跑通通过人脸测试心率程序
  4. bzoj1303[CQOI2009]中位数图
  5. c++ tcp 服务器和客户端例子
  6. linux下svn命令
  7. 求一个有序整数数组中和为K的数的对数
  8. linux驱动编写(platform总线和网卡驱动)
  9. 随想录(项目管理中的感受)
  10. 多线程的那点儿事(之顺序锁)