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