Python解析并读取PDF文件内容的方法


Posted in Python onMay 08, 2018

本文实例讲述了Python解析并读取PDF文件内容的方法。分享给大家供大家参考,具体如下:

一、问题描述

利用python,去读取pdf文本内容。

Python解析并读取PDF文件内容的方法

二、效果

Python解析并读取PDF文件内容的方法

三、运行环境

python2.7

四、需要安装的库

pip install pdfminer

五、实现源代码

代码1(win64)

# coding=utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import time
time1=time.time()
import os.path
from pdfminer.pdfparser import PDFParser,PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LTTextBoxHorizontal,LAParams
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed
result=[]
class CPdf2TxtManager():
  def __init__(self):
    '''''
    Constructor
    '''
  def changePdfToText(self, filePath):
    file = open(path, 'rb') # 以二进制读模式打开
    #用文件对象来创建一个pdf文档分析器
    praser = PDFParser(file)
    # 创建一个PDF文档
    doc = PDFDocument()
    # 连接分析器 与文档对象
    praser.set_document(doc)
    doc.set_parser(praser)
    # 提供初始化密码
    # 如果没有密码 就创建一个空的字符串
    doc.initialize()
    # 检测文档是否提供txt转换,不提供就忽略
    if not doc.is_extractable:
      raise PDFTextExtractionNotAllowed
    # 创建PDf 资源管理器 来管理共享资源
    rsrcmgr = PDFResourceManager()
    # 创建一个PDF设备对象
    laparams = LAParams()
    device = PDFPageAggregator(rsrcmgr, laparams=laparams)
    # 创建一个PDF解释器对象
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    pdfStr = ''
    # 循环遍历列表,每次处理一个page的内容
    for page in doc.get_pages(): # doc.get_pages() 获取page列表
      interpreter.process_page(page)
      # 接受该页面的LTPage对象
      layout = device.get_result()
      for x in layout:
        if hasattr(x, "get_text"):
          # print x.get_text()
          result.append(x.get_text())
          fileNames = os.path.splitext(filePath)
          with open(fileNames[0] + '.txt','wb') as f:
            results = x.get_text()
            print(results)
            f.write(results + '\n')
if __name__ == '__main__':
  '''''
   解析pdf 文本,保存到txt文件中
  '''
  path = u'C:/data3.pdf'
  pdf2TxtManager = CPdf2TxtManager()
  pdf2TxtManager.changePdfToText(path)
  # print result[0]
  time2 = time.time()
  print u'ok,解析pdf结束!'
  print u'总共耗时:' + str(time2 - time1) + 's'

代码2(win32)

# coding=utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import time
time1=time.time()
import os.path
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFTextExtractionNotAllowed
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage
result=[]
class CPdf2TxtManager():
  def __init__(self):
    '''''
    Constructor
    '''
  def changePdfToText(self, filePath):
    file = open(path, 'rb') # 以二进制读模式打开
    #用文件对象来创建一个pdf文档分析器
    praser = PDFParser(file)
    # 创建一个PDF文档
    doc = PDFDocument(praser)
    # 检测文档是否提供txt转换,不提供就忽略
    if not doc.is_extractable:
      raise PDFTextExtractionNotAllowed
    # 创建PDf 资源管理器 来管理共享资源
    rsrcmgr = PDFResourceManager()
    # 创建一个PDF设备对象
    laparams = LAParams()
    device = PDFPageAggregator(rsrcmgr, laparams=laparams)
    # 创建一个PDF解释器对象
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    pdfStr = ''
    # 循环遍历列表,每次处理一个page的内容
    for page in PDFPage.create_pages(doc): # doc.get_pages() 获取page列表
      interpreter.process_page(page)
      # 接受该页面的LTPage对象
      layout = device.get_result()
      for x in layout:
        if hasattr(x, "get_text"):
          # print x.get_text()
          result.append(x.get_text())
          fileNames = os.path.splitext(filePath)
          with open(fileNames[0] + '.txt','wb') as f:
            results = x.get_text()
            print(results)
            f.write(results + '\n')
