使用 Python 處理 PDF 文件

和當今世界一樣,我們都熟悉 PDF 文件,因為它們是使用最廣泛的數字文檔格式之一。pdf 的完整形式是「可移植文檔格式」,它使用「」。pdf “擴展名保存文檔文件。這是獨立於軟體硬體或操作系統的,並且可以用於可靠地呈現或交換文檔。

PDF 是 Adobe 發明的,現在這是國際標準化組織維護的開放標準。PDF 文件還可以包含表單域、音頻-視頻或其他業務邏輯的鏈接或按鈕,以便與用戶或觀眾進行更好的交互。

在本教程中,我們將討論如何執行各種操作:

  • 如何從 PDF 中提取文本
  • 如何旋轉 PDF 的頁面
  • 如何將兩個 PDF 合併在一起
  • 如何拆分一個 PDF 文件
  • 如何向 PDF 頁面添加水印

我們可以通過使用一個簡單的 Python 腳本來執行所有這些操作。

裝置

為了與 PDF 文件進行交互,我們將使用第三方模塊,即 PyPDF2 。PyPDF2 是一個內置的 Python 庫,用作 PDF 工具包。該模塊能夠:

  • 它可以提取文檔的信息,如標題、作者姓名等。
  • 它可以分割文檔文件的頁面。
  • 它可以裁剪 PDF 文檔文件的頁面。
  • 它可以將 PDF 文檔文件中的多個頁面合併為單個頁面。
  • 它可以加密和解密 PDF 文件。

為了安裝 PyPDF2,我們可以從命令行使用以下命令:


!pip3 install PyPDF2

這個模塊的名稱區分大小寫,所以我們必須確保「y」是小寫的,模塊名稱中的所有內容都是大寫的。

使用 PyPDF2 模塊對 PDF 文件的操作

在本節中,我們將討論通過使用 Python 中的 PyPDF2 模塊,我們可以對 PDF 文件執行的各種操作。

1.如何從 PDF 文檔文件中提取文本。

我們可以使用 Python 中的 PyPDF2 模塊從 PDF 文件中提取文本,方法如下。

進場:

為了使用 Python 從 PDF 文件中提取文本,我們將遵循以下步驟:

第一步:我們將以二進位模式打開名為『exp . PDF』的 PDF 文件,並將文件對象保存為「 pdf_File_Object 」。


pdf_File_Object = open('exp.pdf', 'rb')

第二步:我們將為pypdf F2模塊的【pdf Reader】類創建一個對象「 pdf_Reader ,然後我們將傳遞 PDF 文件對象,並獲取用於讀取 PDF 的對象。


pdf_Reader = PDF.PdfFileReader(pdf_File_Object)

第三步:為了獲取 PDF 文檔文件的頁數,我們將使用 numPages


print("No. of pages in the given PDF file: ", pdf_Reader.numPages)

第四步:我們將為「py PDF 2」的 PageObject 類創建一個對象「page _ Object」PDF 閱讀器對象具有函數「getPage()」,該函數以頁碼為參數,返回頁面的對象。


page_Object = pdf_Reader.getPage(0)

第五步:我們將使用提取文本,這是一個頁面對象的函數,用於從 PDF 頁面中提取文本。

第六步:最後,我們將關閉 PDF 文檔文件對象。


pdf_File_Object.close()

代碼:


import PyPDF2 as PDF

# Here we will create a pdf file object
pdf_File_Object = open('exp.pdf', 'rb')

# Here, we will creat a pdf reader object
pdf_Reader = PDF.PdfFileReader(pdf_File_Object)

# Now we will print number of pages in pdf file
print("No. of pages in the given PDF file: ", pdf_Reader.numPages)

# Here, create a page object
page_Object = pdf_Reader.getPage(0)

# Now, we will extract text from page
print(page_Object.extractText())

# At last, close the pdf file object
pdf_File_Object.close()

輸出:

No. of pages in the given PDF file:  10

GUIDELINES
*

FOR 

RE
-
OPENING OF CAMPUS 

IN VIEW OF COVID
-
19 PANDEMIC

(FOR 
STUDENTS
)

2021
-
22

這已經在輸出中列印了 PDF 文件的第一頁的文本。

2.如何旋轉 PDF 文件頁面

我們可以使用 Python 中的 PyPDF2 模塊來旋轉 PDF 文件的頁面。

進場:

為了旋轉給定 pdf 文件的頁面,我們將使用以下步驟:

步驟 1: 我們將為原始 PDF 創建一個 PDF 閱讀器對象。

第二步:我們將旋轉的頁面寫入新的 PDF 文件。為了寫入 PDF 文件,我們將使用的PDF writer類的對象


pdf_Writer = PDF.PdfFileWriter()

第三步:我們將迭代原始 PDF 文檔文件的每一頁。我們將獲得 PDF 閱讀器類的頁面對象 getPage() 功能。然後我們將使用頁面對象類的rotatelockwise()函數來旋轉頁面。


