1.  利用python读取PDF文本内容

一,问题描述

  利用python读取PDF文本内容

二,运行环境

  python 3.6

三, 需要安装的库

pip install pdfminer

对pdfminer的简单介绍,官网介绍如下:

  PDFMiner is a tool for extracting information from PDF documents. Unlike other PDF-related tools, it focuses entirely on getting and analyzing text data. PDFMiner allows to obtain the exact location of texts in a page, as well as other information such as fonts or lines. It includes a PDF converter that can transform PDF files into other text formats (such as HTML). It has an extensible PDF parser that can be used for other purposes instead of text analysis.

翻译是这样的:

1

2

3

4

5

PDFMiner是一个从PDF文档中提取信息的工具。与其他pdf相关的

工具不同,它完全专注于获取和分析文本数据。PDFMiner允许获取

页面中文本的确切位置,以及其他信息,比如字体或行。它包括一

个PDF转换器,可以将PDF文件转换成其他文本格式(如HTML)。

它有一个可扩展的PDF解析器,可以用于其他目的而不是文本分析。

参考链接:深入学习python解析并读取PDF文件内容的方法 - 战争热诚 - 博客园

2.  利用python提取PDF图片

一,问题描述

  利用python获取PDF图片

二,运行环境

  python 3.6

三, 需要安装的库

pip install pymupdf

参考链接:Python提取PDF中的图片_Jayce~的博客-CSDN博客_python提取pdf中的图片

3.  实现源代码

# -*- coding:utf-8 -*-
import fitz
import time,os.path,re
time1=time.time()
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams,LTTextBoxHorizontal
from pdfminer.pdfpage import PDFTextExtractionNotAllowed,PDFPage
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocumentclass CPdf2TxtManager():# 获取文本内容def changePdfToText(self, filePath):# 以二进制读模式打开file = open(path, 'rb')# 用文件对象来创建一个pdf文档分析器parser = PDFParser(file)# 创建一个PDF文档对象存储文档结构,提供密码初始化,没有就不用传该参数doc = PDFDocument(parser, password='')# 检查文件是否允许文本提取if not doc.is_extractable:raise PDFTextExtractionNotAllowed# 创建PDf资源管理器来管理共享资源,#caching = False不缓存rsrcmgr = PDFResourceManager(caching = False)# 创建一个PDF设备对象laparams = LAParams()# 创建一个PDF页面聚合对象device = PDFPageAggregator(rsrcmgr, laparams=laparams)# 创建一个PDF解析器对象interpreter = PDFPageInterpreter(rsrcmgr, device)# 获得文档的目录(纲要),文档没有纲要会报错# PDF文档没有目录时会报:raise PDFNoOutlines pdfminer.pdfdocument.PDFNoOutlines# print(doc.get_outlines())# 获取page列表# print(PDFPage.get_pages(doc))# 循环遍历列表,每次处理一个page的内容_data =""for page in PDFPage.create_pages(doc):interpreter.process_page(page)# 接受该页面的LTPage对象layout = device.get_result()# 这里layout是一个LTPage对象 里面存放着 这个page解析出的各种对象# 一般包括LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal等等for x in layout:if hasattr(x, "get_text"):fileNames = os.path.splitext(filePath)with open(fileNames[0] + '.txt','a+') as f:results = x.get_text()f.write(results + '\n')_data+=results# # 如果x是水平文本对象的话# if (isinstance(x, LTTextBoxHorizontal)):# # print('kkk')# text = re.sub(" ", '', x.get_text())# if len(text) != 0:# _data+=textreturn _data# 获取图片def pdf2pic(self, path, pic_path):t0 = time.clock() # 生成图片初始时间checkXO = r"/Type(?= */XObject)" # 使用正则表达式来查找图片checkIM = r"/Subtype(?= */Image)"doc = fitz.open(path) # 打开pdf文件imgcount = 0 # 图片计数lenXREF = doc._getXrefLength() # 获取对象数量长度# 打印PDF的信息print("文件名:{}, 页数: {}, 对象: {}".format(path, len(doc), lenXREF - 1))# 遍历每一个对象for i in range(1, lenXREF):text = doc._getXrefString(i) # 定义对象字符串isXObject = re.search(checkXO, text) # 使用正则表达式查看是否是对象isImage = re.search(checkIM, text) # 使用正则表达式查看是否是图片if not isXObject or not isImage: # 如果不是对象也不是图片,则continuecontinueimgcount += 1pix = fitz.Pixmap(doc, i) # 生成图像对象new_name = "图片{}.png".format(imgcount) # 生成图片的名称if pix.n < 5: # 如果pix.n<5,可以直接存为PNGpix.writePNG(os.path.join(pic_path, new_name))else: # 否则先转换CMYKpix0 = fitz.Pixmap(fitz.csRGB, pix)pix0.writePNG(os.path.join(pic_path, new_name))pix0 = Nonepix = None # 释放资源t1 = time.clock() # 图片完成时间print("运行时间:{}s".format(t1 - t0))print("提取了{}张图片".format(imgcount))if __name__ == '__main__':path = r'C:/Users/Administrator/Desktop/11.pdf'pdf2TxtManager = CPdf2TxtManager()df = pdf2TxtManager.changePdfToText(path)print(df)if not df:pic_path = r'C:/Users/Administrator/Desktop/pic'# 创建保存图片的文件夹if os.path.exists(pic_path):print("文件夹已存在,不必重新创建!")passelse:os.mkdir(pic_path)df = pdf2TxtManager.pdf2pic(path,pic_path)time2 = time.time()print('ok,解析pdf结束!')print('总共耗时:' + str(time2 - time1) + 's')

