Enhanced ZLib Compression Support

Yleiskatsaus

HotPDF sisältää nyt kattavan ZLib-yhteensopivan pakkaustuen, jonka taustalla on mukana toimitettu zlib-ng PDF-virroille ja sisällölle. Zlib-yhteensopiva API tarjoaa tehokkaan deflate/inflate-pakkauksen, jota käytetään laajalti PDF-dokumenteissa FlateDecode-suodatinoperaatioihin ja yleiseen tiedonpakkaukseen

Key Features

  • ZLib-yhteensopiva API, jonka taustalla on paketoitu zlib-ng
  • PDF FlateDecode parameters support
  • Virtapohjainen pakkaaminen ja pakkauksen purkaminen
  • Parannetut virheenkäsittely- ja virheenkorjausominaisuudet
  • Muistitehokas käsittely suurille tietovirroille
  • Win64-kertakuvanpakkaussilta zlib-ng-pituuden ABI-turvallisuutta varten
  • Win64x- ja diagnostiikka-MSVC Win64 zlib-ng -ajonaikainen SIMD-jakelu geneerisillä vararatkaisuilla
  • 32-tavuisesti kohdistettu C-allokointisilta SIMD-ystävällisille natiivipuskureille
  • Cross-platform C library integration
  • Multiple compression levels (none, fastest, default, maximum)

Technical Implementation

Tehostettu ZLib-tuki on toteutettu yksikössä HPDFZLib.pas, joka tarjoaa

  • Täydellinen ZLib API: ZLib-funktioiden täydellinen toteutus
  • Virtaluokat: TCustomZStream ja johdetut luokat virtakäsittelyä varten
  • PDF-integraatio: TPDFFlateParms PDF-kohtaisille parametreille
  • Tehostetut toiminnot: InflateStr, InflateStrParms yksinkertaisempaa käyttöä varten

64-bittiset zlib-ng-objektijoukot sisältävät ajonaikaisesti valitut SSE2-, SSSE3-, SSE4.1-, SSE4.2-, PCLMULQDQ- ja AVX2-polut. Win32 käyttää geneeristä zlib-ng-objektijoukkoa säilyttääkseen yhteensopivuuden bcc32c OMF -työkaluketjun kanssa, kun taas Win32 JPEG/TIFF -objektit säilyvät perinteisessä bcc32-kääntäjässä

Regression Coverage

Zlib-ng Flate -taustaosa katetaan automaattisilla Delphi- ja C++Builder-regressiotestisarjoilla. Nykyinen validointijoukko läpäisee 20 Delphin DUnitX-testiä Win32-alustalla ja 20 Win64-alustalla sekä 17 C++Builderin GoogleTest-testiä Win32-alustalla ja 17 Win64x-alustalla. Natiivit objektien uudelleenrakennukset läpäisevät myös puhtailla tuloksilla: 206 Win32-objektia, 205 Win64x-objektia ja 206 MSVC Win64 -objektia. Kattaviin työnkulkuihin kuuluvat sivuvirran pakkaus, upotetun fontin ja ToUnicode CMap -pakkaus, Flate-kuvavirrat, standardi JPEG-kuvien sijoittelu, TIFF-tuonti, paljon viivakoodeja sisältävät tulosteet, kopiointi-/yhdistämis-/muokkausskenaariot ja demon luomat PDF-tiedostot

Compression Levels

  • Z_NO_COMPRESSION (0): No compression
  • Z_BEST_SPEED (1): Fastest compression
  • Z_BEST_COMPRESSION (9): Maximum compression
  • Z_DEFAULT_COMPRESSION (-1): Nopeuden ja pakkauksen oletustasapaino

Usage Examples

Basic String Compression/Decompression


// 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-based Compression


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


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

Low-level ZLib Operations


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

TPDFFlateParms Structure

  • Predictor: Predictor function (1=no prediction, 2=TIFF, 10-15=PNG)
  • Värit: Värikomponenttien määrä
  • BitsPerComponent: Bits per color component
  • Sarakkeet: Näytteiden määrä riviä kohden
  • ExpandedTo8Bit: Laajennetaanko 8-bittisiksi komponenteiksi
  • ColorSpace: Color space identifier

Enhanced Features

  • Muistinhallinta: Optimoitu muistin varaus ja vapauttaminen
  • Virheidenkäsittely: Kattava virheiden tarkistus ja raportointi
  • Vianmääritystuki: Valinnainen vianmääritystuloste ongelmanratkaisua varten
  • Suorituskyvyn optimointi: Erittäin optimoidut pakkausalgoritmit
  • Virtaintegraatio: Saumaton integrointi Delphin virtaluokkien kanssa

Performance Benefits

  • Nopeat pakkaus- ja purkunopeudet
  • Erinomaiset pakkaussuhteet tekstille ja yksinkertaiselle grafiikalle
  • Low memory footprint during processing
  • Optimoitu PDF-sisältövirroille
  • Minimal CPU overhead

Standards Compliance

  • RFC 1950 (ZLib format specification)
  • RFC 1951 (Deflate compression algorithm)
  • PDF FlateDecode filter specification
  • PNG predictor algorithm support
  • TIFF predictor algorithm support

Virhekoodit ja käsittely

  • Z_OK (0): Success
  • Z_STREAM_END (1): Virran loppu saavutettu
  • Z_NEED_DICT (2): Dictionary required
  • Z_ERRNO (-1): File error
  • Z_STREAM_ERROR (-2): Stream state error
  • Z_DATA_ERROR (-3): Data integrity error
  • Z_MEM_ERROR (-4): Memory allocation error
  • Z_BUF_ERROR (-5): Buffer size error

See Also