|
Stöd för JBIG2-komprimering
Översikt
HotPDF har inbyggd JBIG2-komprimering och -avkodning för de tvånivåbilder som används av skannad text, formulär och linjegrafik
Viktiga funktioner
- Högeffektiv komprimering för tvånivåbilder
- Stöd för både förlustfyllda och förlustfria komprimeringslägen
- Optimerad för komprimering av text och linjegrafik
- Markant mindre filstorlek jämfört med traditionella komprimeringsmetoder
- Flersidig kodning med en tränad symbolordbok som delas av alla image XObjects
- Exakt detektering av dubblettsidor före klassificering och återanvändning av kodade XObjects när PDF:en byggs ihop
- Begränsade sid- och pixelbudgeter med valfri inbyggd Pascal-reservväg
Komprimeringsfördelar
- Återanvändning över sidor: Upprepade symboler klassificeras en gång och lagras i delade globala data
- Symbolmatchning: Med
UseSymbolDictionary lagras upprepade svarta sammanhängande komponenter en gång som symboler, och LossyLevel låter nästan identiska komponenter dela en symbol
- Minneseffektivt: Optimerat för bearbetning av stora skannade dokument
Typiska användningsfall
- Skannade textdokument
- Tekniska ritningar och byggritningar
- Formulär och fakturor
- Kartor och diagram
- Dokument med blandat innehåll, text och grafik
Teknisk implementation
JBIG2-implementationen erbjuder inbyggda Pascal-vägar och en valfri statisk extern backend via dessa APIer
- THPDFJBIG2Decoder: Central dekoderklass för JBIG2-komprimerade data
- Inbyggd kodningstäckning: MMR-generiska regioner, MQ-generiska regioner, aritmetiska och standard-Huffman-symbolordböcker och textregioner, förfiningssymboler, aggregerade symboler, förfinade textinstanser, bevarade aritmetiska kontexter och avgränsade long-form-referenstabeller
- Avgränsad kontextåteranvändning: Sannolikhetsbanker för generiska och förfinade regioner behålls med mallmedvetna storlekar, isoleras mellan fan-out-beroenden och förkastas när deras källa eller mall är inkompatibel
- Strömbearbetning: Effektiv hantering av JBIG2-dataströmmar
- Stöd för globala ordböcker: Delade och flernivåkedjade symbolordböcker med segmentidentifierare på en, två eller fyra byte
- Batchkodare över sidor:
THPDFJBIG2Encoder.EncodePagesToByteArrays tränar över hela batchen och returnerar en sidström per indata plus delade globala data
- Batchkontrakt:
TJBIG2BatchPage beskriver en packad sida, TJBIG2BatchEncodeBackend identifierar den valda implementationen, och TJBIG2BatchEncodeCallback definierar externa batchintegrationer
- Dokumentintegration:
THotPDF.AddJBIG2ImageBatch och THotPDF.AddJBIG2BitmapBatch kodar innan PDF-grafen muteras, bifogar en delad /JBIG2Globals-ström och returnerar bildindex i indataordning
- Batchtelemetri:
TJBIG2BatchEncodeStatistics rapporterar vald backend, in- och utdatastorlekar, antal inbyggda symboler och avvisning på grund av budget
- Backend-återställning:
HPDFJBIG2EncRegisterBackends återställer båda inbyggda kodaranropen efter att tillfälliga applikationsöverskrivningar rensats
- HPDFJBIG2SplitSymbolDictionaryGlobals: Delar en sekventiell inbäddad ström i globala ordböcker och sidbildsegment medan beroenderubriker i long-form bevaras
- Avkodning av synlig region:
THPDFJBIG2Decoder.LoadRegionFromByteArray allokerar bara det begärda fönstret, slår upp dess transitiva ordboksberoenden, komponerar överlappande sidregioner med klippning och hoppar över oberoende regioner utanför fönstret före entropidekodningen
- Telemetri för regionsavkodning:
LastRegionDecodeStats rapporterar antal avkodade och överhoppade regioner plus avkodade källpixlar, medan UsedIncrementalRegionDecode skiljer den inbyggda fönstervägen från reservvägen med fullständig avkodning
- Skanlinjeåtkomst: Dataåtkomst rad för rad för minnessnål bearbetning
Användningsexempel
// Delphi-exempel - bearbetning av JBIG2-komprimerade data
procedure ProcessJBIG2Data;
var
PDF: THotPDF;
Decoder: THPDFJBIG2Decoder;
ImageData: TBytesArray;
ScanlineData: TBytesArray;
Row: Integer;
begin
PDF := THotPDF.Create(nil);
Decoder := THPDFJBIG2Decoder.Create;
try
PDF.BeginDoc;
PDF.AddPage;
// Läs in JBIG2-komprimerade bilddata
if Decoder.LoadFromByteArray(ImageData) then
begin
// Bearbeta scanline för scanline för minneseffektivitet
for Row := 0 to Decoder.Height - 1 do
begin
if Decoder.GetScanline(Row, ScanlineData) then
begin
// Bearbeta scanline-data efter behov
// Lägg till på PDF-sidan
end;
end;
end;
PDF.EndDoc;
finally
Decoder.Free;
PDF.Free;
end;
end;
Koderalternativ och backends
- THotPDF.JBIG2Options: Dokumentets
THPDFJBIG2Options, som AddImage(..., icJBIG2) omvandlar till TJBIG2EncodeOptions. Standardvärdena passar skanningar: Lossless=True, LossyLevel=5, RemoveIsolatedBlackPixels=True och BlackDotSize=3
- Prickborttagning: Så länge
RemoveIsolatedBlackPixels är True rensas svarta sammanhängande komponenter vars bredd och höjd båda är mindre än BlackDotSize innan kodningen, så standardinställningarna tar bort prickar på 2 x 2 pixlar och mindre. Sätt den till False när utdata måste matcha bitmappen pixel för pixel
- Val av kodare:
UseExternalEncoder (standardvärdet är True) använder den registrerade högeffektiva aritmetiska kodaren; när den är avslagen, saknas eller misslyckas skrivs den inbyggda förlustfria MMR-generiska regionen i stället. UseNativeArithmeticFallback=True provar den inbyggda Pascal-aritmetikkodaren före MMR, och med UseSymbolDictionary=True provas först en symbolordbok med textregioner
- DefaultJBIG2EncodeOptions: Alternativen som en fristående
THPDFJBIG2Encoder använder: förlustfri, med LossyLevel=0 och utan prickborttagning
- Val av avkodare:
THotPDF.UseExternalJBIG2Decoder (standardvärdet är True) avkodar inlästa /JBIG2Decode-bilder med den högeffektiva backenden när den är tillgänglig; False använder den inbyggda Pascal-avkodaren
- Egna backends:
RegisterJBIG2EncoderBackend och RegisterJBIG2DecoderBackend installerar applikationens callbacks, IsJBIG2EncoderBackendAvailable och IsJBIG2DecoderBackendAvailable rapporterar dem, och ClearJBIG2Backends tar bort dem
Klassreferens
THPDFJBIG2Decoder
- LoadFromByteArray: Läs in JBIG2-data från en bytearray; returnerar False när data är ofullständig eller formatet inte stöds
- GetScanline: Hämta specifika scanline-data
- Width/Height: Egenskaper för bilddimensioner
Prestandaoptimering
- En fast korpus på 100 skannade sidor komprimeras från 158 300 byte med separata generiska regioner till 33 600 byte med extern träning över sidor, en minskning med 78,8 procent
- Samma korpus klaras på 11 ms i stället för 53 ms på Win64 och 16 ms i stället för 77 ms på Win32 i regressionsbenchmarken
- Uppslag från sida till symbol är indexerat, och upprepade kodade sidströmmar cachas för batchextraktion i konstant tid
- Minneseffektiv scanline-bearbetning
- Optimerat för hantering av stora dokument
- Minimalt minnesavtryck under dekomprimering
Standarder och efterlevnad
- Följer ITU-T T.88-standarden
- Stöd för standarden ISO/IEC 14492
- Image XObjects i PDF 1.4 eller senare med
/JBIG2Decode och /JBIG2Globals
- HotPDF skriver inte JBIG2 när PDF/A-utdata är aktiv:
AddImage(..., icJBIG2) skriver icCCITT42 i stället och batchinfogning returnerar False
- Konsekvens mellan plattformar
Se även
|