要從 PDF 檔案取得連結,您需要讀取文件中的可點擊連結註解,而不是其可見文字。PDF 將超連結儲存為附加於特定頁面的結構化註解物件,因此當某個 URL 僅以純文字形式列印在頁面上時,除非它也同時被設為可點擊,否則在擷取時並不會出現。使用 PDF.js 的本機瀏器工具可以在您的裝置上開啟檔案,逐一檢視每頁的註解清單,並僅列出符合支援協定 (例如 http、https、mailto 與 tel) 的目標。最終結果會是一份依頁碼排序、非作用中的文字報告 — 絕不會是即時、可實際點擊前往的超連結 — 您可以將其以純文字形式複製,或下載為 UTF-8 TXT 檔或已中和公式的 CSV 檔。PDF 檔案本身從不離開您的瀏覽器。這種做法非常適合用來盤點報告中的對外引用、在分享文件前進行連結的健全性檢查、檢視 PDF 將讀者導向何處,或是稽核一份您從他人手中接手的檔案。

how to get link from pdf file
how to get link from pdf file

「從 PDF 取得連結」究竟代表什麼意思

PDF 儲存 URL 的方式有兩種。第一種是作為可見、可選取的文字 — 與儲存一個句子或註腳的方式相同。第二種是作為連結註解,一個附加於特定頁面的結構化物件,將頁面上的某個區域 (或整個頁面) 綁定到一個目的地。當您在一般的 PDF 檢視器中點擊連結時,您所跟隨的是註解,而不是在搜尋 URL 字串。

這個區別很重要,因為大多數詢問如何從 PDF 檔案取得連結的讀者,想要的是可點擊的目的地,而不是文件中恰好包含的每一個長得像 URL 的字串。一份報告可能在頁面上顯示數十個 URL,但如果建立者從未將這些引用設為可點擊,真正的連結註解可能只有少數幾個。反之,PDF 也可能帶有不可見的連結註解,涵蓋整個頁面 — 這對於啟動畫面來說很實用 — 這類註解即使沒有任何底線視覺效果,仍會出現在擷取結果中。

PDF Link Extractor 採用的是第二種路徑。它使用 PDF.js 載入檔案,並檢查每頁的註解資料,找出帶有外部 URL 或內部目的地的物件。它不會掃描原始位元組串流來尋找長得像 URL 的文字,這代表壓縮的內容串流、字型表、詮釋資料以及一般內文都不會產生誤判。

如何在本地擷取 PDF 中的每一個連結

開始之前,請先確認您的文件可以在標準檢視器中正常開啟,且未受密碼保護。此工具一次接受一份 PDF,上限為 25 MiB 與 40 頁;加密、損壞或超出限制的檔案會在取開始前,以明顯的錯誤訊息加以拒絕。

  1. 在瀏覽器中開啟 PDF Link Extractor,使用檔案選擇器選擇一份本機 PDF。所選檔案由瀏覽器讀取;不會上傳至任何伺服器。
  2. 點擊「Extract Links」(擷取連結)。PDF.js 及其 worker 會視需要載入,接著工具會依序逐頁檢查並讀取其註解清單。
  3. 檢視瀏覽器中顯示的報告。每一列會顯示頁碼、註解編號、連結類型,以及以非作用中形式呈現的目標字串。
  4. 將報告複製到剪貼簿,或下載為 UTF-8 TXT 檔或公式安全的 CSV 檔。
  5. 如有需要,可載入其他檔案。開始新的擷取會自動取消先前的執行,並清除暫存狀態。

如果您希望以最簡單的方式處理單一 PDF,且最在意隱私面向,專屬的在不上傳的情況下擷取每一個連結指南會以同樣的流程進行說明,並額外強調哪些內容會保留在您的裝置上。

哪些協定會列入報告 (哪些不會)

連結註解在技術上幾乎可以指向任何目標:網址、電子郵件、電話號碼、JavaScript 運算式、檔案路徑、blob 參考,或任意自訂協定。其中大多數並不適合在報告中以即時、可點擊的文字形式呈現,因此此工具套用了一個嚴格的允許清單。

協定是否接受備註
http外部網頁連結
https外部網頁連結
mailto電子郵件地址目標
tel電話號碼目標
javascript已過濾
data已過濾
file已過濾
blob已過濾
其他任何項目已過

