Compression Overview

概要

HotPDF は、新しい PDF コンテンツを生成するのか、外部ファイルから既存のストリームや画像を読み込むのかに応じて、複数の圧縮 / 展開パスを使い分けます

主な圧縮パス

  • FlateDecode: 生成する PDF ストリームには THotPDF.Compression 経由で使われ、zlib 互換モードの zlib-ng がバックエンドです。利用可能な環境では 64 ビットランタイム SIMD ディスパッチが働きます。ロード済みストリームの高圧縮率ワークフローでは、予算付きの Zopfli パスを追加でき、これは zlib の最良結果より小さくなる場合にだけ選ばれます
  • CompressionLevel: THotPDF.CompressionLevel が拡張 Flate パスに対して clNone、clFastest、clDefault、clMaximum を選択します
  • LZWDecode: レガシーな PDF や TIFF 系データに対して HPDFLZW.pas 経由でサポートされます
  • DCT/JPEG: HotPDF の画像サポートが扱う標準 JPEG ワークフローに使われ、NASM SIMD アクセラレーションオブジェクト付きの libjpeg-turbo 3.1.90 がバックエンドです
  • JBIG2 と JPEG2000: ソースフォーマットが既にそれらのコーデックを使っている特殊な画像ワークフローで利用できます

PDF 1.5+ での構造的なサイズ削減

PDF 1.5+ の出力では、FlateDecode 圧縮ストリームの上に、さらに 2 つの構造圧縮パスを重ねられます。どちらもオプトインで、自然に組み合わせられます:

  • UseXRefStream: テキストの xref ... trailer クロスリファレンステーブルを、圧縮された /Type /XRef ストリーム(ISO 32000-1 7.5.8)に置き換えます。大きなドキュメントで xref のオーバーヘッドを 4〜10 分の 1 に削減します
  • UseObjectStreams: 小さな間接辞書(複数ページドキュメント、注釈、AcroForm ウィジェット、構造ツリー要素、Optional Content レイヤー)を、type-2 xref エントリで参照される /Type /ObjStm コンテナストリーム(ISO 32000-1 7.5.7)に詰め込みます。UseXRefStream も同時に有効である必要があります。グラフィックスのみの 30 ページのスモークテストでは、2 つのトグルの組み合わせで 14502 バイトから 8488 バイト(-41.5%)へ縮みます
  • コピー時の展開: DecompressForCopy と OriginallyCompressed が、ロード済みドキュメントのコピーパスが圧縮ソースストリームを実体化する方法を記述します

関連ユニット

  • HPDFZLib.pas — FlateDecode とプレディクター対応 inflate ヘルパー
  • HPDFLZW.pas — LZW 展開
  • HPDFJBIG2.pas、HPDFJBIG2Codec.pas、HPDFJBIG2Enc.pas — JBIG2 エンコードとデコード
  • HPDFJpeg2000.pas と HPDFOpenJpeg.pas — JPEG2000 関連ワークフロー

関連項目