若要從 PDF 中擷取可點擊的連結,請在瀏覽器中開啟 PDF Link Extractor,選擇一個不超過 25 MiB 的本地 PDF,然後點擊 Extract Links。這個工具使用 PDF.js 讀取 PDF 的連結註解,列出每個目標及其頁碼與連結類型,並讓你可以複製報表,或下載不會觸發公式的 CSV 或 UTF-8 TXT 檔案。由於擷取作業是針對註解層而非原始位元組流執行,因此來自壓縮物件、字型資料、詮釋資料或一般印刷文字的誤判會大幅減少。PDF 與擷取出的目標都會保留在你的裝置上,不會上傳到任何連結分析伺服器。外部目標僅在接受 HTTP、HTTPS、mailto 或 tel 時才會被納入,並以非作用中的文字形式顯示,讓你在複製前可以先行檢視。如果你是為了遷移而稽核文件、建立連結清單,或單純想知道一份 PDF 把讀者導向何處,這種方法能讓你在不離開瀏覽器的情況下,得到一份依頁序排列、乾淨的清單。

how to get a link from a pdf
how to get a link from a pdf

「從 PDF 取得一個連結」實際上代表什麼

PDF 以兩種不同的方式承載 URL。一種 URL 會像電話號碼或地址一樣,以普通的可見文字直接繪製在頁面上。另一種 URL 則被包裝在 PDF 連結註解中,這是一個覆蓋在可見文字之上的可點擊物件,並帶有獨立的目標欄位。在 PDF 檢視器中點擊底線詞組的讀者,其實是依循該註解的目標,而非所看到的字面文字。

這種區分很重要,因為「如何從 PDF 取得一個連結」這個問題,會依使用者想要的是哪一種 URL 而有兩種不同的答案。把頁面文字貼到搜尋欄位中可以找出可見的 URL,但會漏掉所有從未被設成可點擊的連結,同時也會擷取到壓縮物件串流、字型表或詮釋資料中看起來像 URL 但根本不是目的地的字串片段。讀取註解層才是可靠的方式,能夠逐一列出作者實際設定的可點擊目的地。

PDF Link Extractor 正是運作於該註解層。它使用 PDF.js 載入每一頁的註解清單,僅挑選具有可用外部或內部目的地欄位的項目,然後依其出現順序回報。

如何在本地從 PDF 擷取連結

擷取作業完全在瀏覽器中執行,因此你無須將文件交給遠端服務。以下是從已儲存的 PDF 到可複製報表的完整流程。

  1. 在瀏覽器中開啟 PDF Link Extractor。頁面套件會先載入;PDF.js 及其共用 worker 只有在你按下按鈕後才會載入,讓初始頁面保持輕量。
  2. 選擇一個不超過 25 MiB 且不超過 40 頁的本地 PDF。加密、損壞或超出限制的文件會被拒絕並顯示明確錯誤,請在開始前確認檔案未受保護。
  3. 點擊 Extract Links。工具會依序走訪每一頁,透過 PDF.js PDFPageProxy API 取得該頁的註解,並挑選帶有支援的外部 URL 或內部目的地的項目。
  4. 在畫面上檢視報表。每一列顯示頁碼、該註解在頁面註解清單中的位置、連結類型,以及非作用中的目標字串。不安全的通訊協定會被略過,而不會以可點擊連結的形式顯示。
  5. 複製報表到剪貼簿,或下載 UTF-8 TXT 檔或 CSV 檔。重新執行擷取會取消先前的作業,並清理先前產生的任何下載 URL。

連結報表包含哪些內容

CSV 匯出使用一套小巧且固定的欄位結構。以下四個欄位會為每個接受的註解寫入,並依標準 CSV 規則進行逸出處理,使引號與換行能夠在匯入試算表軟體後完整保留。

