有许多与 PDF 相关的 Python 软件包。我的最爱之一是PyPDF2。您可以使用它提取元数据、旋转页面、拆分或合并 pdf 等。这是一把现有 pdf 的瑞士军刀。在本文中, 我们将学习如何使用 PyPDF2 提取 PDF 的基本信息。

开始

PyPDF2 不是 Python 标准库的一部分, 因此您需要自己安装它。最好的方法是使用pip

pip install pypdf2

现在, 我们已经安装了 PyPDF2, 让我们学习如何从 PDF 获取元数据!

提取元数据

您可以使用 PyPDF2 从任何 PDF 中提取相当数量的有用数据。例如, 您可以学习文档的作者、标题和主题, 以及有多少页。让我们来看看如何通过下载本书的样本从 Leanpub 在https://leanpub.com/reportlab。我下载的样本被称为 “reportlab 样本. pdf”。

下面是代码:

# get_doc_info.py

from PyPDF2 import PdfFileReader


def get_info(path):
    with open(path, 'rb') as f:
        pdf = PdfFileReader(f)
        info = pdf.getDocumentInfo()
        number_of_pages = pdf.getNumPages()

    print(info)

    author = info.author
    creator = info.creator
    producer = info.producer
    subject = info.subject
    title = info.title

if __name__ == '__main__':
    path = 'reportlab-sample.pdf'
    get_info(path)

我们从这里导入 PdfFileReader PyPDF2 。此类使我们能够读取 PDF 并使用各种访问器方法提取数据。我们首先要做的是创建我们自己的 get_info 函数, 接受 PDF 文件路径作为它的唯一参数。然后, 我们以只读二进制模式打开文件。接下来, 我们将该文件处理程序传递到 PdfFileReader 并创建它的实例。

现在, 我们可以使用该 getDocumentInfo 方法从 PDF 中提取一些信息。这将返回一个实例 PyPDF2.pdf.DocumentInformation , 它具有以下有用的属性, 除其他之外:

  • 作者
  • 创造者
  • 生产者
  • 主题
  • 标题

如果打印出 DocumentInformation 对象, 这就是您将看到的内容:

{ '/Author': 'Michael Driscoll',
 '/CreationDate': "D:20180331023901-00'00'",
 '/Creator': 'LaTeX with hyperref package',
 '/Producer': 'XeTeX 0.99998',
 '/Title': 'ReportLab - PDF Processing with Python' }

我们还可以通过调用该 getNumPages 方法来获取 PDF 中的页数。

从 pdf 中提取文本

PyPDF2 对从 pdf 中提取文本的支持有限。不幸的是, 它没有内置的图像提取支持。我已经看到了一些关于堆栈溢出的食谱, 使用 PyPDF2 来提取图像, 但代码示例似乎很受打击或错过。

让我们尝试从我们在上一节下载的 PDF 的第一页中提取文本:

# extracting_text.py

from PyPDF2 import PdfFileReader


def text_extractor(path):
    with open(path, 'rb') as f:
        pdf = PdfFileReader(f)

        # get the first page
        page = pdf.getPage(1)
        print(page)
        print('Page type: {}'.format(str(type(page))))

        text = page

pdf “text_extractor (路径)”

您将注意到, 此代码开始的方式与前面的示例非常相似。我们仍然需要创建一个实例 PdfFileReader 。但是, 这一次, 我们抓住一个页面使用的 getPage 方法。PyPDF2 是从零开始的, 很像 Python 中的大多数东西, 所以当你通过它的时候, 它实际上抓住了第二页。第一页, 在这种情况下, 只是一个图像, 所以它不会有任何文本。

有趣的是, 如果运行此示例, 您将发现它不返回任何文本。相反, 我得到的只是一系列的断字符。不幸的是, PyPDF2 对提取文本的支持非常有限。即使它能够提取文本, 它也可能不按您期望的顺序排列, 并且间距也可能不同。

要使此示例代码正常工作, 您需要尝试对不同的 PDF 运行它。我在美国国税局网站上找到一个: https://www.irs.gov/pub/irs-pdf/fw9.pdf

这是一个 W9 形式的人谁是自营职业或合同雇员。它也可以在其他情况下使用。无论如何, 我下载它作为w9 , 并将其添加到 GitHub 存储库以及。如果您使用该 PDF 而不是示例之一, 它将愉快地从2页中提取一些文本。我不会重现这里的输出, 因为它是一种漫长的虽然。

您可能会发现, pdfminer包比 PyPDF2 更适合于提取文本。

包装

PyPDF2 包很有用。我们能够从 pdf 中获取一些有用的信息。我可以看到在 pdf 文件夹中使用 PyPDF, 并使用元数据提取技术来根据创建者名称、主题等来分类 pdf。试试看, 看看你怎么想!

Comments are closed.