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 相关文章推荐
以windows service方式运行Python程序的方法
Jun 03 Python
python实现在windows服务中新建进程的方法
Jun 30 Python
Python模拟三级菜单效果
Sep 11 Python
Python3利用Dlib19.7实现摄像头人脸识别的方法
May 11 Python
python 读取Linux服务器上的文件方法
Dec 27 Python
pycharm打开命令行或Terminal的方法
Jan 16 Python
python pandas写入excel文件的方法示例
Jun 25 Python
cProfile Python性能分析工具使用详解
Jul 22 Python
浅谈Django中的QueryDict元素为数组的坑
Mar 31 Python
Python运行提示缺少模块问题解决方案
Apr 02 Python
keras使用Sequence类调用大规模数据集进行训练的实现
Jun 22 Python
python中pycryto实现数据加密
Apr 29 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 生成短网址原理及代码
2014/01/23 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
2017/03/14 PHP
php 中的信号处理操作实例详解
2020/03/04 PHP
总结一些js自定义的函数
2006/08/05 Javascript
用JavaScript 处理 URL 的两个函数代码
2007/08/13 Javascript
JavaScript 组件之旅(一)分析和设计
2009/10/28 Javascript
js png图片(有含有透明)在IE6中为什么不透明了
2010/02/07 Javascript
jQuery 事件的命名空间简单了解
2013/11/22 Javascript
JS控制网页动态生成任意行列数表格的方法
2015/03/09 Javascript
详解JavaScript树结构
2017/01/09 Javascript
基于JavaScript实现活动倒计时效果
2017/04/20 Javascript
使用vue和datatables进行表格的服务器端分页实例代码
2017/06/07 Javascript
label+input实现按钮开关切换效果的实例
2017/08/16 Javascript
Vue上传组件vue Simple Uploader的用法示例
2017/08/25 Javascript
vue.js移动数组位置,同时更新视图的方法
2018/03/08 Javascript
详解Python的Django框架中的模版相关知识
2015/07/15 Python
python实现简单爬虫功能的示例
2016/10/24 Python
Python中 传递值 和 传递引用 的区别解析
2018/02/22 Python
Python paramiko模块的使用示例
2018/04/11 Python
Django实现支付宝付款和微信支付的示例代码
2018/07/25 Python
Pyinstaller打包.py生成.exe的方法和报错总结
2019/04/02 Python
python实现爬虫抓取小说功能示例【抓取金庸小说】
2019/08/09 Python
win10环境下配置vscode python开发环境的教程详解
2019/10/16 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
2020/04/23 Python
Python实例教程之检索输出月份日历表
2020/12/16 Python
python利用opencv实现颜色检测
2021/02/23 Python
Ado与Ado.net的相同与不同
2014/12/08 面试题
入党转预备思想汇报
2014/01/07 职场文书
大班开学家长寄语
2014/04/04 职场文书
关于梦想的演讲稿
2014/05/05 职场文书
5.12护士节活动总结
2015/02/10 职场文书
年底个人总结范文
2015/03/10 职场文书
2015年教师节贺卡寄语
2015/03/24 职场文书
预备党员半年考察意见
2015/06/01 职场文书
mysql中关键词exists的用法实例详解
2022/06/10 MySQL
zabbix如何添加监控主机和自定义监控项
2022/08/14 Servers