一份大型 PDF 可以在瀏覽器中完全渲染成 PNG,只要它落在五道嚴格門檻之內:25 MiB 檔案上限、40 頁上限、單頁任一邊 12,000 像素上限、單頁 40 megapixel 上限,以及所有預計頁面合計 100 megapixel 上限。任何超出限制的檔案會在編碼開始前就以可見的錯誤訊息拒絕處理,因為每一頁都是透過 PDF.js 點陣化到畫布上,再以 image/png 編碼於你當前的分頁 JavaScript 中,所以瀏覽器必須持有每一張完成後的點陣圖,直到你點擊下載。這正是讓「大型」成為浮動標準的原因:一份在 3× 縮放下的 5 MiB PDF,可能比一份在 1× 縮放下的 20 MiB PDF 佔用更多像素;這個工具是以像素和頁數來衡量大小,而非單看 megabyte。理解這項差異,正是產出一批乾淨 PNG 與一次卡住轉檔之間的分野。

多數轉換器在面對大型 PDF 時會因為以下三個原因之一而失靈:先上傳、在遠端伺服器以小記憶體上限解碼,或者在渲染前就緩衝整份文件。當工作在你正閱讀的這個分頁內執行時,這些限制都不存在。PDF 轉 PNG工具僅在轉檔開始時才載入 PDF.js 及其專用 worker,因此初始分頁套件維持輕量,且所有渲染位元組都停留在你當前的分頁中。

pdf to png large file
在不上傳的情況下將大型 PDF 轉為 PNG

大型 PDF 轉 PNG 的嚴格限制

這個工具中「大型」PDF 由五個數字定義,且在每個預計頁面通過預檢查之前,轉檔不會開始。這些限制之所以存在,是因為瀏覽器必須以點陣圖形式持有每一張完成的畫布,直到你點擊下載,而無邊界的像素緩衝是最快讓分頁當機的方式。

限制數值上限內容
輸入檔案大小25 MiB在任何渲染之前選定的 PDF
頁數40 頁工作將渲染的總頁數
頁面寬度或高度12,000 px任何單一預計頁面視口的任一邊
每頁像素40 megapixels任何單一頁面的寬 × 高
像素總和100 megapixels每個預計頁面像素面積的總和

100-megapixel 上限是最容易被低估的一項。它並非每檔限制,而是每次工作的限制;當總量超過上限時,預檢查會拒絕開始編碼,因此絕對不會有部分批次夾帶一張損毀的 PNG 流出。

為何縮放比檔案大小更為關鍵

US Letter 頁面為 612 × 792 PDF 點,也就是 1× 縮放下的畫布尺寸。把縮放加倍至 2× 並不會讓輸出檔案大小加倍,而是會變成四倍,因為像素面積是寬乘以高。從 2× 推到 3× 會再讓像素面積乘以 2.25×。在 1× 縮放下仍遊刃有餘的掃描文件,到了 3× 縮放時可能悄悄突破 40-megapixel 的每頁上限;而一份在 2× 縮放下適用的 30 頁文件,到了 3× 縮放時可能毫無預警地衝過 100-megapixel 總和上限。

這正是一份 4 MiB PDF 會失敗、一份 22 MiB PDF 卻能成功的原因:較小的檔案可能單純擁有較大的頁面,或被要求以更高的縮放渲染。在規劃大型工作時,請把縮放視為主要槓桿,而非檔案大小。

如何在本地將大型 PDF 轉成 PNG

  1. 在桌面瀏覽器中開啟 PDF 轉 PNG 工具,並從電腦中選擇 PDF。超過 25 MiB 的檔案、加密文件以及損毀檔案會在 worker 載入前就遭到拒絕。
  2. 設定渲染縮放,使每一頁同時落在 12,000 像素邊長上限與 40-megapixel 每頁上限之內。若你的文件接近 40 頁,也要讓總量低於 100 megapixels。
  3. 點擊 Convert to PNG。PDF.js worker 會在首次使用時下載,接著每個預計頁面都會被繪製到畫布上,並以 image/png 編碼。
  4. 檢查每張結果卡片上顯示的寬度與高度。這些就是你即將下載的 PNG 的精確像素尺寸。
  5. 逐頁下載。輸出檔名會去除既有的 .pdf 副檔名、替換常見桌面檔名中不安全的字元,並附加零填充的頁碼,使整套檔案依來源順序排列。

