壓縮移除的是冗餘,不是內容

PDF 會把頁面存成繪圖指令:帶有字型的文字串、以特定解析度儲存的影像、向量路徑,以及結構樹。壓縮工具可以移除三種冗餘——以高於實際顯示解析度儲存的影像、只用到部分字形卻完整內嵌的字型,以及編輯後已無任何物件參照的物件。

它做不到的是移除內容。如果每一頁都是 600 dpi 的掃描照片,要讓檔案變小的唯一方法就是捨棄像素,而這是品質取捨,不是最佳化。

檔案變大的三種情況

輸出比輸入還大,幾乎都是下列情況之一:

  • 檔案已經最佳化過。對一個字型已子集化、影像已降取樣過的檔案再跑一次,只會重新編碼;而用相近品質重新編碼 JPEG,只會增加大小,不會增加細節。
  • 輸入是存成 JPEG 的掃描檔,而壓縮工具把它轉成無損格式或重新封裝。無損格式顧名思義就是比較大。
  • 檔案在輸出時經過線性化、簽署或加密。物件串流、簽章字典和增量更新,各自都會加入與頁面無關的位元組。

該怎麼做才好

有用的問題不是「我要怎麼壓縮這個檔案」,而是「是什麼占用了空間」。在你動任何設定之前,可以先從兩件事縮小範圍:

  • 試著在頁面上選取文字。如果選得到,檔案就有文字層,占空間的是字型和影像,而不是頁面掃描。
  • 比較檔案大小和頁數。文字檔案通常每頁只有數十 KB;掃描檔每頁則是數百 KB 到幾 MB。
  • 如果是掃描檔,就降低解析度,並在內容允許時轉成灰階。MB 就是從這裡來的。
  • 如果每頁已經很小,就別動它。重新壓縮 300 KB 的文字 PDF,很少能降到 250 KB 以下,而且經常反而變大。

關於「壓縮到目標大小」的說明

有些工具提供目標大小——「把這個檔案變成 2 MB」。那是另一種操作:工具會降低影像解析度和品質,直到預估值符合為止,而且會一直調整到檔案符合大小,即使頁面變得難以閱讀。如果表單有嚴格的上傳上限,這招有用;如果你只是想要更小的檔案,固定品質設定是比較安全的選擇。