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分析nignx访问日志脚本分享
Feb 26 Python
把项目从Python2.x移植到Python3.x的经验总结
Apr 20 Python
Python序列操作之进阶篇
Dec 08 Python
Django rest framework基本介绍与代码示例
Jan 26 Python
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
Jun 04 Python
Python爬虫——爬取豆瓣电影Top250代码实例
Apr 17 Python
用python建立两个Y轴的XY曲线图方法
Jul 08 Python
python学生管理系统的实现
Apr 05 Python
解决jupyter运行pyqt代码内核重启的问题
Apr 16 Python
python3.7中安装paddleocr及paddlepaddle包的多种方法
Nov 27 Python
快速解决pymongo操作mongodb的时区问题
Dec 05 Python
python中的对数log函数表示及用法
Dec 09 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
四月新番又没了,《Re:从零开始的异世界生活》第二季延期至7月播出
2020/05/06 日漫
php中http_build_query 的一个问题
2012/03/25 PHP
yii2.0之GridView自定义按钮和链接用法
2014/12/15 PHP
php 实现Hash表功能实例详解
2016/11/29 PHP
老生常谈PHP 文件写入和读取(必看篇)
2017/05/22 PHP
IE与Firefox在JavaScript上的7个不同句法分享
2011/10/30 Javascript
40款非常有用的 jQuery 插件推荐(系列一)
2011/12/21 Javascript
js 实现菜单左右滚动显示示例介绍
2013/11/21 Javascript
jquery实现点击向下展开菜单项(伸缩导航)效果
2015/08/22 Javascript
三种AngularJS中获取数据源的方式
2016/02/02 Javascript
JavaScript代码生成PDF文件的方法
2016/02/26 Javascript
js实现九宫格的随机颜色跳转
2017/02/19 Javascript
Vue前端开发规范整理(推荐)
2018/04/23 Javascript
Vue2.0实现调用摄像头进行拍照功能 exif.js实现图片上传功能
2018/04/28 Javascript
vue 之 css module的使用方法
2018/12/04 Javascript
jquery实现二级导航下拉菜单效果实例
2019/05/14 jQuery
JavaScript数组去重实现方法小结
2020/01/17 Javascript
微信小程序实现底部弹出框
2020/11/18 Javascript
Python常用列表数据结构小结
2014/08/06 Python
浅谈五大Python Web框架
2017/03/20 Python
Python装饰器用法示例小结
2018/02/11 Python
python 定义类时,实现内部方法的互相调用
2019/12/25 Python
np.dot()函数的用法详解
2020/01/17 Python
python 将列表里的字典元素合并为一个字典实例
2020/09/01 Python
用python实现一个简单的验证码
2020/12/09 Python
Html5跳转到APP指定页面的实现
2020/01/14 HTML / CSS
安踏官方商城:anta.cn
2019/12/16 全球购物
高三自我鉴定怎么写
2013/10/19 职场文书
大学生学习生活的自我评价
2013/11/01 职场文书
电子商务专员岗位职责
2013/12/11 职场文书
细节决定成败演讲稿
2014/05/12 职场文书
大学生求职信范文
2014/05/24 职场文书
三月雷锋月活动总结
2014/07/03 职场文书
2014党的群众路线教育实践活动总结材料
2014/10/31 职场文书
2015年财务部年度工作总结
2015/05/19 职场文书
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
2022/04/06 Python