PDF 連結擷取工具會從本機的 PDF 檔案中讀取可點擊的連結標註,檔案大小上限為 25 MiB、頁數上限為 40 頁,並回傳一份依頁序排列的報告,內容涵蓋外部的 HTTP、HTTPS、mailto 與 tel 目標,以及內部目的地,可儲存為中性的 TXT 或已將公式風險排除的 CSV 檔案,讓該檔案能與來源文件一起乾淨地列印。列印前的準備工作通常不只是把檔案送到印表機:它代表你必須確切知道這份 PDF 會把讀者導向哪些位置、擁有一份可以隨紙本一起裝訂的書面參考資料,並確認連結清單中的內容在文件從可點擊的物件轉變為油墨印刷後,重新發布時不會有任何不安全之處。這個工具透過三個步驟產生該紀錄,完全在瀏覽器中執行,並讓 PDF 本身保持位元級的完整不變,讓你仍可從原始檔案進行列印。

extract links from pdf for printing
從 PDF 中擷取連結以供列印準備使用

從 PDF 產生的可列印連結報告實際上包含什麼

列印準備的工作流程包含三個可預期的部分:一份保存在磁碟上的來源 PDF、一份你可以印成紙本的報告檔案,以及在將工作送交印表機之前執行的驗證步驟。PDF 連結擷取工具負責處理前兩項。你在瀏覽器中開啟此工具,選擇一個不超過 25 MiB 且不超過 40 頁的本機 PDF,然後點擊「擷取連結」。此工具會依照頁序讀取 PDF.js 引擎為每個頁面所回報的可點擊連結標註,並保留其中嚴格的子集合:使用 HTTP、HTTPS、mailto 或 tel 的外部目標,以及由文件本身定義的內部目的地。其他所有內容都不會出現在輸出中,因此印出的參考清單不需要再重新篩檢那些在紙本上根本毫無意義的 javascript:、data:、file: 或 blob: 項目。

擷取完成時,報告會以中性的文字形式存放在瀏覽器中。你可以將它複製到剪貼簿、下載為 UTF-8 的 TXT 檔案,或儲存為已將公式風險排除的 CSV。此時原始的 PDF 在你的電腦上仍然原封不動,工具並未擷取或驗證任何連結目標,而你儲存的文件就是你在螢幕上審閱過的同一份中性報告,準備好被釘在 PDF 背面作為紙本參考資料。

報告頂端的一小段固定摘要會告訴負責列印的人此次執行情況:已檢視的標註數量、已接受的連結數量、已移除的同一頁完全重複項目,以及已略過的不安全或不支援的目標。這些數字在紙本頁面上本身是很有用的證據,因為它們能讓執行列印工作的人在投入任何紙張之前,先確認來源 PDF 確實產出了預期數量的連結目標。

為何列印用的參考清單需要具備標註感知能力的讀取方式

「從 PDF 中擷取連結以供列印」的粗淺做法是複製檔案中的所有文字、以類似 URL 的正規表示式加以執行,然後把結果當成報告。在實際的文件中,這種做法會嚴重高估數量。它會從壓縮的串流、字型中繼資料、參考資料、頁首、頁尾,以及包含「詳見 www.example.com」之類字串的普通句子中拉出 URL。印出的結果會充滿偽陽性,品質管制步驟也會變成另一項獨立工程,專門用來剔除那些在來源 PDF 中從頭到尾根本不是可點擊項目的 URL。

PDF 規格將可點擊的連結儲存為各個頁面上的連結標註。此工具透過底層的 PDF.js 標註資料直接讀取這些標註,而不是掃描原始位元組來尋找看起來像 URL 的文字。這也是為什麼某個印出來的 URL 可能會從你的報告中遺失,即使它確實出現在頁面上:因為那個可見的字串並非可點擊的連結標註,而只是印出的文字。相同的區別對內部目標也很重要:當 PDF 連結到「請參閱第 12 頁的附錄 B」時,該連結是一個帶有結構化目標的內部目的地。報告會將其呈現為內部項目,而不是將其改寫為 URL,因此印出的參考資料保留了原本的導覽意圖,而不是憑空捏造一個從未存在的網址。

第二個考量是印出檔案的安全性。一份包含 javascript:、data: 與 file: 協定的報告,同時也是一份你不會想造訪的位置的可列印清單。將外部協定限制為 HTTP、HTTPS、mailto 與 tel,並拒絕控制字元與大小寫變化的花招,可讓可列印的參考資料聚焦於與頁面文字對應的目的地。Mozilla PDF.js 專案透過其 PDFPageProxy getAnnotations API 公開了這些標註,這正是此工具用來依文件順序讀取每個頁面的公開且有文件紀錄的介面。

