天天看點

Python | 實作pdf檔案分頁

pdf的分頁,我們在現實生活中,是難免會遇到的事。當你遇到時,你是怎麼解決的呢?

在Python中,實作pdf分頁,是極其簡單快速的,隻需要運作幾行代碼,即可實作,不管你的pdf檔案有多大,下面讓我們一起來看看吧~

不知道大家有沒有遇到過這麼一種情況,就比如一個pdf格式的電子書,我們經常浏覽的是其中的一部分,而這電子書的頁數很大,每當需要浏覽時,就需要翻到對應的頁碼,就有點兒繁瑣。

還有一些情況,比如,我們想分享pdf檔案裡的部分内容給别人,我們也需要用到pdf分頁,不僅可以分析指定内容,而且也可以減少發送檔案的大小O(∩_∩)O哈哈~

總之,pdf的分頁,我們在現實生活中,是難免會遇到的事。當你遇到時,你是怎麼解決的呢?

在Python中,實作pdf分頁,是極其簡單快速的,隻需要運作幾行代碼,即可實作,不管你的pdf檔案有多大,下面讓我們一起來看看吧~

注:每部分代碼的作用,我都注釋在了代碼後面,注意檢視喔~

from PyPDF2 import PdfFileReader, PdfFileWriter
import os


def split(path, page_num):
    try:  # 捕獲值異常錯誤,就是隻輸入了一個頁數的時候
        page_start, page_end = page_num.split()
    except ValueError:
        page_start = page_num
        page_end = page_num
    output_name = os.path.splitext(path)[0] + f'({page_start}-{page_end}).pdf'  # 輸出分割後的pdf檔案
    page_start, page_end = int(page_start), int(page_end)  # 将頁碼轉為整數類型
    if os.path.splitext(path)[1] == '':  # 判斷檔案格式是否以.pdf結尾
        path = path + ".pdf"
    try:
        pdf = PdfFileReader(path)  # 讀取pdf
    except FileNotFoundError:
        print("Error:請确認您輸入的pdf檔案是否存在!")
        return
    pdf_writer = PdfFileWriter()  # pdf寫入對象

    if page_start < 1 or page_end > pdf.getNumPages():  # 判斷頁碼是否在合理範圍内,即有沒有小于或大于pdf檔案的頁數
        print("Error:頁碼超出合理範圍,請确定您輸入的頁數區間在合理範圍之内!")
        return
    for page in range(page_start-1, page_end):  # 需要分割的pdf頁數區間,因為讀取的頁數是從0開始計數的,是以減1
        pdf_writer.addPage(pdf.getPage(page))  # pdf頁數讀取,存于記憶體,并未開始寫入
    with open(output_name, 'wb') as output_pdf:
        pdf_writer.write(output_pdf)  # 開始寫入指定頁數區間的pdf
    print("分頁完成,注意查收:" + output_name)


if __name__ == '__main__':
    source_path = input("請輸入需要分割的pdf的檔案:")  # 需要分割的pdf檔案
    pages = input("請輸入分割的起始頁和終止頁,以空格分開:")
    split(source_path, pages)      

其實最主要的代碼就下面的幾行:

pdf = PdfFileReader(path)  # 讀取pdf
pdf_writer = PdfFileWriter()  # pdf寫入對象
for page in range(page_start, page_end):  # 需要分割的pdf頁數區間
    pdf_writer.addPage(pdf.getPage(page))  # pdf頁數讀取,存于記憶體,并未開始寫入
with open(output_name, 'wb') as output_pdf:
    pdf_writer.write(output_pdf)  # 開始寫入指定頁數區間的pdf      

我隻是在其基礎上增加了一些異常錯誤捕獲并解決的代碼,并實作代碼的循環利用,而不是隻針對于一個pdf檔案。

代碼使用展示:

1.源檔案

Python | 實作pdf檔案分頁

書的頁數還是挺大的

Python | 實作pdf檔案分頁

2.目标頁數區間

Python | 實作pdf檔案分頁

注意,雖然這裡的頁碼是​

​271​

​​,但并不代表就是​

​271​

​,因為讀取的pdf檔案頁碼是整個檔案的頁碼,就比如書的封面,目錄的頁數也得包含進去。

是以,我們可以簡單算一下,書的頁碼第一頁與到封面差了幾頁,我這裡差的是​

​13​

​​頁,是以就是​

​271+13=284​

​​作為分割起始頁,需要截取的頁數對應書上的頁碼是​

​276​

​​,​

​276+13=289​

​​,是以終止頁就是​

​289​

​了

Python | 實作pdf檔案分頁
Python | 實作pdf檔案分頁

3.代碼運作

Python | 實作pdf檔案分頁
Python | 實作pdf檔案分頁

4.異常捕獲的代碼展示:

輸入的起始頁小于1:

Python | 實作pdf檔案分頁

pdf頁碼一共才600頁,然後輸入了終止頁為700:

Python | 實作pdf檔案分頁

5.其它

要求的是區間,但你可以輸入​

​1 1​

​​,​

​1​

​:

Python | 實作pdf檔案分頁
Python | 實作pdf檔案分頁
Python | 實作pdf檔案分頁

代碼還可以繼續完善,感興趣的小夥伴可以開動開動一下自己聰明的腦袋瓜子haha