IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 使用python解析pdf文件 -> 正文阅读

[Python知识库]使用python解析pdf文件

使用python解析pdf文件

本文主要介绍怎么使用python解析pdf文件

pdf文件格式

今天,pdf已经是最常用的数据格式。在1990, Adobe公司定义pdf文档的结构。PDF 格式背后的理念是,传输的数据/文档对于参与通信过程的双方(创建者、作者或发送者以及接收者)来说看起来完全相同。PDF 是 PostScript 格式的继承者,并被标准化为 ISO 32000-2:2017

处理PDF文件

对于 Linux,有强大的命令行工具可用,例如 pdftkpdfgrep。但作为开发人员,基于 Python库构建自己的 PDF 软件, 并可以免费使用,是一件非常令人兴奋的事情。
本文是一个小系列的开始,将介绍一些有用的 Python 库。 在第一部分中,我们将重点关注已有 PDF 的处理。 将介绍如何读取PDF和提取内容(文本和图像)、旋转单页以及将文档拆分为单独的页面。 第二部分将介绍基于叠加层添加水印。 第三部分将专注于编写/创建 PDF,还将包括删除和重新组合单个页面到新文档中。

工具和库

Python 相关的 PDF 工具、模块和库有点混乱,需要花点时间弄清楚什么是什么,以及哪些项目是持续维护的。根据我们的调研,以下是最新的库:

  • PyPDF2: 一个用于提取文档信息和内容、逐页拆分文档、合并文档、裁剪页面和添加水印的 Python 库。 PyPDF2 支持加密和加密文档。2016年后就没在更新和维护。
  • PDFMiner:这个包完全用 Python 编写,适用于 Python 2.4。对于 Python 3来说,请使用pdfminer.six这两个包都可以解析、分析和转换 PDF 文档。这包括对 PDF 1.7 以及 CJK 语言(中文、日语和韩语)和各种字体类型(Type1、TrueType、Type3 和 CID)的支持。该库目前还在维护和更新。
  • PDFQuery:它将自己描述为“一个快速且友好的 PDF 抓取库”,通过封装 PDFMiner、lxmlpyquery 而实现的。它的设计目标是“用尽可能少的代码从多个 PDF 中可靠地提取数据”。2016年后就没在更新和维护。
  • tabula-py:它是对tabula-java 的简单Python 包装,可以从 PDF 中读取表格并将它们转换为 Pandas 数据格式,还能将 PDF 文件转换为 CSV/TSV/JSON 文件。该库目前还在维护和更新。
  • pdflib for Python:它是对 Poppler 库的扩展。它可以解析、分析和转换 PDF 文档。2019年后就没在更新和维护。
  • PyFPDF: Python下的PDF文档生成库。它从 FPDF PHP 库移植而来,FPDF是一个著名的 PDFlib 替代库,它有许多示例、脚本。2017年后就没在更新和维护。
  • PDFTables:提供从 PDF 文档中提取表格的商业服务.提供 API 以便 PDFTables 可以用作 SAAS。
  • PyX -Python 图形包:PyX 是用于创建 PostScript、PDF 和 SVG 文件的 Python 包。它结合了 PostScript 绘图模型的抽象和 TeX/LaTeX 接口。该库目前还在维护和更新。
  • ReportLab: 一个强大的库,主要专注于 PDF 文档的精确创建。免费提供开源版本以及名为 ReportLab PLUS 的商业增强版。该库目前还在维护和更新。
  • PyMuPDF (又称为 “fitz”)MuPDF 的 Python 绑定,这是一个轻量级的 PDF 和 XPS 查看器。该库可以访问 PDF、XPS、OpenXPS、epub、漫画和小说格式的文件,并以其顶级性能和高渲染质量而闻名。该库目前还在维护和更新。
  • pdfrw:一个纯基于 Python 的 PDF 解析器,用于读写 PDF。一个纯基于 Python 的 PDF 解析器,用于读写 PDF。它真实地再现矢量格式而无需光栅化。与 ReportLab 结合使用,它有助于在使用 ReportLab 创建的新 PDF 中重用现有 PDF 的部分内容。
LibraryUsed for
PyPDF2
PyMuPDF
pdflib
PDFTables
tabula-py
PDFMiner.six
PDFQuery
pdfrw读,写/创建
Reportlab写/创建
PyX写/创建
PyFPDF写/创建

下面将重点介绍 PyPDF2 和 PyMuPDF,并介绍如何以最简单的方式提取文本和图像。结合官方文档和其他资源提供的大量示例有助于理解 PyPDF2 的用法。相比之下,官方 PyMuPDF 文档要清晰得多,使用该库的速度要快得多。

使用PyPDF2抽取文字

安装PyPDF2

pip install PyPDF2

