透過讀取每個書籤項目旁邊所列的目的地頁碼,再把這些以 1 為起始的頁碼——或是像 3-7 這種含首尾的遞增區間——輸入到一個以瀏覽器為基礎的擷取工具中,就能依你輸入的順序,將所選頁面複製成一份新的 PDF。書籤本身並不是可以單獨下載的物件。它們是儲存在文件內部的導覽連結,指向一個或多個頁面上的座標。因此,若要擷取書籤所指向的頁面,你需要把每個書籤項目轉成它所對應的整數頁碼,再把這份清單交給像 Extract PDF Pages 這類以頁碼驅動的擷取工具,它會透過 pdf-lib 在本機讀取原始位元,把要求的頁面物件複製到一份全新的 PDFDocument,然後把結果以可下載的檔案呈現在你目前的分頁中。選取欄位接受以逗號或空白分隔的整數,以及像 1-3 這類含首尾的區間,會依照你輸入的順序把每個 token 視為一個目標頁,並且不會悄悄地把像 5-3 這種遞減區間反轉過來。

PDF 中的書籤究竟是什麼
PDF 書籤——在某些檢視器中也稱為大綱項目、目錄條目,或「我的最愛」——是一個具名的連結。它帶有一個標題、一個階層層級、一個開啟或收合狀態,以及一個目的地,告訴檢視器讀者點擊時應跳到哪一頁的哪個位置。這個目的地通常是一個頁面參考,加上可選的檢視矩形或縮放比例,讓檢視器在跳轉後能正確框出頁面上的區域。書籤本身並不攜帶頁面內容的副本。實際的圖形、文字片段、字型、內嵌影像以及表單元件,都存放在文件頁面樹中被參考的那個頁面物件上。
這個區別對擷取來說很重要。你不能像選檔案一樣去選一個書籤,因為書籤是中繼資料,不是承載內容的資料。不過,書籤所指向的頁面,則是任何擷取工具都能逐字複製的一級頁面物件。因此,工作就是:把每個書籤轉成它所指向的整數頁碼,再把這份清單交給以頁碼運作的工具。
讀出每個書籤背後的頁碼
在你動用任何擷取工具之前,你需要一份乾淨的、以 1 為起始的頁碼清單。建立這份清單最快的方式,是在你信任的檢視器中開啟 PDF——Acrobat、Preview、Chrome 內建的檢視器、Firefox 的 PDF.js,或你慣用的行動裝置閱讀器——然後逐個點擊書籤面板中的項目。檢視器會跳到目的地頁面,而檢視器介面或狀態列上顯示的頁碼,就是要記錄下來的值。
對於較深層的大綱——技術手機、法律文件或教科書中的多層次目錄——只擷取你實際需要的層級。如果你只想要各章的起始頁,就略過底下嵌套的子節書籤;如果你想要所有書籤的目標,就遍歷整個大綱。有些檢視器讓你對書籤按右鍵,選擇「內容」或「前往目的地」指令,直接讀取目的地頁面而不必捲動整份文件;在處理長檔案時,這通常比逐一點擊更快。
一旦頁碼到手,就把相鄰的目標合併成區間,讓選取欄位更精簡易讀。若書籤指向第 3、4、5、6、7 頁和第 12 頁,就寫成 3-7, 12,而不是 3, 4, 5, 6, 7, 12。Extract PDF Pages 中的剖析器接受這兩種寫法並以相同方式處理,使用區間也讓你一眼就能看出空缺。
把書籤頁面拉進一份新的 PDF
備好從書籤到頁碼的清單後,擷取本身是一段簡短、確定性的流程。這個工具在本機執行:它會驗證檔案的 MIME 類型與大小,透過 pdf-lib 載入位元,剖析你的選取,把要求的頁面物件複製到一份全新的 PDFDocument,然後把結果以暫時下載的方式呈現。一切都不會離開你的瀏覽器。
- 開啟 Extract PDF Pages,挑選你想從中擷取書籤的本地 PDF。檔案必須未加密,大小不超過 50 MiB(52,428,800 位元組),且頁數不超過 500 頁。
- 把書籤對應的頁碼輸入到選取欄位。使用以 1 為起始的整數,以及以逗號或空白分隔的含首尾遞增區間——舉例來說,5, 1-3 表示原始的第 5 頁,然後依序是第 1、2、3 頁。
- 點擊擷取動作。剖析器會去除重複的 token,把唯一的頁面物件複製到一份新的 PDFDocument,並回報任何重複頁面的通知,讓你確認哪些被略過。
- 透過出現的暫時連結下載產生的 PDF。該連結會在分頁關閉或你再次執行擷取時釋出,所以請立即存檔,不要留到之後再開分頁。
- 在目標檢視器中開啟下載的 PDF,確認頁面順序與內容,並把原始檔一併保留以便對照。
剖析器把選取欄位的長度上限設為 4,000 字元,且遇到格式錯誤的輸入會直接拒絕,而不是猜測。小數、負數頁碼、像 5-3 這種遞減區間,以及超出文件最後一頁的參考,都會明確地產生錯誤,讓你在輸出任何檔案之前修正運算式。
選取語法、Token 順序與重複處理
在選取欄位中,token 的順序是有意義的。運算式「5, 2-3」並不會自動排序;它會產生一份 PDF,第一頁是原始的第 5 頁,接著是原始的第 2 與第 3 頁。如果你需要不同的敘事順序——例如,按照書籤在原本大綱中出現的順序——就依該順序輸入,擷取工具會逐字保留。下表摘要說明幾個常見模式如何對應到輸出文件。
| 選取模式 | 新 PDF 中的頁面 | 備註 |
|---|---|---|
| 5 | 原始的第 5 頁 | 單一整數選取一頁。 |
| 1-3 | 原始的第 1、2、3 頁 | 含首尾的遞增區間會選取端點之間的每一頁。 |
| 5, 1-3 | 原始的第 5 頁,接著是第 1、2、3 頁 | 保留 token 順序,因此區間不會被搬到最前面。 |
| 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 的 encryption handling documentation。
擷取作業會複製頁面物件——圖形、字型、影像、裁切與媒體框,以及 90 度旋轉旗標——但有幾項重要功能是位於文件層級而非頁面層級。書籤、文件大綱、頁面標籤、圖層、內嵌檔案、AcroForm 欄位、註解、指令碼、跨頁目的地與連結,都可能參考到所選頁面之外的物件,因此並不一定能乾淨地保留下來。數位簽章也會在位元組被重新組裝成不同 PDF 的那一刻失效,即使每一頁被複製的內容完全相同。請把這些視為任何頁面層級擷取作業已知的後果,而不是 bug,並在依賴輸出之前確認其行為符合需求。
在信任輸出之前先驗證它
在收件人會使用的檢視器中開啟新的 PDF。逐頁檢視,確認頁數符合你選取的唯一頁面,並檢查所有預期的連結、表單欄位或附件是否正常運作。例如,如果你透過書籤區間擷取了一個章節,接著在 Acrobat 中開啟結果,請確認內部連結仍能解析到新的頁面位置,而不是指向孤立的目的地。對於受規範、需要簽章或重視無障礙的工作流程,請把輸出交給專業的 PDF 編輯器;這個瀏覽器工具是有意做得範圍很窄的。
也進行一個快速的檔案大小健全性檢查。輸出可能會比天真的頁數估算還大,因為每個被複製的頁面都會帶著它所依賴的字型與影像,資源吃重的文件即使只擷取一頁,也可能捲入驚人龐大的資料量。如果輸出明顯比預期大,這是重新檢視你選取了哪些頁面的訊號,而不是擷取工具的瑕疵。底層的複製步驟由 pdf-lib PDFDocument API 提供,無論每頁的資源有多重,輸出的頁數永遠等於你選取的唯一頁面數。
超越單一輸出的書籤工作流程
有時候目標不是一份修剪過的 PDF,而是一個章節檔案資料夾。一本 400 頁、每章都有書籤的技術手機就是典型的例子。同樣的步驟仍然適用:讀出每個章節書籤的目標頁,然後把輸入拆成各章的區間,例如 1-22, 23-58, 59-104。你可以對每個區間分別執行一次 Extract PDF Pages 來產生一連串單章 PDF,或者把每個區間交給 Split PDF,若你偏好用一次作業就產生多個檔案、專門的分割工作流程。無論採哪一種,讀取書籤這一步都相同。
同樣的原則也可以反向延伸。如果 PDF 沒有書籤大綱,但你仍想要一組精心挑選的頁面,那就按大綱原本可能給你的方式把頁碼記下來,然後丟進擷取工具。一旦你把大綱項目與整數頁碼之間的對應關係內化,任何工具鏈中以書籤驅動的擷取,就都只是寫出正確的、以 1 為起始的頁面參考清單而已。