Formats2026-08-21約 1 分鐘閱讀

壓縮 PDF 時,實際上發生了什麼事

PDF123 壓縮以 qpdf 進行串流重壓縮與物件串流打包,不對影像降取樣,也不做有損 JPEG 重新編碼或字型子集化。線性化幾乎不改變檔案大小。

PDF123 · Updated 2026-09-19

兩份 PDF 在螢幕上看起來一模一樣,體積卻可能差上三個數量級:50 KB 對 50 MB。差距幾乎從不出在文字運算子。一份二十頁的合約,文字運算子通常只有幾十 KB,其餘全是影像取樣資料、整份嵌入的字型程式,以及串流與物件打包得有多鬆。

這帶出一個值得先講清楚的結果:「壓縮 PDF」不是一個動作,而是四個。它們縮小的對象不同、代價也不同;把它們當成同一件事,經驗就會自相矛盾:壓過了卻沒變小,或者變小了但畫面變糊。

qpdf 重壓串流與物件串流打包縮小 PDF 的示意圖,線性化是獨立的非體積步驟

檔案大小是從哪裡來的

多數「這份 PDF 為什麼這麼大」的案例,起點都是仍以拍攝尺寸嵌入的高解析度掃描件或照片。這個算術值得算一次:一頁 letter 尺寸、8.5 × 11 英吋、300 DPI 的彩色頁面約是 2550 × 3300 像素,每像素三個位元組的話,未壓縮大約就是 25 MB。二十頁這樣的內容,往往在任何人碰壓縮之前就已經來到 60 到 80 MB。

第二個來源是字型。PDF 可以把整套字型程式嵌進檔案,讓任何機器都描繪出一樣的文字;這筆成本是按字形表的大小計價,而不是按實際被讀到的文字量。這就是為什麼字型子集化是另一個獨立的體積槓桿。

第三個來源是打包本身。同樣的內容,可以用浪費的壓縮設定儲存,物件也可以散落在檔案各處、各自帶著一份管理開銷。這些都不改變任何一個像素或字形,而這正是串流重壓縮能著力的部分。

「壓縮」其實是四件不同的事

能動的體積槓桿有四個,作用在不同層次,代價幾乎不重疊。選錯槓桿,正是壓縮跑完卻像什麼都沒做的最常見原因。

槓桿 動到什麼 體積收益 代價
串流重壓縮與物件串流 內容串流的壓縮方式、物件的存放與打包 取決於原始檔有多鬆 頁面外觀不變
影像降取樣 像素數量,也就是解析度 大 解析度永久降低
有損影像重新編碼 點陣圖的位元組表示 大 畫質降低
字型子集化 嵌入的字形表 中 未使用的字形不再可編輯
線性化 物件的排列順序 幾乎為零 換來的是首頁載入時間

前四列常被籠統地叫成「壓縮」,但只有第一列不碰內容。它也是最容易被誤判收益的一列:一份體積主要來自原始影像取樣的掃描件,沒有多少冗餘可以移除;真要大砍,靠的是降取樣與有損重新編碼,代價是永久失去那份解析度與畫質。

PDF123 壓縮只做了四者之一

壓縮 PDF(POST /api/v1/misc/compress-pdf)只做第一列。它讓 qpdf 壓縮未壓縮的串流(--compress-streams=y)、對已用 Flate 壓縮過的串流再跑一遍(--recompress-flate),並把物件收進物件串流(--object-streams=generate)。

它不對影像降取樣、不把點陣圖重新編碼成更低的 JPEG 品質,也不子集化字型。頁面外觀應該維持一致,省下來的空間來自 Flate 重壓縮與物件串流打包。

失效條件也該講得一樣清楚。當檔案體積主要來自已經以 JPEG 壓縮過的影像資料時,Flate 沒有什麼可以再擠,因為那些影像位元組落在上述三個開關的作用範圍之外。這就是為什麼一包掃描件可能只小幾個百分點,而體積相近、以文字為主的 PDF 卻明顯縮得更多。

反方向的路徑是解壓縮 PDF,它把串流展開以供檢查(--qdf,物件串流停用),同樣不改變頁面外觀。

什麼時候該走別條路

你的需求 該走的路徑
外觀完全相同,只想移除打包開銷 壓縮
掃描件確實太大,且可接受畫質損失 降取樣或有損重新編碼,不是這裡的壓縮
還要能編輯,但下一個字打不出來 換匯出設定或來源檔,見字型子集化
想讓瀏覽器早一點看到第一頁 線性化處理的是首次繪製,不是體積
檔案根本打不開 修復,那是結構問題,不是體積問題

最後一列藏著一個陷阱:本站的線性化 PDF不是獨立實作,而是壓縮的別名。兩者指向同一個操作,正規 id 是 misc/compress-pdf,linearize-pdf 只是別名;入口網站對這個工具一律送出 linearize=true 與 optimizeLevel=1,伺服器兩個欄位都不讀,qpdf 也從不被傳入 --linearize。真正會讓檔案線性化的操作是保護,在它加密的時候。

所以,如果你要的是外觀不變、檔案更小,壓縮就是完整答案。如果你要的是有損影像縮小或字型子集化,這條路徑就是錯的槓桿。檔案會直接回傳,不需要帳號。想看清楚物件、串流與交叉參照表實際落在檔案哪裡,請接著讀PDF 裡面有什麼。

Open tool
Process in the browser — no watermark, files removed after the job.
Open tool