如何從 PDF 中擷取連結以供列印

  1. 在桌面瀏覽器中開啟 PDF 連結擷取工具。工具頁面本身載入為靜態標記;PDF.js 及其共用 worker 只會在你按下按鈕後才會擷取,因此初始的檔案 bundle 維持輕量,頁面在任何文件資料被讀取之前就已準備就緒。
  2. 點擊檔案選擇器,從你的本機磁碟選擇單一 PDF。該檔案必須小於 25 MiB,且不超過 40 頁;經過加密、有密碼鎖定、損壞或其他不受支援的檔案會以明顯的錯誤訊息加以拒絕,因此列印工作絕對不會在半成品的報告上啟動。
  3. 按下「擷取連結」。此工具會依文件順序向 PDF.js 索取每個頁面的標註,然後將該集合篩選為支援的外部連結標註(HTTP、HTTPS、mailto、tel),以及由同一批標註紀錄所公開的內部目的地。
  4. 在螢幕上審閱渲染後的報告。頂端的摘要區塊會告訴你檢視了多少個標註、接受了多少個、從同一頁移除了多少個完全重複的項目,以及略過了多少個不安全或不支援的目標。每一個剩餘的列會顯示頁碼、標註索引、連結類型,以及中性的目標字串。
  5. 決定列印格式。選擇「複製」可將同一份中性報告放入剪貼簿;下載 TXT 版本以進行純文字列印;或下載 CSV 版本以進行試算表或表格版面配置。以試算表公式前置字元開頭的儲存格會在序列化前先加以中和,因此在 Excel、LibreOffice 或 Google 試算表中開啟 CSV 並不會執行來自該檔案的任何程式碼。
  6. 將產生的報告與原始 PDF 一起列印,或將其交給負責該次列印品質管制的審閱者。來源文件在你的磁碟上保持不變;沒有任何東西被上傳,因此你打算列印的 PDF 在位元層級上與你當初開始時完全相同。

可列印報告中包含哪些內容

報告包含一個小型的固定摘要標頭,接著是每個被接受連結一列。標頭列出文件計數,讓負責列印的人可以確認此次執行與來源 PDF 相符:已檢視的標註、已接受的連結、已移除的重複項目,以及已略過的不安全或不支援目標。每一列會保留頁面順序與標註順序,因此在印出的結果中,第 4 頁的連結 7 會排在第 5 頁的連結 1 之前。CSV 匯出結構化為四個欄位:頁碼、標註編號、類型與目標。TXT 匯出則是使用穩定頁面標籤的 UTF-8 純文字。

下表說明哪些外部連結標註目標在可列印的報告中會被接受或拒絕:

目標協定報告中的狀態決策原因
http://接受標準的網頁 URL,納入印出的參考清單
https://接受標準的網頁 URL,納入印出的參考清單
mailto:接受電子郵件目的地,從紙本輸入時可清楚對應
tel:接受電話目的地,從紙本撥號時可清楚對應
javascript:拒絕並非可列印的有效目的地;於此次執行中排除
data:拒絕內嵌承載資料;永遠不會對應到頁面上的文字
file: 與 blob:拒絕本機或記憶體中的資源,並非有用的列印參考
含有控制字元的目標拒絕不區分大小寫的協定檢查會拒絕控制位元組

內部目的地的行為有所不同。許多內部目的地根本沒有網頁 URL:它們是具名目的地或明確的目的地陣列,指向同一份文件中的另一個位置。此工具會將其標示為內部目標,並序列化為一個有界且可讀的呈現形式,而不是斷言最終頁碼,因為目的地結構與檢視器行為會因文件而異。如果你印出的參考資料需要為每個內部跳轉提供精確的頁碼,請將這些項目視為起點,並在發布或散布印出的副本之前,於檢視器中對照來源 PDF 進行驗證。

為列印的參考資料選擇 TXT 或 CSV

兩種格式顯示的是同一份中性資料。差異在於你打算如何閱讀或安排列印輸出。TXT 匯出是純 UTF-8 文字,包含摘要區塊,接著使用穩定的頁面標籤,因此可直接放入文書處理器、電子郵件草稿,或基本的記事本列印。CSV 匯出則結構化為頁碼、標註編號、類型與目標等標頭欄位,這正是當你打算在列印前進行排序、篩選或為列加上註解時所需要的——例如,當你只需要第 10 頁以上的 http:// 與 https:// 目標時。

面向TXT 匯出CSV 匯出
編碼UTF-8 純文字標準 CSV,欄位加上引號,並依 CSV 規則跳脫換行
標頭格式摘要區塊,接著使用穩定頁面標籤的列頁碼、標註編號、類型、目標作為獨立欄位
試算表安全性純文字,完全沒有公式風險會以公式開頭的值已加以中和;引號與換行依 CSV 規則跳脫
最適合用於貼入文件、電子郵件或基本閱讀器在送交印表機前對列進行排序、篩選或標示重點
典型的列印工作流程在任何文字應用程式中複製或開啟,然後直接列印在試算表中開啟、刪減列,然後匯出或列印檢視

對大多數列印工作而言,TXT 匯出是較簡便的選擇:開啟檔案、列印,然後把產生的頁面附加到來源 PDF。在品管工作流程中,若你想在簽核列印工作前為每一列標示為已核對,將 CSV 匯入試算表即可在不犧牲中性、防公式預設行為的前提下,提供這種疊加層。

Link extraction is rarely the only step before a PDF goes to the printer. A few related local tasks come up often enough that it helps to plan them up front:

  • If the document is over 40 pages or over 25 MiB, the tool will refuse it. Splitting the source into smaller PDFs first lets you audit links in chunks. The same browser-only model applies to how to split a PDF locally, which keeps oversized print jobs under the limit without uploading the document.
  • If the printed reference list should only cover the pages you actually plan to print, extracting pages for printing without wasting paper keeps both the on-paper PDF and the link report scoped to the same subset, so the page numbers in the report line up with the final printout.
  • If the print job needs new page numbers, footers, or QA marks stamped onto the source PDF before extraction, applying those first keeps the page numbers in the link report aligned with what the printer produces.

All of these run on the same local-only model as the link extractor: the PDF stays on your disk, the report is built in your browser, and the print job leaves your machine with nothing more than the file you chose to print. That shared property matters when the document contains links to restricted or unreleased material, because no third-party server sees the link targets at any point in the pipeline. The print job only ever sees the original PDF on your disk and the report file you asked the tool to produce.

Related reading: Extract Links From PDF Free, No Sign Up: A Local Method.