【Python】用于在 Python 中處理 PDF 文件的 PyPDF2 庫
編譯 | Flin
來源 | analyticsvidhya
介紹
PDF 代表便攜式文檔格式。它使用 .pdf 擴展名。這種類型的文件主要用于共享目的。它們不能被修改,從而完整地保留了文件的格式。
因此,它們可以輕松共享和下載。它們用于閱讀而不是編輯。它們在獨立于硬件、軟件和操作系統(tǒng)打開的任何設(shè)備上看起來都相似。因此,它們是最廣泛使用的格式。它是由Adobe發(fā)明的?,F(xiàn)在是國際標(biāo)準(zhǔn)化組織 (ISO)的開放標(biāo)準(zhǔn)。
在本教程中,我們將學(xué)習(xí)如何在 Python 中處理 PDF 文件。將涵蓋以下主題:
如何從 PDF 文件中提取文本。
如何旋轉(zhuǎn) PDF 文件的頁面。
如何從 PDF 文件中提取文檔信息。
如何從 PDF 文件中拆分頁面。
如何合并 PDF 文件的頁面。
如何加密PDF文件。
如何為 PDF 文件添加水印。
Python 中 PDF 的一些常用庫
有許多庫可免費用于處理 PDF:
PDFMiner:它是一個用于從PDF中提取文本的開源工具。它用于對數(shù)據(jù)進行分析。它也可以用作 PDF 轉(zhuǎn)換器或 PDF 解析器。
PDFQuery:它是一個圍繞 PDFMiner、Ixml 和 PyQuery 的輕量級 Python 包裝器。它是一個快速、用戶友好的 PDF 抓取庫。
Tabula.py:它是tabula.java的 Python 包裝器。它將 PDF 文件轉(zhuǎn)換為 Pandas 的數(shù)據(jù)框,并且所有數(shù)據(jù)操作都可以在數(shù)據(jù)框上執(zhí)行。
Xpdf : 它允許將 PDF 轉(zhuǎn)換為文本。
pdflib:它是 poppler 庫的擴展,其中包含 python 綁定。
Slate:它是一個基于PDFMiner 的Python 包,用于從PDF 中提取文本。
PyPDF2:它是一個 Python 庫,用于對 PDF 文件執(zhí)行主要任務(wù),例如提取文檔特定信息、合并 PDF 文件、拆分 PDF 文件的頁面、為文件添加水印、加密和解密 PDF文件等。
我們將在本教程中使用 PyPDF2 庫。它是一個純 python 庫,因此它可以在任何平臺上運行,而無需對任何外部庫產(chǎn)生任何與平臺相關(guān)的依賴。
安裝 PyPDF2 庫
要安裝 PyPDF2,請在命令提示符中復(fù)制以下命令并運行:
pip?install?PyPDF2
獲取文檔詳細信息
PyPDF2 提供有關(guān) PDF 文檔的元數(shù)據(jù)。這可能是有關(guān) PDF 文件的有用信息??梢灾苯荧@得文檔作者、標(biāo)題、制作人、主題等信息。
.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 中提取文本
為了提取文本,我們將讀取文件并創(chuàng)建文件的 PDF 對象。
#?creating?a?pdf?file?object
pdfFileObject?=?open(pdf_path,?'rb')
然后我們將創(chuàng)建一個 PDFReader 類對象并將 PDF 文件對象傳遞給它。
# 創(chuàng)建一個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)
輸出文本如下:

旋轉(zhuǎn) PDF 的頁面
要旋轉(zhuǎn) PDF 文件的頁面并將其另存為另一個文件,請復(fù)制以下代碼并運行它。
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 文件意味著向文件添加密碼。每次打開文件時,它都會提示輸入文件的密碼。它允許對內(nèi)容進行密碼保護。出現(xiàn)以下彈出窗口:

我們可以使用以下代碼:
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 文件添加水印
水印是出現(xiàn)在每一頁上的識別圖像或圖案。它可以是公司徽標(biāo)或任何要反映在每個頁面上的重要信息。
要為 PDF 的每一頁添加水印,請復(fù)制以下代碼并運行。
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 中輕松執(zhí)行。它純粹是用 Python 編寫的。因此它是完全獨立于平臺的。它易于使用并提供了極大的靈活性。
圖片來源
圖 1:https://monkeypen.com/pages/free-childrens-books
往期精彩回顧 本站qq群554839127,加入微信群請掃碼:
