從 PDF 中擷取連結,意即將文件中所有可點擊的連結註解抽出來,並依頁面列出,讓你不必重新輸入,就能檢視、複製或下載目標。對多數初學者來說,真正的障礙不是「點擊」本身,而是在一份散佈數十個連結的 PDF 中取得一份乾淨的清單——有些指向外部網站,有些指向同一份檔案中的其他頁面,還有些看起來像 URL,實際上卻從未被設為可點擊。專用的擷取工具會直接讀取底層的連結註解,而不是逐字掃描檔案中長得像 URL 的文字,這正是它比從 PDF 閱讀器複製貼上更精準的原因。PDF Link Extractor 正是為此設計,而且完全在你的瀏覽器中執行:你挑選一份不超過 25 MiB、40 頁的本機 PDF,按下一個按鈕,就能得到一份依頁面排序、列出文件中所有支援連結的報告。檔案與其內容在任何階段都不會離開你的裝置。
接下來是一份對初學者友善的操作說明,介紹這個工具的運作方式、它能讀取與無法讀取的連結類型,以及如何解讀它所產生的報告。

PDF 中哪些內容算是連結
PDF 中可見的 URL 並不必然都是可點擊的連結。PDF 作者有兩種方式在頁面上放入網址:可以將它打成一般文字,讓閱讀者看見並選取;也可以把它包進一個稱為「連結註解」(link annotation) 的特殊物件中。連結註解正是讓 URL 在任何 PDF 檢視器中變得可點擊的關鍵,也正是讓 URL 能以程式方式取出的依據。
PDF Link Extractor 讀取的是 PDF.js 的註解資料,而不是在文件的原始位元組中搜尋長得像 URL 的字串。這個區別很重要,因為 PDF 的資料流、字型表與中繼資料中,經常含有一些本來就無意被設為可點擊、卻長得像 URL 的片段。透過只看註解,這個工具能避免將這些偽陽性結果挖出來。根據 Mozilla 的 PDF.js API 說明文件,頁面代理物件上的 getAnnotations 方法,是依類型枚舉註解的正式做法,而連結註解正是支援的類別之一。
連結註解有兩種形式。外部連結使用 HTTP 或 HTTPS 等協定,指向文件外部的 URL;內部目的地則指向同一份 PDF 中的其他位置,通常是另一頁或一個具名書籤目標。內部目的地不一定帶有網址形式的 URL——它可能以一個具名字串表示,也可能以一個描述頁面、檢視與位置的結構化陣列表示。
開始之前需要準備什麼
這個工具有一份簡短的硬性需求清單,而且在你按下任何按鈕之前就會全部顯示出來:
- 單一 PDF 檔案。擷取工具一次只接受一份文件。如果你有多份 PDF,請分批處理,或先合併成一個檔案再依需求進行。
- 檔案大小上限 25 MiB。超過的檔案會被拒絕並顯示明確的錯誤訊息。
- 頁數上限 40 頁。超出此限制的文件不會被處理。
- 不得有密碼保護。加密的 PDF 會在擷取開始前就回傳錯誤。
- 檔案必須有效且未損毀。格式錯誤或不支援的文件會顯示清楚的錯誤,而不是產生一份不完整的報告。
由於這個工具是在瀏覽器中本地執行,你的 PDF 與產生的報告全程都留在你的電腦上。沒有上傳步驟,也不需要建立帳號。
如何從 PDF 中擷取連結
實際操作流程很短,第一次使用的使用者也能在幾分鐘內完成:
- 在瀏覽器中開啟 PDF Link Extractor 頁面,點擊檔案選擇器來挑選一份本機 PDF。工具會在前端把檔案限制在 25 MiB 與 40 頁以內,並直接拒絕加密、損毀或過大的文件。
- 點擊 Extract Links。工具會在使用者執行此動作後才載入 PDF.js 及其 worker,對每一頁請求註解清單,並把清單過濾為受支援的連結註解。
- 檢視頁面上出現的報告。每一列會顯示頁碼、註解順序、連結類型,以及非作用中的目標文字。外部目標只有在採用 HTTP、HTTPS、mailto 或 tel 時才會被保留;其他全部會被過濾掉並計入摘要。
- 將報告複製到剪貼簿,或下載 UTF-8 純文字版本,或可安全用於公式的 CSV 版本。兩個檔案都在本地產生,絕不會離開你的裝置。
- 如果已經開啟一份 PDF 又載入了另一份,新的執行作業會取消前一項工作,並自動清除先前的結果、下載連結與頁面狀態。
讀懂報告:欄位與標籤
螢幕上的報告與可下載的檔案使用相同的欄位。以下用白話說明每一欄的意義。
| 欄位 | 顯示內容 | 為何重要 |
|---|---|---|
| Page | 連結註解所在的頁碼 | 協助你跳回原始 PDF,目視確認該連結 |
| Annotation number | 該頁上註解的順序 | 當同一頁有許多重疊或堆疊的連結時特別實用 |
| Type | 外部或內部,加上協定或目的地類型 | 讓你一眼看出目標是 URL,或是同一份文件中的某個位置 |
| Target | URL 的非作用中文字,或內部目的地的可讀表示 | 可安全複製;本身不會自動導向、抓取或執行連結 |
表格上方的摘要區塊會告訴你:檢視了多少註解、接受了多少、移除了多少重複項目,以及因不安全或不支援而略過了多少目標。同一頁上完全相同的重複項目會自動移除;而同一個連結出現在不同頁時則會保留,因為了解有哪些頁面引用它,往往是很有用的證據。
哪些 URL 協定會被納入
擷取工具只接受一小組實用的協定,其餘一律拒絕。檢查不區分大小寫,也會拒絕任何含有控制字元的 URL——這是隱藏不安全酬載的常見手法。
| 協定 | 是否接受 | 備註 |
|---|---|---|
| http | 是 | 一般網頁連結會納入報告 |
| https | 是 | 安全網頁連結會納入報告 |
| mailto | 是 | 包成可點擊連結的電子郵件地址會出現在報告中 |
| tel | 是 | 電話號碼連結會納入報告 |
| javascript | 否 | 略過,以避免把可執行的內容挖出來 |
| data | 否 | 略過,因為內嵌酬載不是可點擊的目標 |
| file | 否 | 略過,因為本機檔案參照不在處理範圍內 |
| blob | 否 | 略過,因為這些指向已不存在於來源應用程式之外的記憶體物件 |
| 任何含有控制字元的 URL | 否 | 略過,作為一項防禦性措施 |
被排除的協定會直接從報告中移除,而不會變成可點擊的連結;因此用其他程式開啟 CSV 或 TXT 檔時,不會觸發任何導向或程式碼執行。
連結沒有出現在結果中時
報告中少了一列,通常源自少數幾個原因,辨認出來能省下大量時間:
- URL 只是印出的文字,不是連結註解。如果作者只是輸入網址,卻沒有把它包進可點擊的範圍,工具就看不到它。在 PDF 中,「可見文字」與「可點擊性」是彼此獨立的。
- PDF 已加密或有密碼保護。工具無法自行解密,會直接拒絕該檔案。
- 連結使用的協定不在支援範圍內。自訂協定、指向行動 App 的深層連結,以及 JavaScript 動作,都會被刻意過濾。
- 檔案超出限制。超過 25 MiB 或 40 頁的 PDF,會在擷取開始前就回傳明確的錯誤。
- 內部目的地沒有穩定的 URL 形式。具名目的地與明確的目的地陣列仍會被列出,但工具並不保證能把它們每一個都解析成最終頁碼,因為不同文件中的目的地結構與檢視器行為可能有所不同。
如果你懷疑某個連結不見了,用任何標準的 PDF 閱讀器開啟檔案,把滑鼠移到該處上方,就能立刻判斷它到底是不是可點擊的。
讓流程保持安全且可預期
這個擷取工具是為了盤點、移轉檢查、文件品保,以及檢視 PDF 把讀者送往哪裡而設計。它不是爬蟲、壞連結檢查器、釣魚偵測器、無障礙稽核工具或內容掃描器。報告中出現某個目標,只代表這份 PDF 暴露了一個受支援的連結註解——並不代表該目的地一定可連達、目前仍然有效,或值得信賴。任何重要的目的地在被造訪、發布或分享之前,都應該另外獨立驗證。
工具產生的 CSV 檔已針對一個常見的試算表風險進行強化。根據 OWASP 的 CSV 注入指引,以 =、+、- 或 @ 等字元開頭的儲存格,可能會被試算表軟體重新解讀為公式,接著在檔案被開啟時執行程式碼或外洩資料。PDF Link Extractor 在序列化儲存格之前,會先中和這類前置字元,並依標準 CSV 規則跳脫內嵌的引號與換行字元。TXT 檔則是純 UTF-8,具備穩定的頁面標籤,且完全沒有任何可執行的表面。
若想更深入了解底層解析器如何呈現註解資料,Mozilla PDF.js 專案 在 GitHub 上的內容,是這套工具所依賴之註解結構的最終依據。
這個工具的設計目標,是讓第一次使用的初學者不必了解 PDF 規格,就能產出有用且完整的清單。選一份本機檔案、按下按鈕,依頁面排序的報告就能複製或下載——一套小而可預期的工作流程,從單頁講義一路適用到 40 頁的報告。
延伸閱讀:PDF 轉 PNG 初學者指南:第一次操作完整說明。
延伸閱讀:合併 PDF 初學者指南:簡單的第一次操作手冊。