if __name__ == '__main__':
  '''''
   解析pdf 文本,保存到txt文件中
  '''
  path = u'C:/36.pdf'
  pdf2TxtManager = CPdf2TxtManager()
  pdf2TxtManager.changePdfToText(path)
  # print result[0]
  time2 = time.time()
  print u'ok,解析pdf结束!'
  print u'总共耗时:' + str(time2 - time1) + 's'

更多Python相关内容感兴趣的读者可查看本站专题:《Python文件与目录操作技巧汇总》、《Python编码操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python编写的com组件发生R6034错误的原因与解决办法
Apr 01 Python
使用Python从有道词典网页获取单词翻译
Jul 03 Python
python爬虫爬取淘宝商品信息
Feb 23 Python
Pycharm 创建 Django admin 用户名和密码的实例
May 30 Python
python 中文件输入输出及os模块对文件系统的操作方法
Aug 27 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
Jan 26 Python
python opencv实现图像边缘检测
Apr 29 Python
Python基础学习之时间转换函数用法详解
Jun 18 Python
python实现按关键字筛选日志文件
Dec 24 Python
详解Python的三种拷贝方式
Feb 11 Python
Django中从mysql数据库中获取数据传到echarts方式
Apr 07 Python
python 实现任务管理清单案例
Apr 25 Python
python-docx修改已存在的Word文档的表格的字体格式方法
May 08 #Python
对Python中gensim库word2vec的使用详解
May 08 #Python
用python处理MS Word的实例讲解
May 08 #Python
基于python批量处理dat文件及科学计算方法详解
May 08 #Python
使用Python通过win32 COM实现Word文档的写入与保存方法
May 08 #Python
Ubuntu下使用python读取doc和docx文档的内容方法
May 08 #Python
儿童编程python入门
May 08 #Python
You might like
全国FM电台频率大全 - 31 新疆维吾尔族自治区
2020/03/11 无线电
PHP安全配置
2006/10/09 PHP
用PHP实现ODBC数据分页显示一例
2006/10/09 PHP
php unset全局变量运用问题的深入解析
2013/06/17 PHP
PHP static局部静态变量和全局静态变量总结
2014/03/02 PHP
composer.lock文件的作用
2016/02/03 PHP
Symfony生成二维码的方法
2016/02/04 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
2019/10/10 PHP
Extjs学习笔记之四 工具栏和菜单
2010/01/07 Javascript
打印json对象的内容及JSON.stringify函数应用
2013/03/29 Javascript
原生JS实现响应式瀑布流布局
2015/04/02 Javascript
bootstrap datepicker限定可选时间范围实现方法
2016/09/28 Javascript
NodeJS和BootStrap分页效果的实现代码
2016/11/07 NodeJs
原生ajax处理json格式数据的实例代码
2016/12/25 Javascript
Node.js中用D3.js的方法示例
2017/01/16 Javascript
使用JavaScript实现点击循环切换图片效果
2017/09/03 Javascript
微信小程序wepy框架学习和使用心得详解
2019/05/24 Javascript
微信小程序实现点击效果
2019/06/21 Javascript
layui 数据表格 点击分页按钮 监听事件的实例
2019/09/02 Javascript
[01:18:43]2014 DOTA2华西杯精英邀请赛5 24 iG VS DK
2014/05/25 DOTA
python使用mysqldb连接数据库操作方法示例详解
2013/12/03 Python
在Python中使用sort()方法进行排序的简单教程
2015/05/21 Python
Python线程详解
2015/06/24 Python
使用Python对Access读写操作
2017/03/30 Python
python实现朴素贝叶斯分类器
2018/03/28 Python
Django中自定义admin Xadmin的实现代码
2019/08/09 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
Canvas中设置width与height的问题浅析
2018/11/01 HTML / CSS
美国渔具店:FishUSA
2019/08/07 全球购物
制药工程专业个人求职自荐信
2014/01/25 职场文书
英语教师岗位职责
2014/03/16 职场文书
化工专业求职信
2014/07/01 职场文书
2015年父亲节寄语
2015/03/23 职场文书
劳动者解除劳动合同通知书
2015/04/16 职场文书
Python的flask接收前台的ajax的post数据和get数据的方法
2021/04/12 Python
深入浅析Redis 集群伸缩原理
2021/05/15 Redis