欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python如何實現(xiàn)刪除pdf空白頁

 更新時間:2025年05月14日 09:07:39   作者:去追風(fēng),去看海  
這篇文章主要為大家詳細介紹了如何使用Python實現(xiàn)刪除pdf空白頁以及批量刪除掃描PDF中的空白頁,文中的示例代碼簡潔易懂,需要的小伙伴可以了解下

python 刪除pdf 空白頁

環(huán)境

python == 3.10

PyPDF2 ==3.0.1

安裝

pip install PyPDF2

流程

將空白頁和內(nèi)容頁讀取出來,看看內(nèi)部結(jié)構(gòu)有什么不同

以此為依據(jù),遍歷整個PDF 文件,標(biāo)記處有內(nèi)容的頁面,寫入到另外一個PDF文件。

python 代碼

# 每一個頁都是一個字典對象,看第一層沒區(qū)別
# 參考文章中 第一層 keys 一樣, 但是 /Resources下結(jié)構(gòu)有所不同,空白頁沒有"/XObject"鍵
# 我的第一層keys 不一樣,  但是 /Resources下結(jié)構(gòu)一樣
# 另外 PyPDF2 版本不一樣,各個模塊有更新,自己看源碼進行更新,或者根據(jù)報錯提示進行更新

from PyPDF2 import PdfReader, PdfWriter

def remove_pdf_blank_pages(path):
    pdfReader = PdfReader(open(path, 'rb'))
    writer = PdfWriter()
    pages = len(pdfReader.pages)
    # blank = pdfReader.pages[1]
    # full = pdfReader.pages[2]
    #print('*'*10)
    #print(blank.keys())# dict_keys(['/Type', '/Parent', '/Resources', '/MediaBox', '/Contents'])
    #print(full.keys())# dict_keys(['/Type', '/Parent', '/Resources', '/MediaBox', '/Annots', '/Tabs', '/StructParents', '/Contents'])
    #print(blank['/Resources'])
    #{'/Font': IndirectObject(600, 0, 139632281578944), '/XObject': {'/Im553': IndirectObject(553, 0, 139632281578944), '/Im7': IndirectObject(7, 0, 139632281578944)}, '/ProcSet': ['/PDF', '/Text', '/ImageC', '/ImageI', '/ImageB']}
    #print(full['/Resources'])
    #{'/Font': IndirectObject(600, 0, 139632281578944), '/XObject': {'/Im553': IndirectObject(553, 0, 139632281578944), '/Im7': IndirectObject(7, 0, 139632281578944)}, '/ProcSet': ['/PDF', '/Text', '/ImageC', '/ImageI', '/ImageB']}
    #print('*' * 10)
    for i in range(pages):
        page = pdfReader.pages[i]
        # if "/XObject" in page["/Resources"].keys() or "/Font" in page["/Resources"].keys():
        #     writer.add_page(page)
        if "/StructParents" in page.keys() or "/Tabs" in page.keys() or "/Annots" in page.keys():
            writer.add_page(page)

    writer.write(open(path, 'wb'))

使用Python批量刪除掃描PDF中的空白頁

對于經(jīng)??磼呙鑀DF資料的人來說,經(jīng)常會碰到如下問題:

PDF縮略圖

因為一些格式轉(zhuǎn)換的原因,一些空白頁時不時的出現(xiàn),而且規(guī)律不定,一會是偶數(shù)頁碼一會是奇數(shù)頁碼,逐個選中刪除的話,對于幾百頁的文檔,非常費時。

百度搜索刪除PDF空白頁,得到的是一個要收費的工具,有了Python就可以利用免費開源庫輕松解決。

先安裝 PyPDF2庫,在Powershell 或CMD命令行模式安裝PyPDF2

Install PyPDF2

流程

將空白頁和內(nèi)容頁讀取出來,看看內(nèi)部結(jié)構(gòu)有什么不同,以此為依據(jù),遍歷整個PDF 文件,標(biāo)記處有內(nèi)容的頁面,寫入到另外一個PDF文件。

該文件中17頁為空白頁,18頁為內(nèi)容頁:

from PyPDF2 import PdfFileReader, PdfFileWriter

path=r"D:\ebook\PDF\test.pdf"

reader = PdfFileReader(open(path, 'rb'))
"""
注意PyPDF2中頁碼從0開始
"""
blank= reader.getPage(16)
full = reader.getPage(17)

每一個頁都是一個字典對象,看第一層沒區(qū)別

blank.keys()
Out[24]: dict_keys(['/Type', '/Contents', '/Parent', '/Resources', '/MediaBox'])

full.keys()
Out[25]: dict_keys(['/Type', '/Contents', '/Parent', '/Resources', '/MediaBox'])

經(jīng)查發(fā)現(xiàn)/Resources下結(jié)構(gòu)有所不同,空白頁沒有"/XObject"鍵:

blank['/Resources']
Out[26]: {'/ExtGState': {'/Opa0': {'/Type': '/ExtGState', '/CA': 1}}}