欄位說明
page註解所在的頁碼,依文件順序排列。
annotation number該註解在該頁註解清單中的位置。
type目標是外部(網頁 URL)或內部(同一 PDF 內部的目的地)。
target非作用中的目標字串。外部列即為 URL;內部列則是目的地的有限、可讀表示形式。

TXT 版本使用相同的資料與穩定的頁碼標籤,並以 UTF-8 編碼,因此可在任何文字編輯器中正確開啟。資料列上方的摘要區塊會記錄已檢查的註解數量、接受的連結、被合併的重複項目,以及因通訊協定不在允許清單中而被略過的目標。同一頁上的完全重複項目會被移除,而出現在不同頁面的重複連結則會保留,因為檢視時能看見 URL 在哪些位置重複,是有用的證據。

允許與略過的通訊協定

外部目標在進入報表之前就會先經過篩選。允許清單刻意設計得很窄,因此你複製到的 CSV 或 TXT 僅包含對大多數工作流程有用的目的地。

通訊協定處理方式範例
http接受http://example.com/page
https接受https://example.com/page
mailto接受mailto:[email protected]
tel接受tel:+14155550199
javascript略過javascript:alert(1)
data略過data:text/html,...
file略過file:///etc/passwd
blob略過blob:https://...
控制字元或空值略過https://example.com%07

通訊協定的檢查不區分大小寫,且會拒絕任何包含控制字元的目標。內部 PDF 目的地(可能是具名目的地或指向同一份文件中其他位置的明確目的地陣列)會被標示為內部目標,並以有限、可讀的形式序列化。這個工具並不保證能將每個內部目的地解析為最終頁碼,因為目的地結構、頁面參考與檢視器行為可能因文件而異。

安全性:本地處理與公式注入

有兩道安全界線值得留意。第一道是隱私:PDF 從未離開你的裝置。PDF.js 及其 worker 只有在你按下 Extract Links 後才會載入,且文件是在頁面內處理,而非傳送到任何連結分析伺服器。當你開始新的擷取或關閉工具時,載入任務、頁面物件與下載 URL 都會被清理。

第二道是試算表安全性。CSV 雖然方便,但以 =、+、-、@ 或定位字元開頭的目標,在檔案被開啟時可能被解讀為公式。擷取器的處理方式是為任何以公式字元開頭的儲存格加上前置字元,使擷取出的目標在你日後開啟報表時不會變成公式。引號與嵌入的換行仍依標準 CSV 規則進行逸出。

目標本身是非作用中的文字。這個工具不會前往、擷取、驗證、進行信譽檢查,也無法保證它們的安全性。請將擷取出的清單視為不受信任的資料,並在造訪或發布重要目的地之前,獨立加以查證。

PDF 連結報表的常見使用情境

一份乾淨的文件中所有可點擊目標清單,在多種反覆出現的情境中都相當實用。

  • 盤點:列出出版物所指向的每個 URL,以便一次完成更新或輪替。
  • 遷移:當網站變更網域時,確認哪些 PDF 仍指向舊的主機,並判斷是否需要編輯。
  • 文件品質檢核:抽樣確認交付項目中的連結是否如需求所指定,並確認沒有內部跳躍指向已刪除的頁面。
  • 分享前檢視:在轉寄 PDF 之前,先看清楚它會把讀者帶往何處,而無須手動逐頁開啟。
  • 編目與詮釋資料作業:將結構化的目標清單輸入需要追蹤對外引用的編目或內容管理系統。

這個工具不是爬蟲、斷連連結檢查器、網路釣魚偵測器、無障礙稽核工具,也不是內容掃描器。某個目標出現在報表中,僅能證明 PDF.js 公開了一個支援的連結註解,並不能證明該目的地仍然有效、安全或合適。若需要更深入的檢查,請另外執行斷連連結或無障礙檢查。

如需深入了解,請參閱 Extract Links From a PDF: A Local Browser Walkthrough

如需深入了解,請參閱 Find and Copy Every PDF Link from Google Drive Files