关于PDF文本的解析与PDF图片的提取相关推荐

  1. java 搜索文件 pdf_Java查找并高亮PDF文本过程解析

    本文将介绍如何通过Java程序来查找并高亮PDF中的文本. 使用工具:Free Spire.PDF for Java(免费版) Jar文件获取及导入: 方法1:官网下载Jar文件包.下载后,解压,并将 ...

  2. php base64互转pdf 将base64解析成pdf

    /*  * base64转pdf  */ function base642pdf($formTxt,$toPdf) {     $file = file_get_contents($formTxt); ...

  3. python怎么读取pdf为文本_python怎么读取pdf文本内容

    python读取pdf文本内容的方法:首先打开相应的python脚本文件:然后使用PDFMiner工具来读取pdf文本内容:最后通过print输出读取后的内容即可. python读取pdf文本内容 p ...

  4. js转换html为pdf文件怎么打开方式,pdf.js实现在HTML下直接浏览pdf文档,无需插件即可实现...

    pdf.js是一款开源的pdf文档读取解析插件,据说在HTML5下诞生的,对于主流的浏览器基本都支持. 官网GitHub地址如下:https://github.com/mozilla/pdf.js 由 ...

  5. pdf 文本和图片解析iText

    使用itext5解析pdf中文本和图片的方法. 分两步,第一: import java.io.IOException; import java.net.MalformedURLException; i ...

  6. Apache PdfBox 2.0.X 版本解析PDF文档(文字和图片)

    最近项目开发过程涉及到了pdf文件的内容的解析和和内容的提取入库操作,其中pdf的解析采用了开源的apache pdfbox 插件,版本选用的是最新版本的2.0.8版本,现将简单的读取解析的步骤记录如 ...

  7. 如何用PDF编辑器编辑、修改PDF文本和图片?

    作为编辑PDF必不可少的软件,PDF编辑器随着PDF应用越来越广泛,被人们逐渐熟悉.使用PDF编辑器修改文字内容属于PDF编辑的一项功能,通常来说需要分两种情况对待,一种是PDF中的文字是文本,另一种 ...

  8. python 生成pdf 文字和图片_Python系列—PDF文本与图片抽取

    PDF是人们日常使用最多的跨平台文档.其是一种用独立于应用程序.硬件.操作系统的方式呈现文档的文件格式.每个PDF文件包含固定布局的平面文档的完整描述,包括文本.字形.图形及其他需要显示的信息.具有良 ...

  9. delphi使用Foxit Quick PDF Library读写pdf文本和图片

    简介: Debenu Quick PDF Library(PDF编程开发工具)提供一套全方位的 PDF API 函数,帮助您快速简便地处理 PDF 文件.从文档属性的基本操作到创建您自己的 PDF 查 ...

最新文章

  1. java.lang.NoSuchMethodError: No virtual method placeholder(I)Lcom/bumptech/
  2. html5 graphics with svg css3,HTML5 GRAPHICS WITH SVG AND CSS3
  3. 谨慎跟随初始目的不被关联问题带偏
  4. Linux命令(一)
  5. 【Spring学习】spring动态配置多数据源
  6. dorado-初学1
  7. XBMC源代码分析 3:核心部分(core)-综述
  8. 解决机关内外部办公网络故障
  9. python三十七课_第七课:你知道如何用python做个整蛊朋友的小病毒吗?看这里!七行代码搞定!...
  10. Python 遗传算法路径规划
  11. java spring定时器_Spring定时器的使用
  12. 邮递员算法问题之c++实现
  13. FPGA开发中常见报错或警告汇总
  14. 笔记本链接不上wifi怎么办
  15. 下载频道2013上半年超人气精华资源汇总---全都是免积分下载。 十分感谢这些免积分分享精华资源的好人!!...
  16. matlab滤波器滤除低频直流信号,对低频信号的滤波的方法
  17. Transform 被废弃,ASM 如何适配?
  18. 人体相关的中日英表达
  19. 华为云——AI人脸编辑让Lena微笑
  20. Type-C、PD原理

热门文章

  1. RHadoop实验 – 统计邮箱出现次数
  2. Markdown个人学习记录
  3. matlab射线平均速度时距曲线,时距曲线实验
  4. 华为路由器学习指南_BGP_路由反射器与联盟
  5. 教务(选课)管理系统
  6. 【dp】LGTB 玩THD
  7. 有意思的shell命令行提示符
  8. 配置七牛云cdn加速
  9. Houdini粒子随机大小每帧变化问题
  10. 解决edge浏览器无法打开pdf文件问题