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