for page in range(pdf_Reader.numPages):
page_Object = pdf_Reader.getPage(page)
page_Object.rotateClockwise(rotation_1)
pdf_Writer.addPage(page_Object)

第 4 步:我們將通過傳遞旋轉的頁面對象,使用 PDF writer 類的 addPage() 函數來添加頁面 PDF writer 對象。

第五步:然後,我們將把 PDF 頁面寫到新創建的 PDF 文件中。我們可以通過打開新的文件對象並使用 PDF writer 對象上的 write() 功能來編寫 PDF 頁面來實現這一點。


new_File = open(new_File_Name, 'wb')
pdf_Writer.write(new_File)

第六步:我們將關閉原來的 PDF 文件對象結束新創建的新文件對象。


pdf_File_Object.close()
new_File.close()

代碼:


# Frst, we will import the modules
import PyPDF2 as PDF

def PDF_rotate(original_File_Name, new_File_Name, rotation_1):

    # Then, we will create a pdf File object of original pdf
    pdf_File_Object = open(original_File_Name, 'rb')

    # Then, we will create a pdf Reader object
    pdf_Reader = PDF.PdfFileReader(pdf_File_Object)

    # Then we will create a pdf writer object for new pdf
    pdf_Writer = PDF.PdfFileWriter()

    # Now, we will rotate each page of the PDF document
    for page in range(pdf_Reader.numPages):

        # Then, we will create rotated page object
        page_Object = pdf_Reader.getPage(page)
        page_Object.rotateClockwise(rotation_1)

        # We will add the rotated page object to pdf writer
        pdf_Writer.addPage(page_Object)

    # Now we will open a new pdf file object
    new_File = open(new_File_Name, 'wb')

    # We will write the rotated pages to new file
    pdf_Writer.write(new_File)

    # At last, we will close the original pdf file object
    pdf_File_Object.close()

    # And now, we will close the new pdf file object
    new_File.close()

def main():

    # original pdf file name
    original_File_Name = 'exp.pdf'

    # new pdf file name
    new_File_Name = 'rotated_exp.pdf'

    # rotation angle
    rotation_1 = 270

    # calling the PDF_rotate function
    PDF_rotate(original_File_Name, new_File_Name, rotation_1)

if __name__ == "__main__":
    # calling the main function
    main()

輸出:

原始文件:

旋轉文件:

3.如何合併兩個 PDF 文件。

我們可以通過使用 Python 中的 PyPDF2 模塊來合併兩個 PDF 文件。

進場:

為了在 Python 中合併兩個 PDF 文件,我們將使用以下步驟:

第 1 步:為了合併兩個 PDf 文件,我們將使用一個預構建的類, PyPDF2 的PDf merger


We will create an object called pdf_Merger of PDF merger class:
pdf_Merger = PDF.PdfFileMerger()

步驟 2: 然後,我們將使用 append() 將每個 PDF 的文件對象追加到 PDF 合併對象中


for pdf in pdf:
pdf_Merger.append(pdf)

第三步:最後,我們將使用 pdf 合併對象的寫入方法將 pdf 頁面寫入輸出 PDF 文件。


with open(output_1, 'wb') as K:
pdf_Merger.write(K)

代碼:


# First, we will import the modules
import PyPDF2 as PDF

def PDF_merge(pdf, output_1):
    # Here, we will create pdf file merger object
    pdf_Merger = PDF.PdfFileMerger()

    # now, we will append pdfs one by one
    for pdf in pdf:
        pdf_Merger.append(pdf)

    # then, we will write combined pdf to output pdf file
    with open(output_1, 'wb') as K:
        pdf_Merger.write(K)

def main():
    # here, we will select the pdf files to merge
    pdf = ['exp.pdf', 'rotated_exp.pdf']

    # Here, we will create output pdf file name
    output_1 = 'combined_exp.pdf'

    # Now, we will call pdf merge function
    PDF_merge(pdf = pdf, output_1 = output_1)

if __name__ == "__main__":
    # At last we will call the main function
    main()

輸出:

該代碼的輸出將是一個名為的組合 PDF 格式,它是通過合併exp.pdf和 rotate_exp.pdf 文件獲得的。

4.如何拆分 PDF 文件

我們可以根據自己的需求,使用 PyPDF2 模塊在 Python 中拆分 PDF 文檔文件。

在這段代碼中,我們將不使用新的函數或類,我們將使用簡單的邏輯和迭代。pdf 的拆分將根據我們將要傳遞的 splits_1 列表來創建。

代碼:


# First, we will import the modules
import PyPDF2 as PDF

