為什麼字型子集化會弄壞編輯,卻不弄壞閱讀
字型子集化只保留 PDF 已用到的字形,檔案因此變小;閱讀與列印照常,插入新字元卻會失敗。PDF123 壓縮本身不做子集化,也不會把字形補回來。

一份 PDF 可以看起來完美,卻拒絕你輸入的下一個字元。這通常不是檢視器壞了,而是字型子集化:檔案只內嵌了寫入當時用到的字形,而編輯要求的是一個從未被打包進去的字形。
子集是什麼
TrueType 與 OpenType 字型可以包含數萬個字形,一份十頁的備忘錄可能只用到幾百個。子集化會重寫內嵌字型,把沒用到的字形丟掉。檔案變小,既有文字在螢幕與列印上的呈現完全不變,因為已經出現在文件裡的每個字元都還在。
所以閱讀與列印都會成功。失敗模式要到之後才出現:有人用編輯器打開這份 PDF,打上一個帶重音的字母或罕見標點,缺失的字形就被替換、變成空白或被拒絕。複製貼上既有文字通常還是可用,撞上字形表破洞的是新字元的插入。
子集化不等於把字型拿掉
字型物件仍然內嵌在檔案裡,離開的是字形表中沒用到的部分。這不同於:
- 依賴閱讀者機器上安裝的系統字型(跨作業系統有替換風險)
- 把文字轉成外框或影像(會讓選取與搜尋失效)
- 加密檔案(保護);加密不會子集化字形
許多辦公軟體的匯出器與列印成 PDF 的驅動程式,在內嵌字型時預設就會子集化。損害發生在匯出那一刻,不是後來某個檢視器打開檔案的時候。用另一個 PDF 工具重新儲存,可能再子集化一次,也可能不會,但它不會神奇地恢復從未寫入的字形。
PDF123 壓縮實際做什麼
壓縮 PDF(POST /api/v1/misc/compress-pdf)請 qpdf 壓縮串流(--compress-streams=y)、重壓 flate 資料並產生物件串流。它不會子集化字型,也不聲稱會對影像降取樣。如果檔案的串流本來就夠緊,下載後可能幾乎不變。如果檔案已經含有子集字型,壓縮會把它們原樣留下,不會擴回完整字面。
PDF 管線裡幾個體積槓桿如何互動(影像、串流、結構),見 壓縮 PDF 時實際發生什麼。把那篇當成背景讀物,不要讀成「本站的壓縮按鈕會子集化字型」這種主張。
OCR 與 Markdown 轉換同樣不會恢復 PDF 裡缺失的字形:OCR 回傳 Markdown 文字,PDF 轉 Markdown 只抽取文字層已經有的內容。
實務上的編輯與閱讀
| 動作 | 子集化之後的典型結果 |
|---|---|
| 打開、捲動、列印、選取既有文字 | 可行;被引用的字形都還在 |
| 插入一個原件從未用過的字元 | 可能失敗,或被替換 |
| 期待 PDF 裡是一份完整可編輯的字型 | 脆弱;子集已經丟掉了沒用到的字形 |
| 在 PDF123 上執行壓縮 | 串流可能變小;字形清單不變 |
如果你需要用完整字元集繼續編輯,那就代表子集化是錯誤的匯出設定。請改用可編輯的來源(Word,或用 Markdown 轉 PDF 重新渲染一份 Markdown),或者一份仍內嵌完整字面的 PDF。PDF123 的壓縮不會把那些字形放回去。
排查「我在這份 PDF 裡打不出 é」時,先確認原始匯出是否做了子集化,再怪檢視器或 修復。修復重建的是結構,不會擴充字形表。經 Markdown 往返可以得到一份新 PDF,內嵌的是 WeasyPrint 為該次渲染所用的字型;這對重新產生文件有用,但不是在舊的子集字面上做外科手術式的恢復。