比對不區分大小寫,因此 HTTPS 與 https 會被視為相同。包含控制字元的字串也會在進入報告前遭到拒絕。每次擷取的摘要頁尾會列出檢查過的註解數量、接受的目標數量、移除的重複項目數,以及略過的不安全或不支援項目數 — 當您想確認所看到的數字與文件的完整註解集合相符時,這項資訊相當實用。

外部目標與內部目標

報告中包含兩種類型的目的地,兩者的行為並不相同。

外部目標是 URL:http 或 https 位址、mailto 或 tel。這些會以 PDF.js 所揭露的形式,以完全相同的非作用中文字呈現。此工具絕不會造訪、抓取、驗證或對目標進行信譽檢查 — 它出現在報告中,僅代表 PDF 中包含一個指向該目標的支援連結註解。在開啟或重新發布任何重要的目的地之前,請務必自行獨立加以驗證。

內部目標指向同一份文件中的其他位置。PDF.js 可以將這些目標揭露為具名目的地或明確的目的地陣列,報告中會將其標示為內部。由於內部目的地的結構與檢視器行為在不同的文件與檢視器之間並不一致,此工具並不保證能將每個內部目標解析為最終的頁碼。它會序列化出一個有限且可讀的呈現方式,讓您能看出 PDF 在自身內部指向何處,接著將解讀的工作留給您與您的檢視器。

兩種類型的目標都會保留頁碼順序與頁內註解順序,因此報告會以讀者依序接觸連結的相同順序,由上至下閱讀。

為何連結可能會缺失

有幾種常見情況會導致連結未出現在報告中,即使您能在文件中看到該 URL。

URL 僅被列印出來,而未設為可點擊。剛好長得像網址的可見文字,並非連結註解。此工具讀取的是註解,而不是在所有文字中搜尋長得像 URL 的字串,因此您從未加上底線的超連結將不會出現。

註解使用了不支援的協定。如果連結指向 javascript:、data: 或 http、https、mailto、tel 允許清單以外的任何協定,它會從報告中過濾掉,而不是以可點擊的目標呈現。

PDF 已加密或格式錯誤。加密或損壞的文件會在擷取之前遭到拒絕,因此其中的任何連結根本不會被檢查。移除密碼 (若您知道密碼) 或修復檔案,是必要的前置步驟。

同一個完全相同的目標在同一頁上出現兩次。同一頁上完全相同的重複項目會被視為多餘而移除;但相同連結出現在不同頁面時,則會予以保留,因為頁面出現位置本身就是文件將讀者導向何處的重要證據。

安全的匯出選項

同一份非作用中的報告提供三種形式:可複製為純文字的螢幕上表格、UTF-8 TXT 下載,以及 CSV 下載。CSV 的欄位為頁碼、註解編號、類型與目標。引號與內嵌的換行會依標準 CSV 規則進行跳脫處理,而任何以試算表公式前置字元開頭的儲存格,都會在寫入檔案前進行中和處理。這能避免擷取出的目標在使用者於試算表軟體中開啟報告的當下,被當作公式執行。

此 CSV 跳脫行為與已發布的試算表匯入公式注入指引一致,底層的註解資料則來自 PDF.js — 也就是驅動許多主流覽器型檢視器的同一個解析器。如果您需要自行檢查註解物件的結構,請參考 PDF.js API 參考文件 中的 PDFPageProxy API,而專案本身則位於 Mozilla PDF.js 儲存庫

隱私與檔案去向

PDF 與擷取出的目標在整個過程中都會留在您的裝置上。此工具不會將文件上傳至任何連結分析伺服器,也不會聯絡任何擷取出的 URL。PDF.js 只有在您按下擷取按鈕後才會載入,因此解析器並非初始頁面套件的一部分。當您開始對不同檔案進行新的擷取時,先前的執行會被取消,所有暫存 URL 與載入工作也會一併釋放。

這種在本機處理的做法,使得此工具非常適合用於盤點、遷移檢查、文件品質保證,以及檢視 PDF 將讀者導向何處。它並非爬蟲、失效連結檢查器、釣魚偵測器、無障礙稽核工具或內容掃描器 — 其結果的可靠性僅止於 PDF.js 能夠讀取的註解資料,任何目的地的驗證責任仍由您自行承擔。

如需更深入的探討,請參閱《PDF 裁切入門:以淺白英文逐步說明》