【Python】用于在 Python 中处理 PDF 文件的 PyPDF2 库
编译 | Flin
来源 | analyticsvidhya
介绍
PDF 代表便携式文档格式。它使用 .pdf 扩展名。这种类型的文件主要用于共享目的。它们不能被修改,从而完整地保留了文件的格式。
因此,它们可以轻松共享和下载。它们用于阅读而不是编辑。它们在独立于硬件、软件和操作系统打开的任何设备上看起来都相似。因此,它们是最广泛使用的格式。它是由Adobe发明的。现在是国际标准化组织 (ISO)的开放标准。
在本教程中,我们将学习如何在 Python 中处理 PDF 文件。将涵盖以下主题:
如何从 PDF 文件中提取文本。
如何旋转 PDF 文件的页面。
如何从 PDF 文件中提取文档信息。
如何从 PDF 文件中拆分页面。
如何合并 PDF 文件的页面。
如何加密PDF文件。
如何为 PDF 文件添加水印。
Python 中 PDF 的一些常用库
有许多库可免费用于处理 PDF:
PDFMiner:它是一个用于从PDF中提取文本的开源工具。它用于对数据进行分析。它也可以用作 PDF 转换器或 PDF 解析器。
PDFQuery:它是一个围绕 PDFMiner、Ixml 和 PyQuery 的轻量级 Python 包装器。它是一个快速、用户友好的 PDF 抓取库。
Tabula.py:它是tabula.java的 Python 包装器。它将 PDF 文件转换为 Pandas 的数据框,并且所有数据操作都可以在数据框上执行。
Xpdf : 它允许将 PDF 转换为文本。
pdflib:它是 poppler 库的扩展,其中包含 python 绑定。
Slate:它是一个基于PDFMiner 的Python 包,用于从PDF 中提取文本。
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:https://monkeypen.com/pages/free-childrens-books
往期精彩回顾 本站qq群554839127,加入微信群请扫码: