Python PDF 处理

2024年8月29日 | 阅读 8 分钟

Python 被认为是一种极其灵活的编程语言,拥有广泛的库,它是一种易于阅读和编写语法的​​高级语言。Python 的应用领域正在扩展到机器学习、Web 开发、网络安全、应用程序开发等不同领域。因此,这种编程语言受到程序员、工程师和开发人员的广泛青睐。

在接下来的教程中,我们将使用 Python 编程语言处理 PDF。PDF,全称为Portable Document Format(可移植文档格式),是一种文档文件格式,包含文本、表格、图像等。通常用于需要保存无法进一步修改或方便共享/打印的文件。PDF 文件格式由Adobe1993年开发,目的是以独立于软件、应用程序、操作系统和硬件的方式呈现包含格式化文本和图像的文档。

为了让我们能够理解 PDF 处理和操作的几乎所有内容,本教程已分为不同的部分。

那么,让我们开始吧。

一些著名的 Python PDF 库

Python 提供了各种各样的库,用于操作 PDF 文件。一些在处理 PDF 时常用的著名库是

  1. PDFMiner,
  2. PyPDF4,
  3. PyPDF2,
  4. Python-docx,
  5. PyMuPDF,

以及更多。

虽然有不同的包用于在 Python 中对 PDF 执行各种功能操作,但本教程将只讨论一些库,如PDFMiner、PyPDF2、PyMuPDF、reportlab等。PyPDF2被认为是广泛使用的 PDF 处理 Python 模块之一。该包易于使用并提供各种功能。但当我们谈到文本提取时,PDFMiner包更精确、更可靠。PDFMiner专门为用户设计,用于从 PDF 文件中提取文本。当考虑到 PDF 文件操作时,存在一种情况,一个包比另一个包在不同方面更有效。因此,在本教程中,我们将根据其便利性和可靠性讨论用于操作 PDF 文件的不同库。

使用 Python 从 PDF 中提取文本

PDF 由文本、表格、图像、表单等各种内容组成。这些文件是数据的图形化解释。它们提供有关显示器或纸张的确切位置的信息。但是,它们没有定义句子或段落的逻辑结构,并且当显示大小发生变化时无法自适应。PDFMiner包通过评估布局并预测文本和其他内容的位置来为用户执行此工作。

PDFMiner被认为是从 PDF 文件中提取文本等操作的强大库之一。因此,在下一节中,我们将演示PDFMiner在文本提取中的用法。

首先,我们需要安装PDFMiner包。

安装 PDFMiner 包

我们可以使用以下命令安装PDFMiner

语法

安装完成后,我们将进入主要部分,使用PDFMiner库提取文本。

让我们看下面的示例,演示如何使用PDFMiner在 Python 中提取文本。

示例

输出

A Simple PDF File 
 This is a small demonstration .pdf file - 
 just for use in the Virtual Mechanics tutorials. More text. And more 
 text. And more text. And more text. And more text. 
 And more text. And more text. And more text. And more text. And more
 text. And more text. Boring, zzzzz. And more text. And more text. And
 more text. And more text. And more text. And more text. And more text.
 And more text. And more text.
 And more text. And more text. And more text. And more text. And more
 text. And more text. And more text. Even more. Continued on page 2 ...
 Simple PDF File 2
 ...continued from page 1. Yet more text. And more text. And more text.
 And more text. And more text. And more text. And more text. And more
 text. Oh, how boring typing this stuff. But not as boring as watching
 paint dry. And more text. And more text. And more text. And more text.
 Boring.  More, a little more text. The end, and just as well.

说明

在上面的代码片段中,我们从 io 库导入了StringIO模块,并从PDFMiner模块导入了所需的功能和类。我们创建了一个StringIO对象,并使用 with 语句打开目录中的 pdf 文件。根据PDFMiner文档,PDFPageInterpreter用于处理页面内容,而PDFResourceManager用于存储共享资源,如字体或图像。PDFPage用于对数据进行逐页分析。LAParams加载字符、文本框、文本行、图像和图形的布局分析。有了这些,TextConverter函数就有助于将 PDF 文档转换为文本。

