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 元组(Tuple)操作详解
Mar 11 Python
python执行等待程序直到第二天零点的方法
Apr 23 Python
Windows安装Python、pip、easy_install的方法
Mar 05 Python
Python实现的归并排序算法示例
Nov 21 Python
在unittest中使用 logging 模块记录测试数据的方法
Nov 30 Python
Python判断对象是否为文件对象(file object)的三种方法示例
Apr 26 Python
numpy.where() 用法详解
May 27 Python
pyqt5 从本地选择图片 并显示在label上的实例
Jun 13 Python
Python创建或生成列表的操作方法
Jun 19 Python
简单介绍django提供的加密算法
Dec 18 Python
Pytorch对Himmelblau函数的优化详解
Feb 29 Python
python+django+selenium搭建简易自动化测试
Aug 19 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
PHP命名空间(namespace)的使用基础及示例
2014/08/18 PHP
PHP获取指定日期是星期几的实现方法
2016/11/30 PHP
学习thinkphp5.0验证类使用方法
2017/11/16 PHP
一个对于Array的简单扩展
2006/10/03 Javascript
基于jQuery实现左右div自适应高度完全相同的代码
2012/08/09 Javascript
js函数排序的实例代码
2013/07/01 Javascript
Windows 系统下安装和部署Egret的开发环境
2014/07/31 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
2015/01/08 Javascript
解析vue中的$mount
2017/12/21 Javascript
详解React Native 屏幕适配(炒鸡简单的方法)
2018/06/11 Javascript
vue实现键盘输入支付密码功能
2018/08/18 Javascript
详解vue挂载到dom上会发生什么
2019/01/20 Javascript
微信小程序wxs实现吸顶效果
2020/01/08 Javascript
js实现全选和全不选功能
2020/07/28 Javascript
[03:01]2014DOTA2国际邀请赛 DC:我是核弹粉,为Burning和国土祝福
2014/07/13 DOTA
[34:39]Secret vs VG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Python实现把xml或xsl转换为html格式
2015/04/08 Python
Python实现telnet服务器的方法
2015/07/10 Python
python编写简单爬虫资料汇总
2016/03/22 Python
Python判断列表是否已排序的各种方法及其性能分析
2016/06/20 Python
python制作企业邮箱的爆破脚本
2016/10/05 Python
在交互式环境中执行Python程序过程详解
2019/07/12 Python
python实现跨excel sheet复制代码实例
2020/03/03 Python
Django contrib auth authenticate函数源码解析
2020/11/12 Python
html5视频自动横过来自适应页面且点击播放功能的实现
2020/06/03 HTML / CSS
英国著名国际平价时尚男装品牌:Topman
2016/08/27 全球购物
荷兰鞋子在线:Nelson Schoenen
2017/12/25 全球购物
科室工作个人总结的自我评价
2013/10/29 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
供货协议书
2014/04/22 职场文书
爱心活动计划书
2014/04/26 职场文书
上课迟到检讨书300字
2014/10/15 职场文书
三十年同学聚会感言
2015/07/30 职场文书
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
2021/03/29 Python
使用pycharm运行flask应用程序的详细教程
2021/06/07 Python
mysql事务隔离级别详情
2021/10/24 MySQL