使用python解析pdf文件 您所在的位置:网站首页 python读取中文文件 使用python解析pdf文件

使用python解析pdf文件

2023-11-16 01:16| 来源: 网络整理| 查看: 265

使用python解析pdf文件

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

pdf文件格式

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

处理PDF文件

对于 Linux,有强大的命令行工具可用,例如 pdftk 和 pdfgrep。但作为开发人员,基于 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、lxml 和 pyquery 而实现的。它的设计目标是“用尽可能少的代码从多个 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 forPyPDF2读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


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有