Python對(duì)PDF書(shū)簽進(jìn)行添加,修改提取和刪除操作
簡(jiǎn)介
PDF 書(shū)簽是 PDF 文件中的導(dǎo)航工具,通常包含一個(gè)標(biāo)題和一個(gè)跳轉(zhuǎn)位置(如指定的頁(yè)面或位置)。它們可以像目錄一樣分層顯示,用戶可以展開(kāi)或折疊這些書(shū)簽,在文檔中快速找到需要的內(nèi)容。從技術(shù)上看,書(shū)簽是 PDF 文件結(jié)構(gòu)中的大綱對(duì)象,不會(huì)改變文檔內(nèi)容,只是幫助用戶更方便地導(dǎo)航。
本教程將詳細(xì)介紹如何使用 Python對(duì) PDF 文件中的書(shū)簽進(jìn)行操作,包括添加、更新、提取和刪除等。

使用工具
要在 Python 中操作 PDF 書(shū)簽,需要一個(gè)合適的PDF處理庫(kù)。本文所使用的庫(kù)是Spire.PDF for Python,該庫(kù)支持對(duì) PDF 書(shū)簽執(zhí)行多種操作,包括:
- 添加書(shū)簽:為文檔創(chuàng)建單層或嵌套書(shū)簽,構(gòu)建層次化導(dǎo)航。
- 修改書(shū)簽:更新書(shū)簽的標(biāo)題、目標(biāo)頁(yè)面、位置及顯示樣式。
- 刪除書(shū)簽:清除不再需要的書(shū)簽,保持文檔整潔。
- 提取書(shū)簽:讀取并輸出文檔中現(xiàn)有書(shū)簽的信息。
安裝 Spire.PDF
在開(kāi)始操作 PDF 書(shū)簽之前,請(qǐng)確保您的 Python 環(huán)境中已安裝 Spire.PDF??梢酝ㄟ^(guò)以下pip命令進(jìn)行安裝:
pip install spire.pdf
安裝完成后,即可在Python項(xiàng)目中導(dǎo)入并調(diào)用該庫(kù)的相關(guān)API。
Python 向 PDF 添加書(shū)簽
添加書(shū)簽
Spire.PDF提供了PdfDocument.Bookmarks.Add() 方法,用于為PDF文檔添加書(shū)簽。添加時(shí),你可以自定義書(shū)簽的跳轉(zhuǎn)位置以及顏色和樣式等屬性。
添加書(shū)簽的主要步驟
- 加載 PDF 文檔:使用 PdfDocument 類打開(kāi)已有的 PDF 文件。
- 添加書(shū)簽:調(diào)用 PdfDocument.Bookmarks.Add() 方法,將書(shū)簽添加到文檔的書(shū)簽集合中。
- 設(shè)置書(shū)簽跳轉(zhuǎn)位置:為書(shū)簽設(shè)置目標(biāo)跳轉(zhuǎn)位置,例如目標(biāo)頁(yè)碼、具體坐標(biāo)位置以及縮放比例。
- 自定義書(shū)簽(可選):通過(guò)設(shè)置書(shū)簽的屬性,如顏色(Color)和顯示樣式(DisplayStyle),來(lái)調(diào)整書(shū)簽文字的顏色和字體樣式。
- 保存修改后的 PDF 文檔:使用 PdfDocument.SaveToFile() 方法,將修改后的文檔保存到文件。
實(shí)現(xiàn)代碼
from spire.pdf import *
# 打開(kāi) PDF 文件
pdf = PdfDocument("測(cè)試.pdf")
# 添加書(shū)簽
bookmark = pdf.Bookmarks.Add("第一章")
# 設(shè)置書(shū)簽的跳轉(zhuǎn)位置為第一頁(yè)左上角
bookmark.Destination = PdfDestination(pdf.Pages[0], PointF(0.0, 0.0))
# 自定義書(shū)簽外觀:設(shè)置顏色和樣式
bookmark.Color = PdfRGBColor(Color.get_Blue())
bookmark.DisplayStyle = PdfTextStyle.Regular
# 保存 PDF 文件
pdf.SaveToFile("添加書(shū)簽.pdf")
pdf.Close()添加嵌套書(shū)簽
在 PDF 中,嵌套書(shū)簽是一種具有層次結(jié)構(gòu)的書(shū)簽,允許用戶以樹(shù)狀結(jié)構(gòu)導(dǎo)航文檔內(nèi)容。它們類似于目錄,其中某些書(shū)簽可以包含子書(shū)簽,這些子書(shū)簽可以進(jìn)一步包含子級(jí),形成層次關(guān)系。
嵌套書(shū)簽的特點(diǎn)
- 層次結(jié)構(gòu):父書(shū)簽可以包含一個(gè)或多個(gè)子書(shū)簽,子書(shū)簽也可以有自己的子書(shū)簽。
- 內(nèi)容導(dǎo)航:點(diǎn)擊嵌套書(shū)簽可以快速跳轉(zhuǎn)到文檔中相應(yīng)的頁(yè)面或特定位置。
- 靈活性:嵌套書(shū)簽可以指向 PDF 文檔中的任何頁(yè)面或位置。
添加嵌套書(shū)簽的主要步驟
- 加載 PDF 文檔:使用 PdfDocument 類打開(kāi) PDF 文件。
- 添加父書(shū)簽:調(diào)用 PdfDocument.Bookmarks.Add() 方法,將父書(shū)簽添加到 PDF 文檔的書(shū)簽集合中。
- 設(shè)置父書(shū)簽的跳轉(zhuǎn)位置:為父書(shū)簽指定目標(biāo)調(diào)整位置,例如目標(biāo)頁(yè)碼、具體坐標(biāo)和縮放比例。
- 自定義父書(shū)簽(可選):通過(guò)屬性(如 Color 和 DisplayStyle),自定義書(shū)簽的外觀,包括文本顏色和字體樣式。
- 添加子書(shū)簽:調(diào)用 PdfBookmark.ConvertToBookmarkCollection().Add() 方法,在父書(shū)簽下添加一個(gè)子書(shū)簽。
- 設(shè)置子書(shū)簽的跳轉(zhuǎn)位置:為子書(shū)簽指定目標(biāo)位置,例如目標(biāo)頁(yè)碼、具體坐標(biāo)和縮放比例。
- 自定義子書(shū)簽(可選):使用 Color 和 DisplayStyle 屬性,自定義嵌套書(shū)簽的文本顏色和字體樣式。
- 保存修改后的 PDF 文檔:調(diào)用 PdfDocument.SaveToFile() 方法,將修改后的 PDF 文檔保存到文件中。
實(shí)現(xiàn)代碼
from spire.pdf import *
# 加載 PDF 文件
pdf = PdfDocument("測(cè)試.pdf")
# 添加父書(shū)簽
parent_bookmark = pdf.Bookmarks.Add("第一章")
parent_bookmark.Destination = PdfDestination(pdf.Pages[0], PointF(0.0, 0.0))
# 添加子書(shū)簽
child_bookmark = parent_bookmark.ConvertToBookmarkCollection().Add("1.1 簡(jiǎn)介")
child_bookmark.Destination = PdfDestination(pdf.Pages[0], PointF(0.0, 20.0))
# 保存 PDF 文件
pdf.SaveToFile("添加嵌套書(shū)簽.pdf")
pdf.Close()Python 修改 PDF 書(shū)簽
當(dāng) PDF 文檔內(nèi)容發(fā)生變化時(shí)(如頁(yè)面順序更改或章節(jié)名稱更新),書(shū)簽也需要相應(yīng)調(diào)整。
修改 PDF 書(shū)簽的主要步驟
- 加載 PDF 文檔:使用 PdfDocument 類打開(kāi)包含書(shū)簽的現(xiàn)有 PDF 文件。
- 訪問(wèn)目標(biāo)書(shū)簽:通過(guò)索引定位要更新的書(shū)簽,例如 PdfDocument.Bookmarks[0] 表示第一個(gè)書(shū)簽。
- 修改書(shū)簽屬性:使用書(shū)簽的 Title 屬性更改書(shū)簽標(biāo)題,并通過(guò)屬性(如 Color)調(diào)整其外觀。
- 保存修改后的 PDF 文檔:調(diào)用 PdfDocument.SaveToFile() 方法,保存更新后的 PDF 文件。
實(shí)現(xiàn)代碼
from spire.pdf import *
# 打開(kāi) PDF 文件
pdf = PdfDocument("添加書(shū)簽.pdf")
# 獲取第一個(gè)書(shū)簽并更新標(biāo)題和顏色
bookmark = pdf.Bookmarks[0]
bookmark.Title = "新書(shū)簽"
bookmark.Color = PdfRGBColor(Color.get_Red())
# 保存 PDF 文件
pdf.SaveToFile("修改書(shū)簽.pdf")
pdf.Close()
Python 展開(kāi)或折疊 PDF 書(shū)簽
在 PDF 文檔中,書(shū)簽可以設(shè)置為展開(kāi)或折疊狀態(tài)。這種方式可以控制嵌套書(shū)簽在文檔打開(kāi)時(shí)的顯示效果。
展開(kāi)或折疊書(shū)簽的步驟
1.加載 PDF 文檔:使用 PdfDocument 類打開(kāi)一個(gè)包含書(shū)簽的現(xiàn)有 PDF 文件。
2.訪問(wèn)目標(biāo)書(shū)簽:通過(guò)索引定位要更新的書(shū)簽,例如 PdfDocument.Bookmarks[0] 表示第一個(gè)書(shū)簽。
3.設(shè)置書(shū)簽的展開(kāi)或折疊狀態(tài):
- 使用書(shū)簽的 ExpandBookmark 屬性控制其顯示狀態(tài):
- 設(shè)置為 True 表示書(shū)簽在打開(kāi) PDF 時(shí)自動(dòng)展開(kāi)。
- 設(shè)置為 False 表示書(shū)簽在打開(kāi) PDF 時(shí)保持折疊。
4.保存修改后的 PDF 文檔:調(diào)用 PdfDocument.SaveToFile() 方法,將更新后的 PDF 文檔保存到指定位置。
實(shí)現(xiàn)代碼
from spire.pdf import *
# 打開(kāi) PDF 文件
pdf = PdfDocument("添加嵌套書(shū)簽.pdf")
# 獲取第一個(gè)書(shū)簽并設(shè)置為折疊
bookmark = pdf.Bookmarks[0]
bookmark.ExpandBookmark = False
# 保存 PDF 文件
pdf.SaveToFile("折疊書(shū)簽.pdf")
pdf.Close()
Python 提取 PDF 書(shū)簽
從 PDF 文件中提取書(shū)簽可以幫助您審核文檔結(jié)構(gòu)、生成目錄或?qū)?shū)簽遷移到其他文檔中。借助 Spire.PDF,您可以獲取所有書(shū)簽,包括父書(shū)簽和子書(shū)簽。
提取 PDF 書(shū)簽的主要步驟
- 定義遞歸函數(shù)遍歷書(shū)簽:自定義一個(gè)函數(shù),用于遍歷 PdfBookmarkCollection 中的書(shū)簽,打印每個(gè)書(shū)簽的標(biāo)題和頁(yè)碼,并遞歸處理嵌套書(shū)簽。
- 加載 PDF 文檔:使用 PdfDocument 類打開(kāi)包含書(shū)簽的現(xiàn)有 PDF 文件。
- 調(diào)用函數(shù)以提取書(shū)簽:將 PDF 文檔的書(shū)簽集合傳遞給該函數(shù),從文檔中提取所有書(shū)簽信息。
實(shí)現(xiàn)代碼
from spire.pdf import *
# 打開(kāi) PDF 文件
pdf = PdfDocument("添加嵌套書(shū)簽.pdf")
# 遞歸函數(shù):提取書(shū)簽
def extract_bookmarks(bookmarks, level=0):
for i in range(bookmarks.Count):
bookmark = bookmarks[i]
print(" " * level + f"標(biāo)題: {bookmark.Title}, 頁(yè)碼: {bookmark.Destination.PageNumber + 1}")
if bookmark.ConvertToBookmarkCollection():
extract_bookmarks(bookmark.ConvertToBookmarkCollection(), level + 1)
extract_bookmarks(pdf.Bookmarks)
pdf.Close()
Python 刪除 PDF 書(shū)簽
當(dāng)你不再需要書(shū)簽導(dǎo)航時(shí),可以從PDF文檔中刪除書(shū)簽。Spire.PDF 支持批量刪除所有書(shū)簽,也可以針對(duì)性地刪除指定書(shū)簽。
刪除 PDF 書(shū)簽的步驟
- 加載 PDF 文檔:使用 PdfDocument 類打開(kāi)一個(gè)包含書(shū)簽的現(xiàn)有 PDF 文件。
- 刪除特定書(shū)簽:使用 PdfDocument.Bookmarks.RemoveAt(index) 方法刪除指定的書(shū)簽。
- 刪除所有書(shū)簽(可選):如果希望一次性刪除文檔中的所有書(shū)簽,可以使用 PdfDocument.Bookmarks.Clear() 方法.
- 保存更新后的 PDF 文檔:使用 PdfDocument.SaveToFile() 方法保存修改后的文檔。
實(shí)現(xiàn)代碼
from spire.pdf import *
# 打開(kāi)現(xiàn)有的 PDF 文檔
pdf = PdfDocument("添加嵌套書(shū)簽.pdf")
# 檢查是否存在書(shū)簽,如果存在,刪除第一個(gè)書(shū)簽(其子書(shū)簽會(huì)被一并刪除)
if pdf.Bookmarks.Count > 0:
pdf.Bookmarks.RemoveAt(0)
# 可選:刪除所有書(shū)簽
# pdf.Bookmarks.Clear()
# 保存更新后的 PDF
pdf.SaveToFile("刪除書(shū)簽.pdf")
pdf.Close()
到此這篇關(guān)于Python對(duì)PDF書(shū)簽進(jìn)行添加,修改提取和刪除操作的文章就介紹到這了,更多相關(guān)Python操作PDF書(shū)簽內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Python pyglet庫(kù)編寫(xiě)一個(gè)可播放音樂(lè)的揚(yáng)聲器類流程詳解
這篇文章主要介紹了使用Python pyglet庫(kù)編寫(xiě)一個(gè)可播放音樂(lè)的揚(yáng)聲器類,Pyglet主要用于創(chuàng)建視頻游戲、獨(dú)立游戲和多媒體應(yīng)用,它提供了一組用于制作游戲的常用功能,包括圖形渲染、聲音播放、事件處理等等,需要的朋友可以參考下2024-03-03
Django防御csrf攻擊的實(shí)現(xiàn)方式(包括ajax請(qǐng)求)
這篇文章主要介紹了Django防御csrf攻擊的實(shí)現(xiàn)方式(包括ajax請(qǐng)求),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
Python優(yōu)秀開(kāi)源項(xiàng)目Rich源碼解析的流程分析
這篇文章主要介紹了Python優(yōu)秀開(kāi)源項(xiàng)目Rich源碼解析,本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
Python?列表中的刪除操作之del、remove?和?pop?的區(qū)別
在Python中,列表(list)是一種非常靈活的數(shù)據(jù)結(jié)構(gòu),它允許我們存儲(chǔ)一系列的元素,在刪除元素時(shí),我們可以使用三種不同的方法:del、remove?和?pop,每種方法都有其特定的用途和行為,了解它們的區(qū)別可以幫助我們更有效地使用列表,感興趣的朋友跟隨小編一起看看吧2024-05-05

