Google Drive 將 PDF 以一般檔案的形式儲存,並且每份文件只公開單一分享網址,永遠不會列出文件內所有可點擊的連結。若要從 Google Drive 取得 PDF 連結,您必須先把檔案下載到裝置上,再執行本機的擷取工具,依頁面順序讀取 PDF 的連結註解,然後將結果以純文字或 CSV 格式複製或下載。以註解為基礎的方式之所以重要,是因為 PDF 格式會把可點擊的連結物件與可見的文字層分開:只印刷在頁面上、但未設為可點擊的網址並不是連結註解,因此不會出現在報表中;而即使是隱形或隱藏的可點擊註解,仍然會出現。擷取完成後,您可以自行排序、篩選或稽核這些目標,也可以保留原始 PDF 作為紀錄來源,因為 Drive 上或工具端都不會有任何修改。Drive 的預覽功能在您 hover 時可以顯示部分目標位置,但並不會匯出它們,因此一個完全在本機運作的專用擷取工具才是實際可行的做法。

為什麼 Google Drive 不會自行顯示連結清單
Google Drive 是一個儲存與預覽層級。對於每個檔案(包括 PDF),Drive 會提供一個形式為 https://drive.google.com/file/d/<FILE_ID>/view?usp=sharing 的可分享網址,以及另一個由相同檔案 ID 加上 export=download 所構成的直接下載網址。這些網址描述的是檔案本身,與 PDF 作者在第 3、7、12 頁內嵌的可點擊目標完全無關。
Drive 內建的預覽器有時在瀏覽器中 hover 連結時能顯示單一目標位置,但它不會彙整它們、不允許您複製清單,也不會區分外部網址與同一份文件內部的跳躍。如果 PDF 是從 Google Docs、Slides 或其他會將即時連結扁平化為 PDF 註解的編輯器匯出的,這些目標位置對 Drive 的分享 UI 來說就會變得隱形。若要批次處理這些目標位置、進行稽核、遷移,或建立引用清單,您需要一種能在自己裝置上讀取 PDF 的方式。
什麼算是 PDF 內的連結
有兩件事經常被混淆。PDF 可以在頁面上以可見文字的形式包含一個網址,而同一份 PDF 也可以包含一個連結註解,將頁面上的某個區域變成可點擊的熱點。只有註解才能讓網址成為真正的連結。PDF Link Extractor 是透過 PDF.js 的頁面註解 API 從 PDF.js 的註解資料運作(請參閱 PDFPageProxy getAnnotations 參考文件),而非從文字掃描,這也是為什麼它回傳的結果與「在文字中尋找網址」的方法不同。
這種區別大幅減少了誤判。壓縮的 PDF 串流、字型字符名稱、中繼資料欄位,以及像「請參閱 https://example.com 取得背景說明」這類一般內文,對天真的文字搜尋來說看起來都像網址,但實際上並不可點擊。該工具會忽略它們。反面也值得了解:一個註解可以是隱形的、一個單詞大小的透明熱點、一個標題,甚至整頁大小,但仍然會出現在報表中,因為 PDF.js 會將其作為連結物件公開,不論其視覺範圍大小。
在本機取得 Google Drive PDF 中的所有連結
- 在瀏覽器中開啟 Google Drive 並找到該 PDF。在檔案上按右鍵並選擇 下載。Drive 可能會警告該檔案無法掃描病毒;請確認將 PDF 儲存到您能控制的資料夾(Downloads 或 Desktop 都很適合),以便下一步能在本機讀取。
- 在同一瀏覽器中開啟 PDF Link Extractor。頁面上的任何內容都不會接觸您的檔案,直到您採取動作,因為 PDF.js 及其 worker 只在按下按鈕時才會載入。
- 點擊檔案選擇器並選取下載的 PDF。該工具一次接受一個檔案,最高 25 MiB 與 40 頁。加密、格式錯誤或超過限制的文件會顯示明確的錯誤,而不會產生部分報表。
- 點擊 Extract Links。該工具會逐頁遍歷文件、擷取支援的連結註解,並依頁面順序分組結果、保留註解編號,包括支援的外部網址以及具名或明確的內部目標位置。
- 檢閱非作用中的目標清單。每一列顯示頁碼、註解索引、連結類型,以及純文字形式的目標。JavaScript、data、file、blob 及其他不安全 scheme 會被過濾掉,而不是顯示為可點擊。
- 將報表複製到剪貼簿,或將其下載為 UTF-8 TXT 檔或對公式安全的 CSV。CSV 會跳脫引號與換行,並中和任何以試算表公式前綴(=、+、-、@)開頭的值,這樣擷取出的目標在之後開啟報表時就不會變成公式。
報表包含什麼、略過什麼
擷取工具刻意採取保守做法。它只接受一組狹窄且實用的 scheme,並拒絕其他所有項目,這樣您下載的檔案只包含值得人工檢視的目標。內部 PDF 目標位置(指向同一份文件中另一頁的具名目標與明確目標陣列)也會被擷取並標示為內部目標。它們不一定有網址,而且該工具並不保證能將每一個解析為最終頁碼,因為不同 PDF 之間的目標結構、頁面參照與檢視器行為可能有所不同。
| 目標類別 | 範例 | 報表中的行為 |
|---|---|---|
| 接受的外部 scheme | https://example.com/page, http://archive.org/item, mailto:[email protected], tel:+15551234567 | 以非作用中文字形式包含,並附頁碼與註解編號 |
| 內部 PDF 目標位置 | 同一檔案內的具名目標或明確目標陣列 | 以內部目標形式包含,並附有有限且可讀的表示方式 |
| 遭拒的 scheme | javascript:, data:, file:, blob: | 完全略過,並在略過摘要中計數 |
| 格式錯誤或含控制字元的輸入 | 含有 tab、換行或其他控制位元組的目標 | 由不區分大小寫的 scheme 檢查拒絕,不予顯示 |
| 看起來像網址的可見文字 | 段落中的「請造訪 https://example.com」 | 不是連結註解,因此不予包含 |
同一頁的完全重複項目會被移除,這樣一個具有兩個重疊註解矩形的單一熱點就不會產生兩個相同的列。同一個連結出現在不同頁面時,會在兩個位置都保留,因為連結出現的頁面對於稽核與遷移檢查來說是有用的證據。報表頂部的摘要列包含檢查過的註解數、接受的連結、重複項目,以及略過的不安全或不支援目標。
點擊任何連結前的安全注意事項
報表刻意設計為非作用中。該工具以純文字形式讀取註解目標,絕不會擷取、開啟、驗證、檢查信譽,也不保證任何目標位置的安全性。請將該檔案視為一份指標清單,而非一份安全網址清單。以 https:// 開頭的目標仍可能導向釣魚頁面、惡意程式代管,或早已易主的網域。
CSV 匯出會額外獲得一層保護,以處理特定風險:以 =、+、- 或 @ 開頭的目標字串,在 Excel、LibreOffice 或 Google Sheets 中開啟時,可能會被解譯為試算表公式。該工具會在序列化前先中和這些值,並使用標準 CSV 規則跳脫引號與內嵌的換行。即使經過中和,您仍應將所有衍生自文件的文字視為不受信任的資料,未經檢視絕不要將原始目標貼到 shell 提示字元或瀏覽器網址列中。對重要目標位置進行獨立驗證是工作流程的一部分,而非可選的額外步驟。
報表的實務用途
一旦取得一份乾淨的目標清單,許多工作會變得更輕鬆。遷移稽核是最常見的用途:當您把一堆 PDF 從一個平台搬到另一個平台時,您會希望記錄下讀者應該能前往的每一個外部網址,才能檢查新平台是否完整保留了它們。文件品保是另一項用途,審閱者會比對預定目標清單與實際出貨的內容。從冗長報告中收集引用、為合規審查製作連結清單,以及在發佈 PDF 前快速做一次健全性檢查,全都是想要取得這份清單的理由。
如果您的檔案超過 40 頁或 25 MiB 的上限,擷取工具會事先告知您,而不會產生部分且誤導的結果。對於非常大的文件,將 PDF 分割成較小的部分,並逐一通過擷取工具處理,即可獲得完整的涵蓋範圍。Drive 上的原始 PDF 不會被修改,因此 Drive 仍保有紀錄來源,而本機複本則與報表一起保留在您的裝置上。擷取流程也設計為會自行清理:取代工作會取消先前的工作,而 PDF 頁面、載入工作與暫時性的下載網址會在您離開時釋放。
延伸閱讀:如何從 LinkedIn 個人檔案 PDF 擷取支援的連結。
延伸閱讀:擷取 PDF 連結說明:工具實際讀取哪些內容。