|
拡張 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): バッファサイズエラー
関連項目
|