透過讀取每個書籤項目旁顯示的目的地頁碼,將 PDF 頁面與書籤一起擷取,然後將這些以 1 為起點的頁碼——或包含首尾的遞增範圍(如 3-7)——輸入到一個瀏覽器式擷取工具,它會依照您輸入的順序將所選頁面複製到一份新的 PDF 中。書籤本身並不是可單獨下載的物件。它們是儲存在文件內部的導覽連結,指向一個或多個頁面上的座標。因此,若要擷取書籤所指向的頁面,您需要將每個書籤項目轉譯為它所指向的整數頁碼,並把這份清單提供給以頁碼驅動的擷取工具,例如 Extract PDF Pages,該工具會使用 pdf-lib 在本機讀取原始位元組,將要求的頁面物件複製到一份全新的 PDFDocument,然後在您目前的分頁中將結果公開為可下載的檔案。選取欄位接受以逗號或空白分隔的整數與包含首尾的範圍(如 1-3),會依照您輸入的順序將每個代碼視為目標頁,並且不會自動反轉像 5-3 這樣的遞減範圍。

how to extract pdf pages with bookmarks
在瀏覽器中使用書籤頁碼擷取 PDF 頁面

PDF 中的書籤實際上是什麼

PDF 書籤(也稱為大綱項目、目錄項目,或在某些檢視器中稱為「我的最愛」)是一個帶有名字的連結。它包含一個標題、一個階層層級、一個展開或收合狀態,以及一個目的地位址,告訴檢視器在讀者點擊時應跳到哪一頁的哪個位置。目的地位址通常是一個頁面參照,加上選擇性的視窗矩形或縮放比例,讓檢視器在跳轉後能正確框選頁面上的區域。書籤本身並不包含頁面內容的副本。實際的圖形、文字行、字型、嵌入的影像以及表單元件,都位於文件頁面樹中所參照的頁面物件上。

這個區別對於擷取作業很重要。您無法像選取檔案一樣去選取書籤,因為書籤是詤量資料,不是承載內容的資料。不過,書籤所指向的頁面則是第一級的頁面物件,任何擷取工具都可以逐字複製。因此,工作就是將每個書籤轉譯為它所指向的整數頁碼,並把這份清單提供給以頁碼運作的工具。

讀取每個書籤背後的頁碼

在您動用任何擷取工具之前,您需要一份乾淨的、以 1 為起點的頁碼清單。建構這份清單最快的方法,是在您信任的檢視器(Acrobat、Preview、Chrome 內建檢視器、Firefox 的 PDF.js,或您慣用的行動裝置讀取器)中開啟 PDF,然後一次一個項目地點選書籤面板。檢視器會跳到目的頁,而檢視器介面或狀態列上顯示的頁碼就是要記錄的值。

對於較深層的大綱——技術手冊、法律文件或教科書中的多層目錄——只擷取您實際需要的層級。如果您只想要章節的開頭,請忽略其下巢狀的子章節書籤。如果您想要每一個書籤的目標,就走完整個大綱。有些檢視器讓您用滑鼠右鍵點選書籤,選擇「內容」或「移至目的頁」指令來讀取目的頁,而不必在文件中捲動;這通常比逐一點選冗長的檔案更快。

一旦頁碼到手,將相鄰的目標分組為範圍,讓選取欄位更簡潔易讀。如果書籤指向第 3、4、5、6、7 和 12 頁,請寫成 3-7, 12,而不是 3, 4, 5, 6, 7, 12。Extract PDF Pages 中的解析器接受這兩種形式並以相同方式處理,使用範圍讓您一眼就能看出間隔。

將書籤頁面提取到新的 PDF

當您備好書籤對應頁碼的清單後,擷取本身是一段簡短且確定性的流程。這個工具在本機執行:它會驗證檔案的 MIME 類型與大小,使用 pdf-lib 載入位元組,解析您的選取項目,將要求的頁面物件複製到一份全新的 PDFDocument,並將結果公開為暫存下載。一切都不會離開您的瀏覽器。

  1. 開啟 Extract PDF Pages,挑選您要從中擷取書籤的本機 PDF。檔案不得加密、大小不得超過 50 MiB(52,428,800 位元組),且頁數不得超過 500 頁。
  2. 將書籤頁碼輸入選取欄位。請使用以 1 為起點的整數,以及以逗號或空白分隔的包含首尾的遞增範圍——例如,5, 1-3 表示原始的第 5 頁,接著依序為第 1、2、3 頁。
  3. 點擊擷取動作。解析器會去除重複的代碼,將不重複的頁面物件複製到一份新的 PDFDocument,並回報任何重複頁面的通知,讓您能確認哪些內容被忽略。
  4. 使用出現的暫存連結下載產生的 PDF。該連結會在分頁關閉或您執行另一次擷取時釋出,因此請立即儲存檔案,不要稍後再重新開啟分頁。
  5. 在您目標的檢視器中開啟下載的 PDF,確認頁面順序與內容,並將原始檔案一併保留以供比較。

解析器將選取欄位的長度上限設為 4,000 字元,且會拒絕格式錯誤的輸入而非猜測處理。小數、負數頁碼、像 5-3 這樣的遞減範圍,以及超出文件最後一頁的參照,都會明確拋出錯誤,讓您能在產生任何輸出之前修正運算式。

選取語法、代碼順序與重複處理

