Enhanced ZLib Support

Genel bakış

HotPDF artık; PDF stream'leri ve içeriği için paketlenen zlib-ng'nin desteklediği kapsamlı ZLib uyumlu sıkıştırma desteği içeriyor. zlib uyumlu API; FlateDecode filtre işlemlerinde ve genel veri sıkıştırmada PDF belgelerinde yaygın biçimde kullanılan verimli deflate/inflate sıkıştırması sağlar.

Öne çıkan özellikler

  • Paketlenen zlib-ng tarafından desteklenen ZLib uyumlu API
  • PDF FlateDecode parametreleri desteği
  • Stream tabanlı sıkıştırma ve sıkıştırmayı açma
  • Gelişmiş hata işleme ve hata ayıklama yetenekleri
  • Büyük veri akışları için bellek verimli işleme
  • zlib-ng uzunluk ABI güvenliği için Win64 tek seferlik görüntü sıkıştırma köprüsü
  • Win64x ve tanılama MSVC Win64 zlib-ng çalışma zamanı SIMD yönlendirmesi, genel geri dönüşlerle
  • SIMD dostu yerel tamponlar için 32 bayt hizalı C ayırma köprüsü
  • Platformlar arası C kitaplık entegrasyonu
  • Birden çok sıkıştırma düzeyi (yok, en hızlı, varsayılan, en yüksek)

Teknik uygulama

Gelişmiş ZLib desteği, şunları sağlayan HPDFZLib.pas birimi üzerinden uygulanır:

  • Eksiksiz ZLib API'si: ZLib işlevlerinin tam uygulaması
  • Stream sınıfları: Stream işlemesi için TCustomZStream ve türev sınıflar
  • PDF entegrasyonu: PDF'e özgü parametreler için TPDFFlateParms
  • Gelişmiş işlevler: Basitleştirilmiş kullanım için InflateStr, InflateStrParms

64 bitlik zlib-ng nesne kümeleri; çalışma zamanında seçilen SSE2, SSSE3, SSE4.1, SSE4.2, PCLMULQDQ ve AVX2 yollarını içerir. Win32, bcc32c OMF araç zinciriyle uyumlu kalmak için genel zlib-ng nesne kümesini kullanır; Win32 JPEG/TIFF nesneleri ise klasik bcc32'de kalır.

Regresyon kapsamı

zlib-ng Flate arka ucu, otomatik Delphi ve C++Builder regresyon kümeleriyle kapsanır. Güncel doğrulama kümesi; Win32'de 20, Win64'te 20 Delphi DUnitX testi ile Win32'de 17, Win64x'te 17 C++Builder GoogleTest testini geçirir. Yerel nesne yeniden derlemeleri de temiz çıktılardan geçer: 206 Win32 nesnesi, 205 Win64x nesnesi ve 206 MSVC Win64 nesnesi. Kapsanan iş akışları; sayfa stream sıkıştırması, gömülü yazı tipi ve ToUnicode CMap sıkıştırması, Flate görüntü stream'leri, standart JPEG görüntü yerleşimi, TIFF içe aktarma, barkod yoğun çıktı, kopyala/birleştir/düzenle senaryoları ve demo ile üretilmiş PDF'leri içerir.

Sıkıştırma düzeyleri

  • Z_NO_COMPRESSION (0): Sıkıştırma yok
  • Z_BEST_SPEED (1): En hızlı sıkıştırma
  • Z_BEST_COMPRESSION (9): En yüksek sıkıştırma
  • Z_DEFAULT_COMPRESSION (-1): Hız ve sıkıştırmanın varsayılan dengesi

Kullanım örnekleri

Temel dize sıkıştırma/açma


// 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;
        

Stream tabanlı sıkıştırma


// 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;
        

Parametreli 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;
        

Alt düzey ZLib işlemleri


// 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 parametreleri

TPDFFlateParms yapısı

  • Predictor: Öngörücü işlevi (1=öngörü yok, 2=TIFF, 10-15=PNG)
  • Colors: Renk bileşeni sayısı
  • BitsPerComponent: Renk bileşeni başına 1, 2, 4, 8 veya 16 bit
  • Columns: Satır başına örnek sayısı
  • ExpandedTo8Bit: Mevcut çağıranlar için tutulan uyumluluk alanı
  • ColorSpace: Kaynak renk uzayı tanımlayıcısı için uyumluluk alanı

Paylaşılan öngörücü API'si

Öngörücü geri alınması, Flate veya LZW çözmesinden bağımsız gerektiğinde HPDFPredictor birimini ekleyin

function HPDFDecodePredictor(const Data: AnsiString; Predictor, Colors,
  BitsPerComponent, Columns: Integer;
  MaxOutputBytes: Int64 = 0): AnsiString;

function HPDFTryDecodePredictor(const Data: AnsiString; Predictor, Colors,
  BitsPerComponent, Columns: Integer; MaxOutputBytes: Int64;
  out Output: AnsiString; out ErrorMessage: string): Boolean;
  • Bir satır kırpılmışsa, PNG satır etiketi 0-4 aralığın dışındaysa, geometri taşıyorsa ya da çıktı sınırı aşılırsa HPDFDecodePredictor EHPDFPredictorError fırlatır
  • HPDFTryDecodePredictor istisna fırlatmadan aynı doğrulama sonucunu döndürür ve kayıt için bir hata mesajı sağlar
  • TIFF çözme, kullanılmayan dolgu bitlerini korur ve paketlenmiş ile 16 bit derinliklerde bileşen başına yatay farklılaştırma uygular
  • PNG çözme, Predictor 10-15 değerlerinde her satırın başındaki açık filtre etiketini kullanır
  • InflateStrParms, gerçek Flate çıktısını okuduktan sonra bu paylaşılan çözücüyü uygular ve öngörücü hatalarını EZDecompressionError olarak bildirir

Gelişmiş özellikler

  • Bellek yönetimi: İyileştirilmiş bellek ayırma ve serbest bırakma
  • Hata işleme: Kapsamlı hata denetimi ve raporlama
  • Hata ayıklama desteği: Sorun giderme için isteğe bağlı hata ayıklama çıktısı
  • Performans iyileştirmesi: Yoğun biçimde iyileştirilmiş sıkıştırma algoritmaları
  • Stream entegrasyonu: Delphi stream sınıflarıyla sorunsuz entegrasyon

Performans yararları

  • Hızlı sıkıştırma ve sıkıştırmayı açma hızları
  • Metin ve basit grafikler için mükemmel sıkıştırma oranları
  • İşleme sırasında düşük bellek ayak izi
  • PDF içerik stream'leri için iyileştirilmiştir
  • En düşük CPU ek yükü

Standart uyumluluğu

  • RFC 1950 (ZLib biçim specification)
  • RFC 1951 (Deflate sıkıştırma algoritması)
  • PDF FlateDecode filtre specification'ı
  • PNG öngörücü algoritması desteği
  • TIFF öngörücü algoritması desteği

Hata kodları ve işleme

  • Z_OK (0): Başarı
  • Z_STREAM_END (1): Stream sonuna ulaşıldı
  • Z_NEED_DICT (2): Sözlük gerekiyor
  • Z_ERRNO (-1): Dosya hatası
  • Z_STREAM_ERROR (-2): Stream durum hatası
  • Z_DATA_ERROR (-3): Veri bütünlüğü hatası
  • Z_MEM_ERROR (-4): Bellek ayırma hatası
  • Z_BUF_ERROR (-5): Tampon boyutu hatası

Ayrıca bakın