PDF 裡面有什麼:物件、串流與交叉參照表
PDF 是編號物件、壓縮串流與位元組偏移 xref 組成的小型資料庫。Get Info 只做唯讀檢查,這張地圖壞掉時由 Repair 重建結構。

一份 PDF 不是把頁面平鋪出來的轉儲檔,而是一份由物件構成的小型資料庫:多數內容存成壓縮串流,再由交叉參照表(xref)標出位置,閱讀器才能直接跳到第 17 號物件,不必從頭掃到尾。這張地圖一壞,檢視器就說檔案損壞,即使頁面位元組還好好躺在磁碟上。
物件
頁面、字型、影像、中繼資料、文件目錄,凡是值得關心的東西都是帶編號的物件。頁面指向內容串流與資源,資源指向字型與 XObject,目錄指向頁面樹。合併、旋轉或蓋章這類工具做的事,大多是重寫這張關係圖,而不是重繪像素。
串流
串流是一種負載為位元組序列的物件,通常經過 Flate 壓縮:頁面內容運算子、內嵌字型檔、影像資料。這也是為什麼用文字編輯器打開 PDF,會看到 ASCII 記號與二進位區塊混在一起。把串流展開、但不改頁面外觀,是除錯時的常用手段;本站的 壓縮 則是用 qpdf 重新壓緊這些串流,它不會對影像降取樣,也不會子集化字型。
交叉參照表
典型檔案靠近末尾的地方有一段 xref 區段(較新的檔案則是 xref 串流),逐條列出每個物件號的位元組偏移,讓閱讀器直接 seek 過去。下載被截斷、合併出錯、儲存寫到一半,都會讓檔尾的 trailer 指向已經對不上的偏移:第一頁的像素或許還在,找到「第一頁」的那張地圖卻沒了。
所以結構修復和 OCR、解鎖是兩種不同的工作:修復是從仍然有效的殘餘重建內部結構,既不補畫缺失的頁面圖,也不猜密碼。
重寫前先檢視
取得 PDF 資訊 回傳一份 JSON 報告(頁數、中繼資料、字型、結構細節),不是修改過的 PDF。在壓縮、轉換或修復之前,想先弄清楚手上是什麼檔案,就該用它。
如果檢視器完全拒絕打開檔案,請試 修復 PDF,它會重建結構,包含交叉參照的復原。如果檔案打得開、只是掃描文字無法選取,那是 OCR 的問題,不是 xref 的問題。
簡短的決策順序
- 檔案打不開 → 先 修復。
- 檔案打得開,你需要事實(頁數、字型、加密線索)→ 用 取得資訊。
- 結構沒問題,你要更小的檔案或從掃描件取得可讀文字 → 體積用 壓縮,文字用 OCR 取 Markdown,不必再跑一次修復。
Get Info 與 Repair 都不需要帳號。同一批 op 走 HTTP 的用法,見 開發者。Repair 與品牌桌面「復原」產品有何不同,見 線上 PDF 修復與 Recovery Toolbox 搜尋。