在選取欄位中,代碼順序具有意義。運算式「5, 2-3」不會自行排序;它會產生一份 PDF,其第一頁是原始的第 5 頁,接著是原始的第 2 和第 3 頁。如果您需要不同的敘事順序——例如,依照書籤在原始大綱中出現的順序——請依照該順序輸入,擷取工具會逐字保留它。下表摘要說明幾個常見模式如何對應到輸出文件。

選取模式新 PDF 中的頁面說明
5原始的第 5 頁單一整數選取一頁。
1-3原始的第 1、2、3 頁包含首尾的遞增範圍會選取端點之間的每一頁。
5, 1-3原始的第 5 頁,接著為第 1、2、3 頁代碼順序會被保留,因此範圍不會被提前到前面。
3, 1-3原始的第 3 頁,接著為第 1、2 頁第 3 頁的重複會被忽略;結果會回報重複的頁碼。
5-3沒有輸出遞減範圍會以明確錯誤被拒絕,而不是被反轉。

重複的頁面參照遵循一條刻意設計的「首次出現」規則。如果書籤大綱兩次指向第 3 頁,或您不小心輸入「3, 1-3」,輸出會包含一次第 3 頁,接著為第 1 與第 2 頁,且結果會明確回報這個重複。這能避免重疊範圍在新檔案中悄悄讓某一頁變成兩份。如果您刻意想要重複,那是另一種工作——請使用專為此設計的 PDF 頁面重排或複製流程,而不是這個擷取工具。

限制、加密,以及這個工具不會保留的內容

輸入的界線是具體且會被強制執行的。瀏覽器會檢查檔案的 MIME 類型或副檔名,並依 50 MiB 的上限測量實際的位元組大小。剛好 50 MiB 的檔案會被接受;更大的檔案會被拒絕,而不是被悄悄縮減。載入後,解碼後的文件必須包含 1 到 500 頁之間。有密碼保護或加密的 PDF 不會透過繞過加密的方式來開啟,因此請先在原始的編輯軟體中移除任何擁有者或使用者密碼後再進行擷取。損壞的檔案可能會以明確錯誤無法載入,而動態 XFA 表單在 pdf-lib 中並不是支援的保留目標——如果 XFA 行為很重要,請使用原始的編輯應用程式。請參閱 pdf-lib 的加密處理文件以了解底層行為。

擷取作業會複製頁面物件——圖形、字型、影像、裁切與媒體框,以及 90 度旋轉旗標——但有幾項重要功能存在於文件層級而非頁面層級。書籤、文件大綱、頁面標籤、圖層、嵌入檔案、AcroForm 欄位、註解、腳本、跨頁目的以及連結,都可能參照到所選頁面之外的物件,因此不一定能乾淨地保留下來。數位簽章在位元組被重新組合成不同 PDF 的那一刻也會失效,即使每一個複製的頁面完全相同。請將這些視為任何頁面層級擷取作業的已知後果,而不是錯誤,並在依賴輸出之前確認其行為符合您的需求。

在您信任它之前先驗證輸出

請在您的收件者將使用的檢視器中開啟新的 PDF。依序檢視每一頁,確認頁數符合您選取的不重複頁面,並檢查任何預期的連結、表單欄位或附件是否運作正常。例如,如果您是透過書籤範圍擷取了一個章節,然後在 Acrobat 中開啟結果,請檢查內部連結是否仍解析到新的頁面位置,而不是指向孤立的目的地。對於受規範、需要簽章或注重無障礙的工作流程,請將輸出交給專業的 PDF 編輯器;這個瀏覽器工具刻意設計得很窄。

也請進行快速的檔案大小健全性檢查。輸出可能會比粗略的頁數估計還大,因為每個複製的頁面都帶有它所依賴的字型和影像,資源吃重的文件即使只擷取單一一頁,也可能帶入驚人龐大的資料量。如果輸出明顯大於預期,那是一個訊號,代表您應該回頭檢視選取了哪些頁面,而不是擷取工具有缺陷。pdf-lib PDFDocument API支援了底層的複製步驟,且輸出的頁數永遠等於所選不重複頁面的數量,不論每頁的資源有多重。

超越單一輸出的書籤工作流程

有時候目標不是一份精簡過的 PDF,而是一個裝著各章節檔案的資料夾。一份每章都有書籤的 400 頁技術手冊就是典型的例子。同一套做法仍然適用:讀取每個章節書籤的目標頁,然後將輸入分割成每章的範圍,例如 1-22、23-58、59-104。您可以每個範圍執行一次 Extract PDF Pages,來產生一系列的單章 PDF;或者如果您偏好專門的分割工作流程,可以在一次作業中產生多個檔案,那麼請將每個範圍交給 Split PDF。不論哪一種情況,讀取書籤的步驟都相同。

同樣的原則也能反過來推廣。如果 PDF 沒有書籤大綱,但您仍想要一組精選的頁面,請依照大綱可能會提供給您的方式記下頁碼,然後透過擷取工具執行它們。一旦您將大綱項目與整數頁碼之間的對應關係內化,任何工具鏈中以書籤驅動的擷取作業,都會變成只是寫下正確的、以 1 為起點的頁面參照清單而已。

如需更深入的瞭解,請參閱如何在 Mac 瀏覽器中從 PDF 擷取影像。

如需更深入的瞭解,請參閱從 PDF 擷取頁面說明:順序與規則。