Python提取PDF内容的方法(文本、图像、线条等)


Posted in Python onSeptember 25, 2019

1.安装PDFminer3k

使用pip 命令安装

pip install pdfminer3k

2.编写测试

你可以在这里获得官方参考:PDFMiner

如果你不喜欢看英文的官方文档,这里的翻译也许对你有帮助:中文PDFMiner文档

下面的程序,我拓展了官方给出的例子,你可以通过这个例子统计出来你的pdf文件一共包含哪些内容,比如文本框,曲线,图片等

#!/usr/bin/python
# -*- coding: utf-8 -*-

__author__ = 'yooongchun'

import sys
import importlib
importlib.reload(sys)

from pdfminer.pdfparser import PDFParser,PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import *
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed

'''
解析pdf文件,获取文件中包含的各种对象
'''


# 解析pdf文件函数
def parse(pdf_path):
  fp = open(pdf_path, 'rb') # 以二进制读模式打开
  # 用文件对象来创建一个pdf文档分析器
  parser = PDFParser(fp)
  # 创建一个PDF文档
  doc = PDFDocument()
  # 连接分析器 与文档对象
  parser.set_document(doc)
  doc.set_parser(parser)

  # 提供初始化密码
  # 如果没有密码 就创建一个空的字符串
  doc.initialize()

  # 检测文档是否提供txt转换,不提供就忽略
  if not doc.is_extractable:
    raise PDFTextExtractionNotAllowed
  else:
    # 创建PDf 资源管理器 来管理共享资源
    rsrcmgr = PDFResourceManager()
    # 创建一个PDF设备对象
    laparams = LAParams()
    device = PDFPageAggregator(rsrcmgr, laparams=laparams)
    # 创建一个PDF解释器对象
    interpreter = PDFPageInterpreter(rsrcmgr, device)

    # 用来计数页面,图片,曲线,figure,水平文本框等对象的数量
    num_page, num_image, num_curve, num_figure, num_TextBoxHorizontal = 0, 0, 0, 0, 0

    # 循环遍历列表,每次处理一个page的内容
    for page in doc.get_pages(): # doc.get_pages() 获取page列表
      num_page += 1 # 页面增一
      interpreter.process_page(page)
      # 接受该页面的LTPage对象
      layout = device.get_result()
      for x in layout:
        if isinstance(x,LTImage): # 图片对象
          num_image += 1
        if isinstance(x,LTCurve): # 曲线对象
          num_curve += 1
        if isinstance(x,LTFigure): # figure对象
          num_figure += 1
        if isinstance(x, LTTextBoxHorizontal): # 获取文本内容
          num_TextBoxHorizontal += 1 # 水平文本框对象增一
          # 保存文本内容
          with open(r'test.txt', 'a') as f:
            results = x.get_text()
            f.write(results + '\n')
    print('对象数量:\n','页面数:%s\n'%num_page,'图片数:%s\n'%num_image,'曲线数:%s\n'%num_curve,'水平文本框:%s\n'
       %num_TextBoxHorizontal)


if __name__ == '__main__':
  pdf_path = r'C:\Users\fanyu\Desktop\pdf\test.pdf'
  parse(pdf_path)

其实在上面的layout 对象中有更多的内容可提取,这个自己按需来写就好,然后对曲线,文本框等对象,都会有位置属性,可直接获取,自己debug 查看以下对象属性获取即可。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python中使用PIL模块对图片进行高斯模糊处理的教程
May 05 Python
Python机器学习之K-Means聚类实现详解
Feb 22 Python
python修改list中所有元素类型的三种方法
Apr 09 Python
python读取中文txt文本的方法
Apr 12 Python
Python中常用的8种字符串操作方法
May 06 Python
详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?
May 07 Python
Python assert语句的简单使用示例
Jul 28 Python
基于Python安装pyecharts所遇的问题及解决方法
Aug 12 Python
python实现最大优先队列
Aug 29 Python
matlab中二维插值函数interp2的使用详解
Apr 22 Python
经验丰富程序员才知道的8种高级Python技巧
Jul 27 Python
Numpy中np.max的用法及np.maximum区别
Nov 27 Python
python使用 request 发送表单数据操作示例
Sep 25 #Python
Python实现PyPDF2处理PDF文件的方法示例
Sep 25 #Python
python mqtt 客户端的实现代码实例
Sep 25 #Python
python实现的登录与提交表单数据功能示例
Sep 25 #Python
python 利用pyttsx3文字转语音过程详解
Sep 25 #Python
python retrying模块的使用方法详解
Sep 25 #Python
Python 实现一个手机号码获取妹子名字的功能
Sep 25 #Python
You might like
怎样才能成为PHP高手?学会“懒惰”的编程
2006/12/05 PHP
10条PHP高级技巧[修正版]
2011/08/02 PHP
PHP设计模式之结构模式的深入解析
2013/06/13 PHP
php输出1000以内质数(素数)示例
2014/02/16 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
2014/08/22 PHP
简单谈谈PHP中的include、include_once、require以及require_once语句
2016/04/23 PHP
基于php流程控制语句和循环控制语句(讲解)
2017/10/23 PHP
iframe 上下滚动条如何默认在下方实现原理
2012/12/10 Javascript
验证手机号码的JS方法分享
2013/09/10 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
2014/04/15 Javascript
JavaScript检测浏览器cookie是否已经启动的方法
2015/02/27 Javascript
谈一谈bootstrap响应式布局
2016/05/23 Javascript
JavaScript将DOM事件处理程序封装为event.js 出现的低级错误问题
2016/08/03 Javascript
详解网站中图片日常使用以及优化手法
2017/01/09 Javascript
js实现自定义进度条效果
2017/03/15 Javascript
jQuery 实时保存页面动态添加的数据的示例
2017/08/14 jQuery
JS中的变量作用域(console版)
2020/07/18 Javascript
基于openlayers实现角度测量功能
2020/09/28 Javascript
element中table高度自适应的实现
2020/10/21 Javascript
[47:10]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第二场 12.16
2020/12/18 DOTA
Python使用Turtle模块绘制五星红旗代码示例
2017/12/11 Python
利用python解决mysql视图导入导出依赖的问题
2017/12/17 Python
python学习基础之循环import及import过程
2018/04/22 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
2020/02/11 Python
使用Python解析Chrome浏览器书签的示例
2020/11/13 Python
Canvas 帧动画吃苹果小游戏
2020/08/05 HTML / CSS
美国知名的时尚购物网站:Anthropologie
2016/12/22 全球购物
法国滑雪假期的专家:Ski Planet
2019/11/02 全球购物
RUIFIER官网:英国奢侈高级珠宝品牌
2020/06/12 全球购物
用Python匹配HTML tag的时候,<.*>和<.*?>有什么区别
2012/11/04 面试题
《燕子专列》教学反思
2014/02/21 职场文书
大学开学计划书
2014/04/30 职场文书
大专生找工作自荐书
2014/06/10 职场文书
《秋天的怀念》教学反思
2016/02/17 职场文书
表扬信范文
2019/04/22 职场文书
详解MySQL的主键查询为什么这么快
2022/04/03 MySQL