若有頁面在預檢查時被拒絕,工作會在編碼開始前停止,並以可見的錯誤訊息指出是哪一頁跨越了哪一項上限。請調整縮放,或將來源拆成較小的批次,再重新執行。選擇另一個檔案或更改縮放會清除先前的結果,使顯示的數字永遠不會與快取的影像不一致。

範例:40 頁 US Letter 在 3× 縮放下

US Letter 頁面在 3× 縮放下為 1,836 × 2,376 像素。

每頁像素面積 = 1,836 × 2,376 = 4,362,336 像素 ≈ 4.36 megapixels。

預計像素總和 = 40 × 4,362,336 = 174,493,440 像素 ≈ 174 megapixels。

100-megapixel 總和上限被超出大約 74 megapixels,因此預檢查會拒絕這項工作。將縮放降至 2× 會使頁面成為 1,224 × 1,584 = 1,938,816 像素 ≈ 1.94 megapixels 每頁,40 頁總計約 77.5 megapixels,舒適地落在上限之內。把縮放再砍半所降低的總量壓力超過一半,因為像素面積是隨縮放因子的平方而成長。

拉高縮放時的權衡

較高的縮放會產生較密集的點陣表示,這在放大檢視 PNG 中的細小文字或細線時很有幫助。它並不會憑空生出低解析度掃描中原本缺少的資訊,因為頁面是依所選解析度,從 PDF.js 對來源指令的詮釋繪製而成。字型遵循瀏覽器的渲染器,色彩遵循頁面,較高的縮放只是對同一張繪製頁面產出更多取樣。因為像素面積同時隨寬與高成長,記憶體與檔案大小都會迅速膨脹;在 1.5× 縮放下仍可執行的工作,在同一份文件的 3× 縮放下可能就會讓分頁卡住。

若目標是銳利的文字或精細的線條藝術,US Letter 頁面通常以 2× 縮放為最佳甜蜜點。針對簡報或縮圖,1× 縮放能讓合計像素維持得夠低,使較長的文件落在 100-megapixel 上限之內。選擇正確縮放的指南詳細介紹了其中的權衡。

何時 PNG 是大型檔案的正確選擇

PNG 採用無失真壓縮,能保留圖表、使用者介面擷圖、線條藝術,以及含有小文字頁面中的銳利邊緣,否則這些內容會出現 JPEG 假影。無失真輸出並非來源位元組的完美複製;頁面仍會以所選縮放點陣化,PNG 只代表可見的結果。可編輯文字、即時連結、表單欄位、向量幾何、圖層,以及儲存在 PDF 內部影像的原始壓縮,都不會在輸出中保留。若這些內容需要存活於來回轉換之間,則應保留來源 PDF 這份產物。轉成 PNG 是一趟單向旅程。

若你想要較小的檔案且頁面主要是照片,請改選 JPG。若希望每頁堆疊成一張高聳的 PNG,而非多個獨立檔案,請改用長圖工具。這些操作都不會修改來源 PDF,因此無論你選擇哪條路徑,原始檔案都會保持完整。

工作期間與之後的記憶體變化

每一項渲染任務、頁面資源、畫布與暫存下載網址,都會在取消、替換與卸載時被釋放。啟動新工作會立即取消前一次,因此分頁不會在多次嘗試之間累積緩衝的點陣圖。加密 PDF、格式錯誤的交叉參考表、不支援的內容,以及超出任何安全上限的文件,會回傳可見的錯誤,而非損毀的檔案。

這個工具不會繞過密碼、不會修復損毀、不會驗證簽章,也不會移除惡意程式,因此請保留原始檔案,並在依賴輸出之前檢查重要內容。若工作感覺吃重,降低縮放或將 PDF 拆成較小的頁數範圍,是最快回到限制內的途徑。

相關閱讀:如何一次將多個 PNG 檔案轉為 PDF。