full['/Resources']
Out[27]: 
{'/ExtGState': {'/Opa0': {'/Type': '/ExtGState', '/CA': 1},
  '/Opa1': {'/Type': '/ExtGState', '/ca': 1}},
 '/XObject': {'/Image0': {'/BitsPerComponent': 8,
   '/Height': 1130,
   '/Filter': ['/DCTDecode'],
   '/ColorSpace': '/DeviceRGB',
   '/Type': '/XObject',
   '/Subtype': '/Image',
   '/DL': 434222,
   '/Width': 792}}}

所以對于有”/XObject“鍵的,就是有圖像的頁面。同時發(fā)現(xiàn)一些只有文字沒圖像的頁面,還有"/Font" 鍵,于是將有這兩個鍵的頁面標(biāo)記,然后寫入第二個PDF文件即可:

from PyPDF2 import PdfFileReader, PdfFileWriter

path = r"D:\ebook\PDF\test.pdf"
path_output = r"D:\ebook\PDF\output.pdf"

reader = PdfFileReader(open(path, 'rb'))
writer = PdfFileWriter()
pages = pdfReader.getNumPages()

for i in range(pages):
    page = reader.getPage(i)
    if "/XObject" in page["/Resources"].keys() or "/Font" in page["/Resources"].keys():
        writer.addPage(page)
    
writer.write(open(path_output, 'wb'))

到此這篇關(guān)于Python如何實現(xiàn)刪除pdf空白頁的文章就介紹到這了,更多相關(guān)Python刪除pdf空白頁內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python?Pandas刪除替換并提取其中的缺失值NaN(dropna,fillna,isnull)

    Python?Pandas刪除替換并提取其中的缺失值NaN(dropna,fillna,isnull)

    這篇文章主要給大家介紹了關(guān)于Python?Pandas刪除替換并提取其中的缺失值NaN(dropna,fillna,isnull)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Pandas具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-01-01
  • python的Crypto模塊實現(xiàn)AES加密實例代碼

    python的Crypto模塊實現(xiàn)AES加密實例代碼

    這篇文章主要介紹了python的Crypto模塊實現(xiàn)AES加密實例代碼,簡單介紹了實現(xiàn)步驟,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • python監(jiān)控linux內(nèi)存并寫入mongodb(推薦)

    python監(jiān)控linux內(nèi)存并寫入mongodb(推薦)

    這篇文章主要介紹了python監(jiān)控linux內(nèi)存并寫入mongodb的相關(guān)資料,需要的朋友可以參考下
    2017-09-09
  • 不到20行代碼用Python做一個智能聊天機器人

    不到20行代碼用Python做一個智能聊天機器人

    小編先向大家介紹一下本次運用到的python庫,本次項目主要運用到的庫有wxpy和chatterbot。對Python做一個智能聊天機器人的相關(guān)知識感興趣的朋友跟隨小編一起看看吧
    2019-04-04
  • Python多線程同步Lock、RLock、Semaphore、Event實例

    Python多線程同步Lock、RLock、Semaphore、Event實例

    這篇文章主要介紹了Python多線程同步Lock、RLock、Semaphore、Event實例,Lock & RLock 用來確保多線程多共享資源的訪問,Semaphore用來確保一定資源多線程訪問時的上限,Event是最簡單的線程間通信的方式,需要的朋友可以參考下
    2014-11-11
  • Python實現(xiàn)批量執(zhí)行同目錄下的py文件方法

    Python實現(xiàn)批量執(zhí)行同目錄下的py文件方法

    今天小編就為大家分享一篇Python實現(xiàn)批量執(zhí)行同目錄下的py文件方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • python中pd.cut()與pd.qcut()的對比及示例

    python中pd.cut()與pd.qcut()的對比及示例

    本文主要介紹了python中pd.cut()與pd.qcut()的對比及示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Queue 實現(xiàn)生產(chǎn)者消費者模型(實例講解)

    Queue 實現(xiàn)生產(chǎn)者消費者模型(實例講解)

    下面小編就為大家?guī)硪黄猀ueue 實現(xiàn)生產(chǎn)者消費者模型(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • 使用Django實現(xiàn)文章與多個標(biāo)簽關(guān)聯(lián)的示例詳解

    使用Django實現(xiàn)文章與多個標(biāo)簽關(guān)聯(lián)的示例詳解

    在構(gòu)建一個博客或內(nèi)容管理系統(tǒng)時,經(jīng)常需要實現(xiàn)文章與標(biāo)簽的關(guān)聯(lián),在 Django 中,我們可以利用 ManyToManyField 來實現(xiàn)文章與標(biāo)簽的多對多關(guān)系,在本文中,我們將詳細探討如何使用 Django 模型實現(xiàn)文章與多個標(biāo)簽的關(guān)聯(lián),需要的朋友可以參考下
    2023-11-11
  • 對python中的高效迭代器函數(shù)詳解

    對python中的高效迭代器函數(shù)詳解

    今天小編就為大家分享一篇對python中的高效迭代器函數(shù)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10

最新評論