壓縮總覽

總覽

HotPDF 會依據正在產生新的 PDF 內容,或是從外部檔案讀取既有 streams 與 images,使用不同的壓縮與解壓縮路徑

主要壓縮路徑

  • FlateDecode: 透過 THotPDF.Compression 用於產生的 PDF streams,並由 zlib-ng 的 zlib 相容模式支援;可用時會使用 64-bit runtime SIMD dispatch
  • CompressionLevel: THotPDF.CompressionLevel 為增強 Flate 路徑選擇 clNone、clFastest、clDefault 或 clMaximum
  • LZWDecode: 透過 HPDFLZW.pas 支援舊版 PDF 與 TIFF 風格資料
  • DCT/JPEG: 用於 HotPDF 影像支援處理的標準 JPEG 影像工作流程,並由含 NASM SIMD 加速物件的 libjpeg-turbo 3.1.90 支援
  • JBIG2 and JPEG2000: 可用於來源格式本身已使用這些 codecs 的專門影像工作流程

PDF 1.5+ 結構層面的體積縮減

對於 PDF 1.5+ 輸出,HotPDF 可以在 FlateDecode 壓縮 streams 之上再疊加兩個額外的結構壓縮路徑。兩者皆為選用,且自然成對使用:

  • UseXRefStream: 把文字形式的 xref ... trailer 交叉參照表換成壓縮的 /Type /XRef 串流(ISO 32000-1 7.5.8)。大型文件的 xref 開銷可縮到原本的 1/4 到 1/10
  • UseObjectStreams: 將小型 indirect dictionaries(多頁檔案、註解、AcroForm widgets、structure-tree elements、Optional Content layers)封裝到 /Type /ObjStm container streams (ISO 32000-1 7.5.7),並透過 type-2 xref entries 參照。也需要啟用 UseXRefStream。兩個開關合併使用時,一份 30 頁純圖形 smoke 檔案會從 14502 bytes 縮小到 8488 bytes(-41.5%)
  • 複製時解壓縮: DecompressForCopy 與 OriginallyCompressed 描述已載入文件的複製路徑如何實體化壓縮的來源串流

相關單元

  • HPDFZLib.pas:FlateDecode 與支援 predictor 的 inflate 輔助
  • HPDFLZW.pas:LZW 解壓縮
  • HPDFJBIG2.pas、HPDFJBIG2Codec.pas 與 HPDFJBIG2Enc.pas:JBIG2 編碼與解碼
  • HPDFJpeg2000.pas 與 HPDFOpenJpeg.pas:JPEG2000 相關工作流程

請參閱