LZW Compression Support Genel bakış HotPDF, LZWDecode filtresini kullanan eski PDF stream'lerini çözer ve bu filtrenin sık eşleştirdiği TIFF veya PNG öngörücülerini geri alabilir Öne çıkan özellikler
- PDF
EarlyChange=1 ve EarlyChange=0 kod genişliği geçişleri
- En anlamlı bit ve en anlamsız bit doldurma sırası
- Kod temizleme sıfırlaması, bilgi sonu ve
KwKwK açılımının işlenmesi
- İkinci bir sonuç dizesi oluşturmadan doğrudan bir
TStream'e çıktı
- Yapılandırılabilir çıktı sınırları ile isteğe bağlı katı başlangıç temizleme ve bilgi sonu denetimleri
- Bileşen başına 1, 2, 4, 8 veya 16 bitta TIFF Predictor 2
- PNG None, Sub, Up, Average ve Paeth satır filtreleri
- Kod genişlikleri, sözlük büyümesi, sıfırlamalar, açılımlar ve çıktı baytları için çözüm başına istatistikler
Türler
TPDFLZWDecompressor, yeniden kullanılabilir çözücü sınıfıdır
TPDFLZWCompressor, eşleşen kodlayıcı sınıfıdır
TPDFLZWParms, PDF öngörücü geometrisini taşır
TPDFLZWFillOrder, foTop veya foBottom bit sırasını seçer
EHPDFLZWError; bozuk girdiyi, desteklenmeyen geometriyi ve yapılandırılmış sınır hatalarını bildirir
Yapılandırma property'leri
FillOrder, sıkıştırılmış bit sırasını seçer
EarlyChange, PDF sözlük genişliği geçiş kuralını seçer ve varsayılanı True'dur
InitialCodeSize 2-9 arası değerleri kabul eder ve PDF için varsayılanı 9'dur
- Küçültülmüş alfabelerde sıkıştırılmamış her bayt,
1 shl (InitialCodeSize - 1)'den küçük olmalıdır; bir bayt bu aralığın dışındaysa sıkıştırma, çıktı yazmadan önce EHPDFLZWError fırlatır
MaxOutputBytes, yapılandırılan sınır aşılmadan aşırı açılımı durdurur; sıfır sınırsız demektir
RequireInitialClear, ilk kodun sözlüğü sıfırlamasını zorunlu kılar
RequireEndOfInformation, sonlandırıcısıyla bitmeyen bir stream'i reddeder
Metotlar function Decompress(const Input: AnsiString): AnsiString; overload;
function Decompress(const Input: AnsiString;
Parms: TPDFLZWParms): AnsiString; overload;
function TryDecompress(const Input: AnsiString;
out Output: AnsiString): Boolean; overload;
function TryDecompress(const Input: AnsiString; Parms: TPDFLZWParms;
out Output: AnsiString): Boolean; overload;
function DecompressToStream(const Input: AnsiString;
OutputStream: TStream): Int64;
function DecompressStream(InputStream, OutputStream: TStream;
RestoreInputPosition: Boolean = True): Int64;
- Geçersiz girdide
Decompress EHPDFLZWError fırlatır
TryDecompress False döndürür ve nedeni LastError üzerinden ortaya koyar
DecompressToStream ve DecompressStream, yazılan çözülmüş bayt sayısını döndürür
DecompressStream güncel girdi konumundan okur ve stream konumlanabilirse varsayılan olarak o konumu geri yükler
Temel LZW sıkıştırmayı açma TPDFLZWCompressor.CompressToStream ve CompressStream, yazılan kodlanmış bayt sayısını döndürür; boş girdi için temizleme kodu ve bilgi sonu kodu da buna dahildir ve varsayılan PDF yapılandırması boş girdi için 3 bayt yazar
uses
HPDFLZW;
procedure DecompressLZWData;
var
Decompressor: TPDFLZWDecompressor;
CompressedData: AnsiString;
DecompressedData: AnsiString;
begin
Decompressor := TPDFLZWDecompressor.Create;
try
Decompressor.FillOrder := foTop;
Decompressor.EarlyChange := True;
Decompressor.MaxOutputBytes := 64 * 1024 * 1024;
DecompressedData := Decompressor.Decompress(CompressedData);
ProcessDecompressedData(DecompressedData);
finally
Decompressor.Free;
end;
end;
Stream çıktısı ve tanılama procedure DecodeLZWToStream(const CompressedData: AnsiString;
Destination: TStream);
var
Decompressor: TPDFLZWDecompressor;
begin
Decompressor := TPDFLZWDecompressor.Create;
try
Decompressor.RequireInitialClear := True;
Decompressor.RequireEndOfInformation := True;
Decompressor.DecompressToStream(CompressedData, Destination);
LogDecodeStatistics(
Decompressor.CodesRead,
Decompressor.PeakCodeSize,
Decompressor.PeakDictionarySize,
Decompressor.OutputBytes);
finally
Decompressor.Free;
end;
end;
Öngörücü parametreleri
Predictor=1, çözülmüş baytları değiştirmeden döndürür
Predictor=2, TIFF yatay farklılaştırmayı geri alır
Predictor=10..15, her satırın başında saklanan PNG filtre etiketini geri alır
Colors, BitsPerComponent ve Columns kesin satır geometrisini tanımlar
ExpandedTo8Bit ve ColorSpace, kaynak uyumluluğu için kullanılabilir kalır
Çözme istatistikleri
CodesRead, ClearCodesRead ve DictionaryAdds
KwKwKExpansions, PeakCodeSize ve PeakDictionarySize
OutputBytes ve EndedWithEndOfInformation
Hata işleme
- Sözlükteki bir sonraki girdiyi aşan kodlar reddedilir
- Bozuk önek zincirleri ve geçersiz ilk kod reddedilir
RequireEndOfInformation etkinken kırpılmış girdi reddedilir
- Çıktı açılımı, her ifade yazılmadan önce denetlenir
- Öngörücü satırları eksiksiz olmalı ve geçerli bir geometri ile PNG satır etiketi kullanmalıdır
Ayrıca bakın |