例子1:抽取文档信息和内容

#!/usr/bin/python
from PyPDF2 import PdfFileReader

pdf_document = "example.pdf"
with open(pdf_document, "rb") as filehandle:
    pdf = PdfFileReader(filehandle)
    # 使用getDocumentInfo获取文档信息
    info = pdf.getDocumentInfo()
    # 使用getNumPages获取文档页数,页面从0开始计数
    pages = pdf.getNumPages()

    print (info)
    print ("number of pages: %i" % pages)

    page1 = pdf.getPage(0)
    print(page1)
    print(page1.extractText())

输出结果如下图所示

请添加图片描述

如上图所示,提取的文本被连续打印。 没有段落或句子分隔。正如 PyPDF2 文档中所述,所有文本数据都是按照它们在页面内容流中提供的顺序返回的,依赖它可能会导致一些奇怪结果。这主要取决于 PDF 文档的内部结构,以及 PDF 编写器进程如何生成 PDF 指令流。

使用PyMuPDF抽取文字

安装PyMuPDF

pip install PyMuPDF

显示文档信息、打印页数和提取 PDF 文档的文本的方式与 PyPDF2 类似(参见例2)。 要导入的模块命名为fitz

例子2:使用PyMuPDF抽取文档信息和内容

#!/usr/bin/python

import fitz

pdf_document = "example.pdf"
doc = fitz.open(pdf_document):
print ("number of pages: %i" % doc.pageCount)
print(doc.metadata)

page1 = doc.loadPage(0)
page1text = page1.getText("text")
print(page1text)

如下图所示,PyMuPDF 的好处在于它保持原始文档结构完整 - 带有换行符的整个段落保持在 PDF 文档中的原样。

请添加图片描述

使用PyMuPDF 抽取文字是个好的选择!!!

使用PyMuPDF抽取图片

PyMuPDF 使用 getPageImageList() 方法简化了从 PDF 文档中提取图像的过程。例子3 基于 PyMuPDF 从pdf中逐页提取 PDF 中的所有图像并将其保存为 PNG 文件。 如果图像具有 CMYK 色彩空间,则首先将其转换为 RGB。

例子3:使用PyMuPDF抽取图片

#!/usr/bin/python

import fitz

pdf_document = fitz.open("file.pdf")
for current_page in range(len(pdf_document)):
    for image in pdf_document.getPageImageList(current_page):
        xref = image[0]
        pix = fitz.Pixmap(pdf_document, xref)
        if pix.n < 5:        # this is GRAY or RGB
            pix.writePNG("page%s-%s.png" % (current_page, xref))
        else:                # CMYK: convert to RGB first
            pix1 = fitz.Pixmap(fitz.csRGB, pix)
            pix1.writePNG("page%s-%s.png" % (current_page, xref))
            pix1 = None
        pix = None

用几个pdf测试了下,发现会存一些像素全为0的图像

使用PyPDF2将一个PDF文件分割成多个PDF文件

例子4:使用PyPDF2将一个PDF文件分割成多个PDF文件

#!/usr/bin/python
#!/usr/bin/python

from PyPDF2 import PdfFileReader, PdfFileWriter

pdf_document = "example.pdf"
pdf = PdfFileReader(pdf_document)

for page in range(pdf.getNumPages()):
    pdf = PdfFileReader(pdf_document)
    pdf_writer = PdfFileWriter()
    current_page = pdf.getPage(page)
    pdf_writer.addPage(current_page)

    outputFilename = "example-page-{}.pdf".format(page + 1)
    with open(outputFilename, "wb") as out:
        pdf_writer.write(out)
        print("created", outputFilename)

在写入pdf文件时,如果是中文的pdf,写入会报错Illegal character in Name Object,解决方案可参见如下网址(https://blog.csdn.net/python_go/article/details/111187316),亲测有效!

使用PyMuPDF抽取包含指定内容的页

这个用例非常实用,工作方式类似pdfgrep。使用 PyMuPDF,脚本返回包含给定搜索字符串的所有页码。页面一个接一个地加载,并在 searchFor() 方法的帮助下检测所有出现的搜索字符串。 如果匹配,则会在标准输出上打印相应的消息。

例子5:使用PyMuPDF抽取包含指定内容的页

#!/usr/bin/python

import fitz

filename = "example.pdf"
search_term = "invoice"
pdf_document = fitz.open(filename)

for current_page in range(len(pdf_document)):
    page = pdf_document.loadPage(current_page)
    if page.searchFor(search_term):
        print("%s found on page %i" % (search_term, current_page))

总结

本文简单介绍如何使用python解析PDF文件,PyMuPDF和PyPDF2是两个常用的python包。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-12-04 13:24:12  更:2021-12-04 13:25:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:16:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码