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之eval()函数危险性浅析
Jul 03 Python
Python实现简单的可逆加密程序实例
Mar 05 Python
Python获取文件所在目录和文件名的方法
Jan 12 Python
使用Python编写Prometheus监控的方法
Oct 15 Python
python多线程抽象编程模型详解
Mar 20 Python
python的json中方法及jsonpath模块用法分析
Dec 06 Python
python 已知平行四边形三个点,求第四个点的案例
Apr 12 Python
keras中的loss、optimizer、metrics用法
Jun 15 Python
利用python绘制中国地图(含省界、河流等)
Sep 21 Python
如何在pycharm中安装第三方包
Oct 27 Python
python 元组和列表的区别
Dec 30 Python
python实现批量移动文件
Apr 05 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 之 没有mysql支持时的替代方案
2006/10/09 PHP
php 正则 过滤html 的超链接
2009/06/02 PHP
php 网上商城促销设计实例代码
2012/02/17 PHP
无需重新编译php加入ftp扩展的解决方法
2013/02/07 PHP
探讨如何使用SimpleXML函数来加载和解析XML文档
2013/06/07 PHP
JavaScript 捕获窗口关闭事件
2009/07/26 Javascript
分享20款好玩的jQuery游戏
2011/04/17 Javascript
ExtJS4给Combobox设置列表中的默认值示例
2014/05/02 Javascript
利用函数的惰性载入提高javascript代码执行效率
2014/05/05 Javascript
Javascript玩转继承(二)
2014/05/08 Javascript
jquery实现保存已选用户
2014/07/21 Javascript
js验证上传图片的方法
2015/05/12 Javascript
Bootstrap进度条组件知识详解
2016/05/01 Javascript
jQuery悬停文字提示框插件jquery.tooltipster.js用法示例【附demo源码下载】
2016/07/19 Javascript
JS动态计算移动端rem的解决方案
2016/10/14 Javascript
JavaScript排序算法动画演示效果的实现方法
2016/10/18 Javascript
bootstrap IE8 兼容性处理
2017/03/22 Javascript
NodeJs的fs读写删除移动监听
2017/04/28 NodeJs
jquery ui 实现 tab标签功能示例【测试可用】
2019/07/25 jQuery
vue3为什么要用proxy替代defineProperty
2020/10/19 Javascript
[04:26]2014DOTA2西雅图国际邀请赛 总决赛TOPPLAY
2014/07/22 DOTA
python利用Guetzli批量压缩图片
2017/03/23 Python
python文字转语音实现过程解析
2019/11/12 Python
Python模拟FTP文件服务器的操作方法
2020/02/18 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
2020/04/24 Python
Python如何避免文件同名产生覆盖
2020/06/09 Python
用于ETL的Python数据转换工具详解
2020/07/21 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
香港太阳眼镜网上商店:SmartBuyGlasses香港
2016/07/22 全球购物
大学生优秀班干部事迹材料
2014/05/26 职场文书
党员“四风”问题批评与自我批评思想汇报
2014/10/06 职场文书
中学生学习保证书
2015/02/26 职场文书
2015年学校财务工作总结
2015/05/19 职场文书
宣传委员竞选稿
2015/11/19 职场文书
Go语言 详解net的tcp服务
2022/04/14 Golang
CSS 鼠标选中文字后改变背景色的实现代码
2023/05/21 HTML / CSS