PDF 轉文字(PDF to text)指的是讀取 PDF 文件內部可選取的文字圖層,並逐頁重新組合成一份 UTF-8 純文字檔案,方便您複製、搜尋,或交給其他編輯器使用。基於瀏覽器的 PDF 轉文字轉換器(PDF to Text Converter)會把檔案交給 PDF.js,依文件順序要求它提供每一頁上所有帶有邊界的文字項目,遵循任何明確的行尾標記,並在頁與頁之間加上清楚的分隔符號,將所有結果合併成單一 TXT 檔。整個過程完全在您的裝置上執行:解析、項目蒐集、預覽、複製和下載都在同一個瀏覽器分頁中運行,原始 PDF 絕不會被修改,也絕不會上傳到任何遠端服務。對於使用文書處理器、排版應用程式或組版工具所建立的數位 PDF,這種做法通常能回傳乾淨、實用的文字。對於僅含影像的紙本掃描頁面,則幾乎回傳不到任何內容,因為根本沒有可讀取的文字圖層。

pdf to text explained
PDF 轉文字完整說明:本地端萃取如何運作

「PDF 轉文字」真正的含義

這個詞聽起來很簡單,但它描述的是一項特定的技術操作,與「轉換文件」或「執行 OCR」並不相同。「轉換」通常意指更改格式——例如把 Word 檔轉成 PDF,或把 PDF 轉成 Word 檔。「OCR」則意指從像素影像中辨識字形,並推測出原本根本沒有以文字形式儲存的字元。這裡所說的 PDF 轉文字,僅代表一件事:讀取檔案中已經存在的文字物件,並依 PDF.js 回報的順序,將它們以純字元寫出。

數位方式建立的 PDF,通常會在內容串流(content stream)中儲存字元、字型參考、頁面上的位置,以及用於顯示文字的指令。PDF.js 可以把這些指令呈現為一串帶有邊界的文字項目,每個項目都包含字串、座標、字型資訊,以及一個用來標示該項目是否結束一行的旗標。轉換器會依序消化這些項目、以保守的空格將它們連接起來,再把結果寫入單一文字檔。輸出內容就是純粹的 UTF-8 文字;它不是 HTML、不是 Markdown,也不是重新排版的文件。轉換器不會執行內嵌指令稿、不會追蹤連結、不會擷取外部資源,也不會把結果解讀為純文字以外的任何東西。

數位 PDF 如何儲存文字

想理解為何有些萃取結果看起來很乾淨、有些卻亂七八糟,必須先從 PDF 實際描述內容的方式談起。與 Word 文件或 HTML 頁面不同,PDF 並不會以段落形式儲存段落。它儲存的是位於頁面座標上的字元。像 PDF.js 這樣的 PDF 讀取器會逐步走訪內容串流,依照寫入順序取出每一條文字顯示指令,再透過在正確位置繪製字形的方式,重建出頁面的樣貌。

正因如此,PDF 的閱讀順序完全取決於當初產生檔案的軟體所選擇的寫入順序。一封簡單的單欄信件會依照人類預期的順序由上至下讀取。但多欄文章、內文旁邊的側邊欄、以逐列方式填入儲存格的表格,或是標題後接註腳的情況,都可能以不符合視覺閱讀順序的方式交錯排列項目。頁首和頁尾通常每頁只寫入一次,因此相同的字串會在輸出中每個頁面分隔處重複出現。轉換器會遵循 PDF.js 提供的項目順序,並在相鄰項目之間插入保守的空格;它不會嘗試重建欄位、語意標題或表格儲存格。

如果 PDF 是透過掃描紙本頁面產生的,則上述一切都不適用。這種 PDF 內含的只是一張(或多張)與頁面同尺寸的影像,幾乎不含任何文字資料。PDF.js 對每一頁回報的文字項目數量會是零或近乎零,轉換器也會忠實地產生空白或近乎空白的結果。這不是錯誤,而是只讀取文字圖層的工具該有的正確行為。

如何在瀏覽器中本地端萃取 PDF 文字

PDF 轉文字轉換器(PDF to Text Converter)可以接收單一 PDF 檔,並在您的瀏覽器中回傳一份 UTF-8 TXT 檔。整個工作流程只需三個步驟。

  1. 從您的裝置中選擇一份不為空、大小不超過 25 MiB 的 PDF 檔。若想要取得有意義的文字,檔案不能是純影像;沒有文字圖層的掃描檔需要另外的 OCR 工作流程。
  2. 點選「Convert to Text」(轉換為文字)。此時工具才會載入 PDF.js 及其共用 worker,接著逐頁走訪文件,依頁面順序讀取帶有邊界的文字項目,並遵循任何明確的行尾標記。
  3. 檢視預覽中顯示的頁數與字元數,然後複製組裝好的文字,或使用由原始 PDF 衍生的固定檔名下載 UTF-8 TXT 檔。

