拡張 ZLib 圧縮サポート

概要

HotPDF には、PDF ストリームとコンテンツ用のバンドルされた zlib-ng にバックアップされた、包括的な ZLib 互換の圧縮サポートが含まれるようになりました。ZLib 互換 API は、FlateDecode フィルター操作や一般的なデータ圧縮のために PDF ドキュメントで広く使用されている、効率的な deflate/inflate 圧縮を提供します。

主な機能

  • バンドルされた zlib-ng にバックアップされた ZLib 互換 API
  • PDF FlateDecode パラメータのサポート
  • ストリームベースの圧縮と解凍
  • 拡張されたエラー処理とデバッグ機能
  • 大規模なデータストリームのメモリ効率の高い処理
  • zlib-ng の長さ ABI の安全性のための Win64 ワンショット画像圧縮ブリッジ
  • 汎用フォールバックを備えた Win64x および診断用 MSVC Win64 zlib-ng ランタイム SIMD ディスパッチ
  • SIMD に適したネイティブバッファのための 32 バイトアライメントの C 割り当てブリッジ
  • クロスプラットフォーム C ライブラリの統合
  • 複数の圧縮レベル (なし、最速、デフォルト、最大)

技術的な実装

拡張 ZLib サポートは HPDFZLib.pas ユニットを通じて実装されており、以下の機能を提供します。

  • 完全な ZLib API: ZLib 関数の完全な実装
  • ストリームクラス: TCustomZStream およびストリーム処理用の派生クラス
  • PDF 統合: PDF 固有のパラメータ用の TPDFFlateParms
  • 拡張関数: 使用を簡素化するための InflateStr、InflateStrParms

64 ビットの zlib-ng オブジェクトセットには、ランタイムで選択される SSE2、SSSE3、SSE4.1、SSE4.2、PCLMULQDQ、および AVX2 パスが含まれています。Win32 は汎用の zlib-ng オブジェクトセットを使用して bcc32c OMF ツールチェーンとの互換性を保ちますが、Win32 の JPEG/TIFF オブジェクトは従来の bcc32 のままです。

回帰カバレッジ

zlib-ng の Flate バックエンドは、自動化された Delphi および C++Builder の回帰スイートによってカバーされています。現在の検証セットは、Win32 で 20 の Delphi DユニットX テスト、Win64 で 20 のテスト、さらに Win32 で 17 の C++Builder GoogleTest テスト、Win64x で 17 のテストに合格しています。ネイティブオブジェクトの再ビルドも、クリーンな出力から合格しています:206 の Win32 オブジェクト、205 の Win64x オブジェクト、および 206 の MSVC Win64 オブジェクト。対象となるワークフローには、ページストリーム圧縮、埋め込みフォントおよび ToUnicode CMap 圧縮、Flate 画像ストリーム、標準 JPEG 画像の配置、TIFF インポート、バーコードを多用する出力、コピー/マージ/編集シナリオ、およびデモで生成された PDF が含まれます。

圧縮レベル

  • Z_NO_COMPRESSION (0): 圧縮なし
  • Z_BEST_SPEED (1): 最速の圧縮
  • Z_BEST_COMPRESSION (9): 最大圧縮
  • Z_DEFAULT_COMPRESSION (-1): 速度と圧縮のデフォルトのバランス

使用例

基本的な文字列の圧縮/解凍


// Delphi example - Basic string inflation
function DecompressString(const CompressedData: AnsiString): AnsiString;
begin
  // Simple decompression
  Result := InflateStr(CompressedData);

  // With debug output enabled
  Result := InflateStr(CompressedData, True);
end;
        

ストリームベースの圧縮


// Delphi example - Stream-based decompression
procedure DecompressStream(InStream, OutStream: TStream);
begin
  // Decompress from input stream to output stream
  PLZDecompressStream(InStream, OutStream);

  // For raw deflate data (without ZLib headers)
  PLZDecompressStreamRaw(InStream, OutStream);
end;
        

パラメータ付き PDF FlateDecode


// Delphi example - PDF FlateDecode with parameters
function DecompressPDFStream(const CompressedData: AnsiString;
  Predictor, Colors, BitsPerComponent, Columns: Integer): AnsiString;
var
  Parms: TPDFFlateParms;
begin
  // Configure PDF parameters
  Parms.Predictor := Predictor;
  Parms.Colors := Colors;
  Parms.BitsPerComponent := BitsPerComponent;
  Parms.Columns := Columns;
  Parms.ExpandedTo8Bit := True;
  Parms.ColorSpace := 'DeviceRGB';

  // Decompress with PDF parameters
  Result := InflateStrParms(CompressedData, Parms);
end;
        

低レベル ZLib 操作


// Delphi example - Low-level ZLib operations
procedure CompressData;
var
  strm: z_stream;
  ret: Integer;
  input: AnsiString;
  output: AnsiString;
begin
  input := 'Data to compress';
  SetLength(output, Length(input) * 2);

  // Initialize stream
  FillChar(strm, SizeOf(strm), 0);
  ret := deflateInit(strm, Z_DEFAULT_COMPRESSION);

  if ret = Z_OK then
  try
    // Set input
    strm.next_in := PByte(PAnsiChar(input));
    strm.avail_in := Length(input);

    // Set output
    strm.next_out := PByte(PAnsiChar(output));
    strm.avail_out := Length(output);

    // Compress
    ret := deflate(strm, Z_FINISH);

    if ret = Z_STREAM_END then
    begin
      // Compression successful
      SetLength(output, Length(output) - strm.avail_out);
    end;
  finally
    deflateEnd(strm);
  end;
end;
        

PDF FlateDecode パラメータ

TPDFFlateParms 構造体

  • Predictor: 予測関数 (1=予測なし、2=TIFF、10-15=PNG)
  • Colors: カラーコンポーネントの数
  • BitsPerComponent: カラーコンポーネントあたりのビット数
  • Columns: 行あたりのサンプル数
  • ExpandedTo8Bit: 8 ビットコンポーネントに拡張するかどうか
  • ColorSpace: カラースペース識別子

拡張機能

  • メモリ管理: 最適化されたメモリの割り当てと解放
  • エラー処理: 包括的なエラーチェックとレポート
  • デバッグサポート: トラブルシューティング用のオプションのデバッグ出力
  • パフォーマンスの最適化: 高度に最適化された圧縮アルゴリズム
  • ストリーム統合: Delphi ストリームクラスとのシームレスな統合

パフォーマンスの利点

  • 高速な圧縮と解凍の速度
  • テキストおよび単純なグラフィックスの優れた圧縮率
  • 処理中の少ないメモリフットプリント
  • PDF コンテンツストリーム用に最適化
  • 最小限の CPU オーバーヘッド

標準への準拠

  • RFC 1950 (ZLib 形式仕様)
  • RFC 1951 (Deflate 圧縮アルゴリズム)
  • PDF FlateDecode フィルター仕様
  • PNG 予測アルゴリズムのサポート
  • TIFF 予測アルゴリズムのサポート

エラーコードと処理

  • Z_OK (0): 成功
  • Z_STREAM_END (1): ストリームの終端に到達しました
  • Z_NEED_DICT (2): 辞書が必要です
  • Z_ERRNO (-1): ファイルエラー
  • Z_STREAM_ERROR (-2): ストリーム状態エラー
  • Z_DATA_ERROR (-3): データ整合性エラー
  • Z_MEM_ERROR (-4): メモリ割り当てエラー
  • Z_BUF_ERROR (-5): バッファサイズエラー

関連項目