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对数组进行反转的方法
May 20 Python
Python编程使用tkinter模块实现计算器软件完整代码示例
Nov 29 Python
对python制作自己的数据集实例讲解
Dec 12 Python
浅析python的Lambda表达式
Feb 27 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
Sep 07 Python
Python如何操作office实现自动化及win32com.client的运用
Apr 01 Python
python脚本监控logstash进程并邮件告警实例
Apr 28 Python
在tensorflow下利用plt画论文中loss,acc等曲线图实例
Jun 15 Python
详解python datetime模块
Aug 17 Python
python打包生成so文件的实现
Oct 30 Python
Python在线和离线安装第三方库的方法
Oct 31 Python
pymongo insert_many 批量插入的实例
Dec 05 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
Laravel 创建可以传递参数 Console服务的例子
2019/10/14 PHP
Mootools 1.2教程(2) DOM选择器
2009/09/14 Javascript
javascript之bind使用介绍
2011/10/09 Javascript
Ajax执行顺序流程及回调问题分析
2012/12/10 Javascript
不使用浏览器运行javascript代码的方法
2013/07/24 Javascript
Function.prototype.bind用法示例
2013/09/16 Javascript
浅谈javascript中call()、apply()、bind()的用法
2015/04/20 Javascript
Bootstrap table右键功能实现方法
2017/02/20 Javascript
JavaScript 中 apply 、call 的详解
2017/03/21 Javascript
微信小程序 蓝牙的实现实例代码
2017/06/27 Javascript
angular4 如何在全局设置路由跳转动画的方法
2017/08/30 Javascript
利用百度地图API获取当前位置信息的实例
2017/11/06 Javascript
vue实现登录后页面跳转到之前页面
2018/01/07 Javascript
node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能
2018/01/12 Javascript
js设计模式之单例模式原理与用法详解
2019/08/15 Javascript
js实现旋转木马轮播图效果
2020/01/10 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
2020/12/01 Javascript
详解用python实现简单的遗传算法
2018/01/02 Python
更换Django默认的模板引擎为jinja2的实现方法
2018/05/28 Python
Python使用requests提交HTTP表单的方法
2018/12/26 Python
python实现贪吃蛇游戏
2020/03/21 Python
python:动态路由的Flask程序代码
2019/11/22 Python
Python3使用xlrd、xlwt处理Excel方法数据
2020/02/28 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
2020/04/17 Python
浅谈matplotlib默认字体设置探索
2021/02/03 Python
python tkinter实现下载进度条及抖音视频去水印原理
2021/02/07 Python
python实现简单的学生管理系统
2021/02/22 Python
真正了解CSS3背景下的@font face规则
2017/05/04 HTML / CSS
魔声耳机官方网站:Monster是世界第一品牌的高性能耳机
2016/10/26 全球购物
外贸业务员的岗位职责
2013/11/23 职场文书
应届本科生推荐信范文
2013/12/25 职场文书
函授本科自我鉴定
2014/02/04 职场文书
2014副局长群众路线对照检查材料思想汇报
2014/09/22 职场文书
中标通知书范本
2015/04/17 职场文书
《有余数的除法》教学反思
2016/02/22 职场文书
Log4j.properties配置及其使用
2021/08/02 Java/Android