LZW圧縮サポート

概要

HotPDFでは、PDFストリーム向けの包括的なLZW (Lempel-Ziv-Welch) 圧縮サポートが含まれるようになりました。LZWは、テキストや単純なグラフィックに特に効果的な可逆データ圧縮アルゴリズムであり、PDFドキュメントのコンテンツストリーム圧縮に一般的に使用されます。

主な機能

  • PDFストリームの完全なLZW解凍のサポート
  • 強化された圧縮のための構成可能なプレディクタのサポート
  • 複数のフィルオーダーのオプション (上から下、下から上)
  • 互換性のための早期コード変更のサポート
  • メモリ効率の良いストリーム処理
  • PDFパラメータの統合 (Predictor、Colors、BitsPerComponent、Columns)

技術的な実装

LZW圧縮サポートは、HPDFLZW.pasユニットを通じて実装されており、以下を提供します。

  • TPDFLZWDecompressor: メイン解凍クラス
  • TPDFLZWParms: PDF固有の設定のためのパラメータ構造体
  • TPDFLZWFillOrder: ビットオーダー処理のための列挙型

クラスリファレンス

TPDFLZWDecompressor

LZW解凍操作のためのメインクラス。

プロパティ:

  • FillOrder: ビットオーダーを指定します (foBottom、foトップへ)
  • EarlyChange: 早期のコードサイズ変更を制御します
  • InitialCodeSize: 解凍のための初期コードサイズ

メソッド:

  • Decompress(Input: AnsiString): AnsiString - 基本的な解凍
  • Decompress(Input: AnsiString; Parms: TPDFLZWParms): AnsiString - PDFパラメータを使用した解凍

使用例

基本的なLZW解凍


// Delphi example - Basic LZW decompression
procedure DecompressLZWData;
var
  Decompressor: TPDFLZWDecompressor;
  CompressedData: AnsiString;
  DecompressedData: AnsiString;
begin
  Decompressor := TPDFLZWDecompressor.Create;
  try
    // Configure decompressor
    Decompressor.FillOrder := foトップへ;
    Decompressor.EarlyChange := True;
    Decompressor.InitialCodeSize := 9;

    // Decompress data
    DecompressedData := Decompressor.Decompress(CompressedData);

    // Use decompressed data
    ProcessDecompressedData(DecompressedData);
  finally
    Decompressor.Free;
  end;
end;
        

PDFパラメータを使用した高度なLZW解凍


// Delphi example - Advanced LZW decompression with PDF parameters
procedure DecompressLZWWithParms;
var
  Decompressor: TPDFLZWDecompressor;
  CompressedData: AnsiString;
  DecompressedData: AnsiString;
  Parms: TPDFLZWParms;
begin
  Decompressor := TPDFLZWDecompressor.Create;
  try
    // Configure PDF parameters
    Parms.Predictor := 2;           // Horizontal differencing predictor
    Parms.Colors := 3;              // RGB color space
    Parms.BitsPerComponent := 8;    // 8 bits per component
    Parms.Columns := 100;           // Image width in pixels
    Parms.ExpandedTo8Bit := True;   // Expand to 8-bit components
    Parms.ColorSpace := 'DeviceRGB';

    // Decompress with parameters
    DecompressedData := Decompressor.Decompress(CompressedData, Parms);

    // Process the decompressed image data
    ProcessImageData(DecompressedData, Parms);
  finally
    Decompressor.Free;
  end;
end;
        

PDFパラメータのサポート

TPDFLZWParms構造体

  • Predictor: プレディクタ関数 (0=なし、2=水平方向の差分)
  • Colors: カラーコンポーネントの数 (1=グレースケール、3=RGB、4=CMYK)
  • BitsPerComponent: カラーコンポーネントあたりのビット数 (1、2、4、8、16)
  • Columns: 行あたりのサンプル数
  • ExpandedTo8Bit: 8 ビットコンポーネントに拡張するかどうか
  • ColorSpace: カラースペース識別子

アルゴリズムの詳細

LZWの実装には以下が含まれます。

  • 辞書ベースの圧縮: 動的辞書を構築して維持します
  • 可変コード長: 9から12ビットのコード長をサポートします
  • クリアコードの処理: クリアコードおよび情報終了コードの適切な処理
  • 文字列テーブルの管理: パターン認識のための効率的な文字列テーブル

パフォーマンスの特性

  • メモリ効率: 大きなデータストリームに最適化
  • 高速解凍: 高度に最適化された解凍アルゴリズム
  • 予測可能なパフォーマンス: さまざまなデータタイプにわたる一貫したパフォーマンス
  • 低いメモリフットプリント: 処理中の最小限のメモリオフセット

一般的な使用例

  • PDFコンテンツストリームの解凍
  • PDFファイル内の画像データの解凍
  • テキストストリームの解凍
  • フォームデータの解凍
  • PostScriptストリームの解凍

エラー処理

LZW解凍プログラムには、以下のための堅牢なエラー処理が含まれています。

  • 無効なコードシーケンス
  • 破損したデータストリーム
  • メモリ割り当ての失敗
  • 辞書オーバーフローの状態

標準への準拠

  • PDF 1.2+ LZWDecodeフィルターの準拠
  • PostScript Level 2 LZW互換性
  • TIFF LZW圧縮の互換性
  • LZW における Adobe 実装との互換性

関連項目