当前位置:   article > 正文

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

pypdf2

作者 | 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)

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

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

上述代码的输出如下:

0dec8f3d586b97e736386cb51a2588c1.png

让我们格式化输出:

  1. print("Author" +': ' + information.author)
  2. print("Creator" +': ' + information.creator)
  3. print("Producer" +': ' + information.producer)
96d7e7afc8af1e6362ebc40c011f108c.png

从 PDF 中提取文本

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

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

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

# 创建一个pdf阅读器对象

pdfReader = PyPDF2.PdfFileReader(pdfFileObject)

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

  1. text=''
  2. for i in range(0,pdfReader.numPages):
  3.     # creating a page object
  4.     pageObj = pdfReader.getPage(i)
  5.     # extracting text from page
  6.     text=text+pageObj.extractText()
  7. print(text)

输出文本如下:

1a9f03b7cdbb461f0dddec77d53a5210.png

旋转 PDF 的页面

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

  1. pdf_read = PdfFileReader(r"C:UsersDellDesktopstory.pdf")
  2. pdf_write = PdfFileWriter()
  3. # Rotate page 90 degrees to the right
  4. page1 = pdf_read.getPage(0).rotateClockwise(90)
  5. pdf_write.addPage(page1)
  6. with open(r'C:UsersDellDesktoprotate_pages.pdf''wb') as fh:
  7.     pdf_write.write(fh)
c730914d7b81a477be1228e76ab60190.png

在 Python 中合并 PDF 文件

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

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

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

输出PDF如下所示:

ee28ee09a090ff07a1670ad64fd548cc.png

拆分PDF页面

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

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

加密 PDF 文件

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

f197d5707187120cf12510c13225af7e.png

我们可以使用以下代码:

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

为 PDF 文件添加水印

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

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

  1. originalfile = r"C:UsersDellDesktopTesting Tesseractexample.pdf"
  2. watermark = r"C:UsersDellDesktopTesting Tesseractwatermark.pdf"
  3. watermarkedfile = r"C:UsersDellDesktopTesting Tesseractwatermarkedfile.pdf"
  4. watermark = PdfFileReader(watermark)
  5. watermarkpage = watermark.getPage(0)
  6. pdf = PdfFileReader(originalfile)
  7. pdfwrite = PdfFileWriter()
  8. for page in range(pdf.getNumPages()):
  9.     pdfpage = pdf.getPage(page)
  10.     pdfpage.mergePage(watermarkpage)
  11.     pdfwrite.addPage(pdfpage)
  12. with open(watermarkedfile, 'wb') as fh:
  13.     pdfwrite.write(fh)

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

6e6326acfb539a000a1b2dd21ae7c741.png

尾注

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

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

ff8e990d18a54eb7fca0b6267cc9a6cc.png

 
 
 
 
 
 
 
 
  1. 往期精彩回顾
  2. 适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
  3. AI基础下载黄海广老师《机器学习课程》视频课黄海广老师《机器学习课程》711页完整版课件

本站qq群554839127,加入微信群请扫码:

8d4d9f34fc6e291d4288ec8de849c7e2.png

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/245957
推荐阅读
相关标签
  

闽ICP备14008679号