我们将“my_file.pdf”作为要使用PDFMiner模块进行分析和执行的 PDF 文件。我们可以使用process_page函数从 PDF 文件中提取文本。

最后,print(text) 函数将打印从 PDF 中提取的文本。因此,通过这种方式,可以使用PDFMiner库从 PDF 文件中提取文本。

使用 Python 从 PDF 中提取图像

当我们想从 PDF 中提取图像时,我们可以使用PyMuPDF。该库使用一个附加模块fitz,这使得从 PDF 文件中提取图像更加容易。在开始直接使用模块之前,让我们安装所需的库。

安装 PyMuPDF 包

我们可以使用以下命令安装PyMuPDF

语法

安装完成后,我们将进入主要部分,使用PyMuPDF库和fitz模块提取文本。

让我们看下面的示例,演示如何在 Python 中提取图像。

示例

输出

[+] Found a total of 2 images in page 0
[+] Found a total of 2 images in page 1   

说明

在上面的代码片段中,我们导入了所需的模块。然后我们使用fitz模块加载了 PDF 文件。然后我们逐页查找图像列表。然后我们将 PDF 中的图像字节转换为实际图像并将其本地保存。因此,通过这种方式,我们从 PDF 文件中提取了图像。

使用 Python 从 PDF 中提取表格

与图像和文本提取相比,从 PDF 文件中提取表格稍微容易一些。Python 提供了一个名为camelot的预定义库,我们可以使用它来提取表格。因此,在我们开始实现代码之前,首先安装该库是必要的。

安装 camelot 库

我们可以使用以下命令和 pip 安装程序安装camelot模块

语法

安装完成后,让我们开始在 Python 中从 PDF 文件中提取表格。

示例

说明

在上面的代码片段中,我们导入了camelot库。然后我们使用camelot库的read_pdf()函数从 PDF 文件中提取了表格,并将其存储在一个列表中。最后,我们使用表的索引值和 df 属性打印了提取的表之一。因此,我们成功地从 PDF 文件中提取了表格。

使用 Python 从 PDF 中提取 URL

提取 URL 被认为是 Python 提供的另一个便捷功能。Python 有一个名为“pdfx”的预定义库,通常用于从 PDF 文件中提取 URL。我们可以使用PDFMinerPyPDF2等库来提取文本并使用正则表达式查找 URL。然而,这个过程漫长而繁琐。因此,为了缩短代码长度,我们将使用pdfx库从 PDF 文件中提取 URL。

安装 pdfx 库

我们可以使用以下命令和 pip 安装程序安装pdfx

语法

安装完成后,让我们看下面的示例来理解从 PDF 中提取 URL。

示例

输出

{'url': ['https://tpointtech.cn/python-pass', 'https://tpointtech.cn/python-tutorial', 'https://tpointtech.cn/python-seaborn-library', 'https://tpointtech.cn/', 'https://tpointtech.cn/chatbot-in-python', 'https://tpointtech.cn/python-if-else']}  

说明

在上面的代码片段中,我们导入了pdfx库。然后我们使用PDFx()函数从目录读取 PDF 文件。然后我们使用get_references_as_dict()函数以字典的形式提取输入 PDF 文件中可用的所有 URL。

使用 Python 将 PDF 页面提取为图像

在本节中,我们将了解如何将 PDF 文件中的页面提取为图像。为了完成这项任务,我们将需要另一个简洁简单的库,称为pdf2image。当我们想将 PDF 文件转换为图像时,通常会使用这个库。

让我们开始安装这个库。

安装 pdf2image 库

我们可以使用以下命令和 pip 安装程序来安装pdf2image

语法

安装完成后,让我们看下面的示例来理解pdf2image库的工作原理。

示例

说明

在上面的代码片段中,我们从pdf2image库导入了convert_from_path函数。然后我们使用了导入的函数,并提供了值 120。这个值被称为 DPI 或每英寸点数。值越高,形成的图像就越清晰,尺寸越大。我们通过将页面保存为 JPEG 图像来逐页迭代。