更換輸入檔會清除先前的輸出,因此您看到的計數永遠對應您剛剛轉換的那份檔案。如果檔案超出任何限制——25 MiB、40 頁、每頁文字項目預算、總文字項目預算、單一項目長度,或總輸出字元預算——工具會回傳錯誤訊息,而非一份看似完整但其實不完整的結果。

PDF 沒有回傳內容時:掃描檔與 OCR

判斷一份 PDF 能否提供文字的最快方法,就是在任何一般的檢視器中開啟它,並嘗試用游標選取一段句子。如果游標能夠逐字標示出個別詞彙,就表示這份檔案含有文字圖層,轉換器能夠讀取。如果游標會把整個頁面當成一個影像來拖曳,則代表這份檔案是掃描檔,轉換器不會替它捏造一份文字稿。

這個區別之所以重要,是因為 OCR 是一項本質上完全不同的操作。OCR 會檢查像素資料、執行形狀辨識,並推測字元。PDF 文字萃取則是讀取 PDF 建立時就已經以字元形式儲存的指令。PDF 轉文字轉換器依設計只執行後者。如果您手上的是一份掃描的合約、一個舊書章節,或是一張拍下來的發票,您必須先執行 OCR 工作流程;只有在那之後,產出的文字才能被重新使用、複製或下載為 TXT 檔。

轉換器對每份檔案強制施加的限制

轉換器會套用數項嚴格的上限,以保持瀏覽器分頁的響應性,並避免產生靜默的不完整結果。

限制條件上限值超出時的處理方式
檔案大小25 MiB在開始解析前拒絕轉換
頁數40 頁在開始解析前拒絕轉換
每頁文字項目數有上限頁面被回報為超出預算,轉換失敗
整份檔案的總文字項目數有上限轉換失敗並顯示明確訊息
單一文字項目的長度有上限該項目會被拒絕,轉換失敗
總輸出字元數有上限在寫入任何不完整檔案前轉換失敗

加密的、格式錯誤的、不受支援的或損壞的檔案同樣會處理失敗。此工具不會繞過密碼、不會修復 PDF、不會驗證數位簽章,也不會聲稱所萃取的內容是準確或安全的。任何被這些限制觸及的情況,都會被視為失敗,而非被截斷的成功。

閱讀順序、欄位與其他排版怪癖

即使面對的是一份完美的數位 PDF,您能取回的文字品質,仍然取決於 PDF.js 被要求走訪的順序。簡單的信件、扁平的單欄報告,或具有正常內文的手稿,輸出結果通常很乾淨。但多欄文件、內文旁的註解框、表格、可填寫的表單欄位、與重複頁尾配對的頁首,或是一個字形一個字形繪製出來的文字,都可能產生標題出現在段落中間、側邊欄在所伴隨的內文之前開始,或相同頁尾字串在每個頁面分隔處底部重複出現的結果。

轉換器不會試圖掩飾這些怪癖。它會保留 PDF.js 提供的項目順序、遵循明確的行尾標記,並在相鄰項目之間插入保守的空格,避免文字黏在一起。合併輸出中每個頁面都會有清楚的分隔符號,因此某一頁的頁尾與下一頁的標題不會悄悄合併;空白頁也會保留標示,讓報告中的頁數能與來源文件保持一致。重複的頁首、隱藏文字、連字(ligature)正規化,以及無障礙順序,都可能依 PDF 本身的結構而出現,這也是為什麼在引用或重新發布文字前,值得快速與原始檔案進行核對。

何時該使用轉換器(又該在哪些情況下避免使用)

當您想引用一段可及性的文字、想從 PDF 建立一份粗略的可搜尋草稿、想檢查檔案是否真的含有可用的文字圖層,或想把簡單的頁面文字移轉到其他編輯器時,PDF 轉文字轉換器就是合適的選擇。本地端處理意味著文件永遠不會離開瀏覽器分頁,這對於合約、內部備忘錄,或任何您不會想上傳到不明伺服器的內容特別有用。如果您想要一份專門針對這項本地端處理保證的逐步說明,請參閱本地端萃取如何讓 PDF 留在瀏覽器中。

當視覺呈現的精確度比文字再利用更重要時,請跳過這個轉換器,改用其他工具。PDF 轉 JPG、PDF 轉 PNG 和 PDF 轉長條圖(PDF to Long Image)都能完整保留頁面的原始外觀;它們是歸檔、分享或列印視覺豐富版面時的正確選擇。當來源僅含影像時,專屬的 OCR 工作流程是唯一的途徑,因為轉換器不會從像素中捏造出一份文字稿。若想完成相反方向的完整萃取循環,可以使用 TXT 轉 PDF 工具將純文字再轉回排版整齊的 PDF。原始 PDF 永遠不會被轉換器修改,因此您隨時可以重新匯出、重新渲染,或交給其他工具處理。

相關閱讀:移除 PDF 密碼以轉為 JPG:一種本地端方法。