【Python】用于在 Python 中处理 PDF 文件的 PyPDF2 库

机器学习初学者

共 4423字,需浏览 9分钟

 ·

2021-10-30 00:33

作者 | megha152

编译 | Flin

来源 | analyticsvidhya

介绍

PDF 代表便携式文档格式。它使用 .pdf 扩展名。这种类型的文件主要用于共享目的。它们不能被修改,从而完整地保留了文件的格式。

因此,它们可以轻松共享和下载。它们用于阅读而不是编辑。它们在独立于硬件、软件和操作系统打开的任何设备上看起来都相似。因此,它们是最广泛使用的格式。它是由Adobe发明的。现在是国际标准化组织 (ISO)的开放标准。

在本教程中,我们将学习如何在 Python 中处理 PDF 文件。将涵盖以下主题:

  • 如何从 PDF 文件中提取文本。

  • 如何旋转 PDF 文件的页面。

  • 如何从 PDF 文件中提取文档信息。

  • 如何从 PDF 文件中拆分页面。

  • 如何合并 PDF 文件的页面。

  • 如何加密PDF文件。

  • 如何为 PDF 文件添加水印。

Python 中 PDF 的一些常用库

有许多库可免费用于处理 PDF:

  1. PDFMiner:它是一个用于从PDF中提取文本的开源工具。它用于对数据进行分析。它也可以用作 PDF 转换器或 PDF 解析器。

  2. PDFQuery:它是一个围绕 PDFMiner、Ixml 和 PyQuery 的轻量级 Python 包装器。它是一个快速、用户友好的 PDF 抓取库。

  3. Tabula.py:它是tabula.java的 Python 包装器。它将 PDF 文件转换为 Pandas 的数据框,并且所有数据操作都可以在数据框上执行。

  4. Xpdf : 它允许将 PDF 转换为文本。

  5. pdflib:它是 poppler 库的扩展,其中包含 python 绑定。

  6. Slate:它是一个基于PDFMiner 的Python 包,用于从PDF 中提取文本。

  7. PyPDF2:它是一个 Python 库,用于对 PDF 文件执行主要任务,例如提取文档特定信息、合并 PDF 文件、拆分 PDF 文件的页面、为文件添加水印、加密和解密 PDF文件等。

    我们将在本教程中使用 PyPDF2 库。它是一个纯 python 库,因此它可以在任何平台上运行,而无需对任何外部库产生任何与平台相关的依赖。

安装 PyPDF2 库

要安装 PyPDF2,请在命令提示符中复制以下命令并运行:

pip install PyPDF2

获取文档详细信息

PyPDF2 提供有关 PDF 文档的元数据。这可能是有关 PDF 文件的有用信息。可以直接获得文档作者、标题、制作人、主题等信息。

![](http://qiniu.aihubs.net/45251Untitled (9).jpg)

要提取上述信息,请运行以下代码:

from PyPDF2 import PdfFileReader
pdf_path=r"C:UsersDellDesktopTesting Tesseractexample.pdf"
with open(pdf_path, 'rb'as f:
        pdf = PdfFileReader(f)
        information = pdf.getDocumentInfo()
        number_of_pages = pdf.getNumPages()
        print(information)

上述代码的输出如下:

让我们格式化输出:

print("Author" +': ' + information.author)
print("Creator" +': ' + information.creator)
print("Producer" +': ' + information.producer)

从 PDF 中提取文本

为了提取文本,我们将读取文件并创建文件的 PDF 对象。

# creating a pdf file object
pdfFileObject = open(pdf_path, 'rb')

然后我们将创建一个 PDFReader 类对象并将 PDF 文件对象传递给它。

# 创建一个pdf阅读器对象

pdfReader = PyPDF2.PdfFileReader(pdfFileObject)

最后,我们将提取每个页面并连接每个页面的文本。

text=''
for i in range(0,pdfReader.numPages):
    # creating a page object
    pageObj = pdfReader.getPage(i)
    # extracting text from page
    text=text+pageObj.extractText()
print(text)

输出文本如下:

旋转 PDF 的页面

要旋转 PDF 文件的页面并将其另存为另一个文件,请复制以下代码并运行它。

pdf_read = PdfFileReader(r"C:UsersDellDesktopstory.pdf")
pdf_write = PdfFileWriter()
# Rotate page 90 degrees to the right
page1 = pdf_read.getPage(0).rotateClockwise(90)
pdf_write.addPage(page1)
with open(r'C:UsersDellDesktoprotate_pages.pdf''wb'as fh:
    pdf_write.write(fh)

在 Python 中合并 PDF 文件

我们还可以使用以下命令合并两个或多个 PDF 文件:

pdf_read = PdfFileReader(r”C:UsersDellDesktopstory.pdf”)

pdf_write = PdfFileWriter()
# Rotate page 90 degrees to the right
page1 = pdf_read.getPage(0).rotateClockwise(90)
pdf_write.addPage(page1)
with open(r'C:UsersDellDesktoprotate_pages.pdf''wb'as fh:
    pdf_write.write(fh)

输出PDF如下所示:

拆分PDF页面

我们可以将 PDF 拆分为单独的页面,然后将它们再次保存为 PDF。

fname = os.path.splitext(os.path.basename(pdf_path))[0]
    for page in range(pdf.getNumPages()):
        pdfwrite = PdfFileWriter()
        pdfwrite.addPage(pdf.getPage(page))
        outputfilename = '{}_page_{}.pdf'.format(
            fname, page+1)
        with open(outputfilename, 'wb'as out:
            pdfwrite.write(out)
        print('Created: {}'.format(outputfilename))
pdf = PdfFileReader(pdf_path)

加密 PDF 文件

加密 PDF 文件意味着向文件添加密码。每次打开文件时,它都会提示输入文件的密码。它允许对内容进行密码保护。出现以下弹出窗口:

我们可以使用以下代码:

for page in range(pdf.getNumPages()):
        pdfwrite.addPage(pdf.getPage(page))
    pdfwrite.encrypt(user_pwd=password, owner_pwd=None,
                      use_128bit=True)
    with open(outputpdf, 'wb'as fh:
        pdfwrite.write(fh)

为 PDF 文件添加水印

水印是出现在每一页上的识别图像或图案。它可以是公司徽标或任何要反映在每个页面上的重要信息。

要为 PDF 的每一页添加水印,请复制以下代码并运行。

originalfile = r"C:UsersDellDesktopTesting Tesseractexample.pdf"
watermark = r"C:UsersDellDesktopTesting Tesseractwatermark.pdf"
watermarkedfile = r"C:UsersDellDesktopTesting Tesseractwatermarkedfile.pdf"
watermark = PdfFileReader(watermark)
watermarkpage = watermark.getPage(0)
pdf = PdfFileReader(originalfile)
pdfwrite = PdfFileWriter()
for page in range(pdf.getNumPages()):
    pdfpage = pdf.getPage(page)
    pdfpage.mergePage(watermarkpage)
    pdfwrite.addPage(pdfpage)
with open(watermarkedfile, 'wb'as fh:
    pdfwrite.write(fh)

上面的代码读取两个文件——输入文件和水印。然后在阅读每一页后,它将水印附加到每一页并将新文件保存在同一位置。

尾注

正如我们在上面看到的,所有可以在 PDF 文件中想到的操作都可以使用 PyPDF2 库在 Python 中轻松执行。它纯粹是用 Python 编写的。因此它是完全独立于平台的。它易于使用并提供了极大的灵活性。

图片来源

  1. 图 1:https://monkeypen.com/pages/free-childrens-books

往期精彩回顾




站qq群554839127,加入微信群请扫码:
浏览 402
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报