使用PyPDF2庫給PDF加多級書籤

2022-07-20 03:54:11 字數 1921 閱讀 3725

因為pdf是掃瞄的格式,所以加書籤會很麻煩

可以先使用ocr軟體將目錄中的文字識別

這裡我將目錄處理成兩個檔案

bookmark.txt存放分級書籤資訊

page.txt存放對應的頁數

注意:頁數和實際書籍頁數可能會不一致(例如pdf頁碼是從封面開始算的,而書籍的第一頁並不算封面和內容)

我們可以編寫如下**:

# 按行讀取兩個檔案

fbookmark = open('bookmark',encoding='utf8').readlines()

page = open('page').readlines()

# 建立(幾級書籤,標題,頁碼)元組

bookmark = [(content.rfind('|') + 1,

content.strip()[content.rfind('|') + 1:],

int(p.strip())

) for content,p in zip(fbookmark,page)]

from pypdf2 import pdffilereader, pdffilewriter

# 開啟檔案

input = pdffilereader(open('input.pdf', 'rb'))

# 複製檔案

output = pdffilewriter()

pages = [input.getpage(i) for i in range(input.getnumpages())]

for page in pages:

output.addpage(page)

parent_set = {}

delta = 12 # 偏移量

# 建立分級書籤(注1)

for bm in bookmark:

# 將字典中小乙個等級的書籤當做父節點

parent = output.addbookmark(bm[1],

bm[2] + delta,

parent=parent_set.get(bm[0]-1))

# 向自己作為字典中該等級的節點

parent_set[bm[0]] = parent

with open('result.pdf','wb+') as f:

output.write(f)

注1:這裡建立分級書籤的方式嘗試了有一會兒,嘗試了棧結構,後來發現字典結構合適、方便。

效果如下:

(用於解析目錄,自動新增|分隔符)

with open('bookmark','r',encoding='utf8') as f:

c = f.readlines()

with open('bookmark2','w+',encoding='utf8') as output:

for line in c:

if line[0].isnumeric():

if line[1] == '.' and line[2].isnumeric():

output.write('|')

if line[3] == '.' and line[4].isnumeric():

output.write('|')

output.write(line)

Python利用PyPDF2庫獲取PDF檔案總頁碼

python中可以利用pypdf2庫來獲取該pdf檔案的總頁碼,可以根據下面的方法一步步進行下去 1 首先,要安裝pypdf2庫,利用以下命令即可 pip install pypdf22 接著,就是直接編寫 了,其中我新建了乙個py檔案,名為file utils.py,如下 from pypdf2 ...

pyPdf和pyPdf2在合併pdf時的那個異常

當乙個pdf檔案有多page的時候,它將出來見你!方法是取直接修改那個檔案generic.py 1 pypdf 路徑大約在這裡 usr lib python2.7 site packages pypdf generic.py if data.has key key multiple definiti...

Python中用PyPDF2拆分pdf提取頁面

有時候我們只需要pdf中的幾頁,或許還想把這幾頁內容整合成新的pdf,那該怎麼做呢?準備工作 安裝擴充套件庫pypdf2,參考命令 pip install pypdf2 如下 from pypdf2 import pdffilereader,pdffilewriter defsplit pdf fi...