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 |