|
LZW-komprimeringsstöd
Översikt
HotPDF avkodar äldre PDF-strömmar som använder LZWDecode -filtret och kan intekra TIFF- eller PNG-prediktorerna som vanligtvis paras med det filtret
Huvudfunktioner
- PDF
EarlyChange=1 och EarlyChange=0 kodbreddsövergångar
- IFyllnadsordning med mest eller minst signifikant bit först
- Rensning via clear-kod, end-of-information och
KwKwK -expansionshantering
- Direkt utdata till en
TStream utan att bygga en andra resultatsträng
- Konfigurerbara utdatagränser samt valfria strikta kontroller av initial clear och end-of-information
- TIFF Predictor 2 med 1, 2, 4, 8 eller 16 bitar per komponent
- PNG-radfilter: None, Sub, Up, Average och Paeth
- Statistik per avkodning för kodbredder, ordlistetillväxt, återställningar, expansioner och utdatabyte
Types
TPDFLZWDecompressor är den återanvändbara avkodarklassen
TPDFLZWCompressor är den matchande kodarklassen
TPDFLZWParms bär PDF:s prediktorgeometri
TPDFLZWFillOrder väljer foTop eller foBottom bitordning
EHPDFLZWError rapporterar felaktig indata, geometri som inte stöds och brott mot konfigurerade gränser
Konfigurationsegenskaper
FillOrder väljer den komprimerade bitordningen
EarlyChange väljer PDF:s regel för övergång av ordlistebredd och har standardvärdet True
InitialCodeSize accepterar värden från 2 till 9 och har 9 som standard för PDF
- För reducerade alfabet måste varje okomprimerad byte vara mindre än
1 shl (InitialCodeSize - 1); komprimeringen kastar EHPDFLZWError innan utdata skrivs om en byte ligger utanför det intervallet
MaxOutputBytes stoppar överdriven expansion innan den konfigurerade gränsen överskrids, där noll betyder obegränsat
RequireInitialClear kräver att den första koden rensar ordlistan
RequireEndOfInformation avvisar en ström som slutar utan sin terminator
Methods
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;
Decompress kastar EHPDFLZWError vid ogiltig indata
TryDecompress returnerar False och exponerar orsaken via LastError
DecompressToStream och DecompressStream returnerar antalet skrivna avkodade byte
DecompressStream läser från den aktuella inmatningspositionen och återställer den positionen som standard när strömmen är sökbar
Grundläggande LZW-dekomprimering
TPDFLZWCompressor.CompressToStream och CompressStream returnerar antalet skrivna kodade byte, inklusive clear-kod och end-of-information-kod för tom indata; standardkonfigurationen för PDF skriver 3 byte för tom indata
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;
Strömutdata och diagnostik
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;
Prediktorparametrar
Predictor=1 returnerar de avkodade bytena oförändrade
Predictor=2 inverterar TIFF:s horisontella differensberäkning
Predictor=10..15 inverterar PNG-radtaggen som lagrats i början av varje rad
Colors, BitsPerComponent och Columns definierar den exakta radgeometrin
ExpandedTo8Bit och ColorSpace förblir tillgängliga för källkompatibilitet
Avkodningsstatistik
CodesRead, ClearCodesRead och DictionaryAdds
KwKwKExpansions, PeakCodeSize och PeakDictionarySize
OutputBytes och EndedWithEndOfInformation
Felhantering
- Koder utöver nästa ordlistepost avvisas
- Brutna prefixkedjor och en ogiltig första kod avvisas
- Avhuggen indata avvisas när
RequireEndOfInformation är aktiverad
- Utdataexpansionen kontrolleras innan varje fras emitteras
- Prediktorrader måste vara kompletta och använda giltig geometri och PNG-radtagg
Se även
|