python使用pdfminer解析pdf文件的方法示例

作者:kongxx 时间:2023-07-31 00:36:47 

最近要做个从 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)

来源:https://blog.csdn.net/kongxx/article/details/85107847

标签:pdfminer,解析,pdf
0
投稿

猜你喜欢

  • python黑魔法之编码转换

    2022-08-11 10:03:41
  • Python unittest装饰器实现原理及代码

    2022-05-06 22:33:49
  • 5分钟快速掌握JS中var、let和const的异同

    2024-05-09 15:05:49
  • JS中ESModule和commonjs介绍及使用区别

    2023-10-20 22:23:51
  • python解释模型库Shap实现机器学习模型输出可视化

    2022-04-27 08:00:10
  • python用WxPython库实现无边框窗体和透明窗体实现方法详解

    2021-09-04 18:48:45
  • python3实现微型的web服务器

    2021-03-03 09:00:49
  • python解决js文件utf-8编码乱码问题(推荐)

    2023-03-19 04:55:27
  • 基于Python matplotlib库绘制箱线图

    2021-09-04 22:23:24
  • 实例操作MySQL短链接

    2024-01-16 00:07:42
  • Python入门教程(二十六)Python的模块

    2022-09-03 08:56:22
  • python实现LRU热点缓存及原理

    2022-01-08 01:26:15
  • 利用Pytorch实现ResNet网络构建及模型训练

    2022-02-24 19:57:59
  • 6个卓越Web设计细节

    2010-03-29 12:56:00
  • Python爬虫基础之XPath语法与lxml库的用法详解

    2022-07-03 20:56:06
  • ASP 快速执行网页

    2020-07-07 11:14:17
  • Python scikit-learn 做线性回归的示例代码

    2022-05-03 11:00:54
  • Python使用future处理并发问题方案详解

    2022-12-10 18:16:53
  • 详解Golang如何实现支持随机删除元素的堆

    2024-02-22 20:04:53
  • flask中的wtforms使用方法

    2021-08-21 02:46:52
  • asp之家 网络编程 m.aspxhome.com