def PDF_split(pdf_1, splits_1):
    # here, we will create an input pdf file object
    pdf_File_Object = open(pdf_1, 'rb')

    # here, we will create pdf reader object
    pdf_Reader = PDF.PdfFileReader(pdf_File_Object)

    # Now we will start indexing of first slice
    start = 0

    # then we will start indexing of last slice
    end = splits_1[0]

    for g in range(len(splits_1) + 1):
        # we will create pdf writer object for (g + 1)th split
        pdf_Writer = PDF.PdfFileWriter()

        # output pdf file name
        output_pdf = pdf_1.split('.pdf')[0] + str(g) + '.pdf'

        # Now, we will add pages to pdf writer object
        for page_1 in range(start, end):
            pdf_Writer.addPage(pdf_Reader.getPage(page_1))

        # Here, we will write split pdf pages to pdf file
        with open(output_pdf, "wb") as K:
            pdf_Writer.write(K)

        # Now, we will interchange page split start position for next split
        start = end
        try:
            # then, we will set split end position for next split
            end = splits_1[g + 1]
        except IndexError:
            # then, we will set split end position for last split
            end = pdf_Reader.numPages

    # Now, we will close the input pdf file object
    pdf_File_Object.close()

def main():
    # pdf file to split
    pdf_1 = 'exp.pdf'

    # split page positions
    splits_1 = [2,4]

    # we will call PDF_split function to split pdf
    PDF_split(pdf_1, splits_1)

if __name__ == "__main__":
    # at last, we will call the main function
    main()

輸出:

該代碼的輸出將生成 3 個新的 pdf 文件,它們是主 pdf 的拆分文件。我們可以簽入 PDF 文件夾。它包含 3 個新的 pdf 文件。

5.如何給 PDF 頁面添加水印。

我們可以使用 Python 中的 PyPDF2 模塊為 PDF 文檔文件的頁面添加水印。

進場:

在此,我們將遵循與頁面旋轉示例相同的每一步,唯一的區別是:


wm_page_Object = add_watermark(user_watermark, pdf_Reader.getPage(page_1))

使用 add_watermark() 功能將頁面對象轉換為水印頁面對象。

為了理解 add_watermark() 函數的作用,我們可以看到下面的例子:


wm_File_Object = open(wm_File, 'rb')
pdf_Reader = PDF.PdfFileReader(wm_File_Object) 
page_Object.mergePage(pdf_Reader.getPage(0))
wm_File_Object.close()
return page_Object

在本文中,首先,我們創建了 water_mark.pdf 文件的 pdf 閱讀器對象。對於傳遞的頁面對象,我們使用了 mergepage() 函數,傳遞了 water_mark pdf reader 對象第一頁的頁面對象。這將導致在傳遞的頁面對象上覆蓋 water_mark pdf。

代碼:


# First, we will import the modules
import PyPDF2 as PDF

def add_watermark_1(wm_File, page_Object):
    # here, we will open watermark pdf file
    wm_File_Object = open(wm_File, 'rb')

    # Now, we will create pdf reader object of watermark pdf file
    pdf_Reader = PDF.PdfFileReader(wm_File_Object)

    # then, we will merge watermark pdf's first page with passed page object.
    page_Object.mergePage(pdf_Reader.getPage(3))

    # Here, we will close the watermark pdf file object
    wm_File_Object.close()

    # we will return watermarked page object
    return page_Object

def main():
    # Now, we will create watermark pdf file name
    user_watermark = 'water_mark.pdf'

    # original pdf file name
    original_File_Name = 'exp.pdf'

    # new pdf file name
    new_File_Name = 'watermarked_exp.pdf'

    # now, we will create pdf File object of original pdf
    pdf_File_Object = open(original_File_Name, 'rb')

    # here, we will create a pdf Reader object
    pdf_Reader = PDF.PdfFileReader(pdf_File_Object)

    # create a pdf writer object for new pdf
    pdf_Writer = PDF.PdfFileWriter()

    # add watermark to each page
    for page_1 in range(pdf_Reader.numPages):
        # Now, we will create watermarked page object
        wm_page_Object = add_watermark(user_watermark, pdf_Reader.getPage(page_1))

        # then, we will add watermarked page object to pdf writer
        pdf_Writer.addPage(wm_page_Object)

    # new pdf file object
    new_File = open(new_File_Name, 'wb')

    # we will then write watermarked pages to new file
    pdf_Writer.write(new_File)

    # close the original pdf file object
    pdf_File_Object.close()
    # close the new pdf file object
    new_File.close()

if __name__ == "__main__":
    # call the main function
    main()

輸出:

water_mark.pdf:

user_watermark.pdf 文件:

上述代碼將生成一個 user_Watermark.pdf 文件,該文件帶有 water_mark.pdf 文件的水印。

結論

在本教程中,我們討論了如何使用 Python 及其模塊的功能和方法在 PDF 文件上操作不同的功能。


原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/300561.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-29 12:51
下一篇 2024-12-29 12:51

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29

發表回復

登錄後才能評論