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写的贪吃蛇游戏例子
Jun 16 Python
python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
Jul 18 Python
Python线程的两种编程方式
Apr 14 Python
利用numpy+matplotlib绘图的基本操作教程
May 03 Python
Python编程给numpy矩阵添加一列方法示例
Dec 04 Python
python实现简易版计算器
Jun 22 Python
Python用 KNN 进行验证码识别的实现方法
Feb 06 Python
Django中多种重定向方法使用详解
Jul 17 Python
Python实现自动签到脚本的示例代码
Aug 19 Python
Python操作Word批量生成合同的实现示例
Aug 28 Python
python中remove函数的踩坑记录
Jan 04 Python
Python pyecharts案例超市4年数据可视化分析
Aug 14 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
How do I change MySQL timezone?
2008/03/26 PHP
php自动识别文件编码并转换为UTF-8的方法
2014/06/12 PHP
PHP临时文件的安全性分析
2014/07/04 PHP
PHP学习笔记之php文件操作
2016/06/03 PHP
可以支持多中格式的JS键盘
2007/05/02 Javascript
HTML复选框和单选框 checkbox和radio事件介绍
2012/12/12 Javascript
jquery制作搜狐快站页面效果示例分享
2014/02/21 Javascript
JavaScript代码应该放在HTML代码哪个位置比较好?
2014/10/16 Javascript
javascript中Date对象的使用总结
2016/11/21 Javascript
JS瀑布流实现方法实例分析
2016/12/19 Javascript
详解在vue-cli中引用jQuery、bootstrap以及使用sass、less编写css
2017/11/08 jQuery
基于VUE移动音乐WEBAPP跨域请求失败的解决方法
2018/01/16 Javascript
微信小程序如何获取用户收货地址
2018/11/27 Javascript
小程序getLocation需要在app.json中声明permission字段
2019/04/04 Javascript
node.js express框架实现文件上传与下载功能实例详解
2019/10/15 Javascript
浅谈vue单页面中有多个echarts图表时的公用代码写法
2020/07/19 Javascript
[01:16]DOTA2小知识课堂 Ep.03 芒果树无伤肉山
2019/12/05 DOTA
Python动态加载模块的3种方法
2014/11/22 Python
Python编程之字符串模板(Template)用法实例分析
2017/07/22 Python
Python中的单下划线和双下划线使用场景详解
2019/09/09 Python
Django框架序列化与反序列化操作详解
2019/11/01 Python
python将邻接矩阵输出成图的实现
2019/11/21 Python
Python字典底层实现原理详解
2019/12/18 Python
python requests包的request()函数中的参数-params和data的区别介绍
2020/05/05 Python
css3教程之倾斜页面
2014/01/27 HTML / CSS
以设计师精品品质提供快速时尚:PopJulia
2018/01/09 全球购物
惊艳的手工时装首饰:Migonne Gavigan
2018/02/23 全球购物
您附近的水疗和健康场所:Spafinder(美国)
2019/07/05 全球购物
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
Java面试题:Java类的Main方法如果是Private将会怎么样
2016/08/18 面试题
班班通校本培训方案
2014/03/12 职场文书
新闻专业毕业生求职信
2014/08/08 职场文书
房屋维修申请报告
2015/05/18 职场文书
2019最新婚庆对联集锦!
2019/07/10 职场文书
springboot中一些比较常用的注解总结
2021/06/11 Java/Android
带你了解Java中的ForkJoin
2022/04/28 Java/Android