Supporto compressione JBIG2 Supporto compressione JBIG2 Supporto compressione JBIG2

Supporto compressione JBIG2

Panoramica

HotPDF include compressione e decodifica JBIG2 per immagini bi-livello usate da testo scansionato, moduli e line art

Caratteristiche principali

  • Compressione ad alta efficienza per immagini bilevel
  • Supporto sia delle modalità di compressione con perdita sia senza perdita
  • Ottimizzato per la compressione di testo e line art
  • Riduzione significativa delle dimensioni del file rispetto ai metodi di compressione tradizionali
  • Codifica multipagina con un dizionario di simboli addestrato condiviso da ogni Image XObject
  • Rilevamento esatto di pagine duplicate prima della classificazione e riuso degli XObject codificati durante l'assemblaggio del PDF
  • Budget di pagina e pixel limitati con fallback Pascal nativo opzionale

Vantaggi della compressione

  • Riuso tra pagine: I simboli ripetuti vengono classificati una volta e memorizzati in dati globali condivisi
  • Symbol matching: Con UseSymbolDictionary, le componenti nere connesse ripetute vengono memorizzate una volta come simboli, e LossyLevel consente a componenti quasi identiche di condividere uno stesso simbolo
  • Efficiente in memoria: Ottimizzato per elaborare grandi documenti scansionati

Casi d'uso tipici

  • Documenti di testo scansionati
  • Disegni tecnici e blueprint
  • Moduli e fatture
  • Mappe e diagrammi
  • Documenti a contenuto misto con testo e grafica

Implementazione tecnica

L'implementazione JBIG2 fornisce percorsi Pascal nativi e un backend esterno statico opzionale tramite queste API

  • THPDFJBIG2Decoder: Classe decoder principale per dati compressi JBIG2
  • Copertura del coding nativo: regioni generiche MMR, regioni generiche MQ, dizionari di simboli e regioni testo aritmetici e Huffman standard, simboli di raffinamento, simboli aggregati, istanze di testo raffinate, contesti aritmetici trattenuti e tabelle di riferimento long-form limitate
  • Riuso del contesto limitato: Le banche di probabilità generiche e di raffinamento sono trattenute con dimensioni consapevoli del template, isolate tra dipendenze di fan-out e rifiutate quando la loro sorgente o il template è incompatibile
  • Elaborazione degli stream: Gestione efficiente degli stream di dati JBIG2
  • Supporto del dizionario globale: Dizionari di simboli condivisi e concatenati multi-livello con identificatori di segmento a uno, due o quattro byte
  • Encoder batch cross-page: THPDFJBIG2Encoder.EncodePagesToByteArrays addestra su tutto il batch e restituisce uno stream di pagina per input più dati globali condivisi
  • Contratto dei batch: TJBIG2BatchPage descrive una pagina compressa, TJBIG2BatchEncodeBackend identifica l'implementazione selezionata, e TJBIG2BatchEncodeCallback definisce le integrazioni batch esterne
  • Integrazione nel documento: THotPDF.AddJBIG2ImageBatch e THotPDF.AddJBIG2BitmapBatch prima di modificare il grafo PDF, collega un condiviso /JBIG2Globals e restituiscono gli indici immagine nell'ordine di input
  • Telemetria dei batch: TJBIG2BatchEncodeStatistics riporta backend selezionato, dimensioni di input e output, numero di simboli nativi e rifiuti per budget
  • Recupero del backend: HPDFJBIG2EncRegisterBackends ripristina entrambe le callback dell'encoder integrate dopo che gli override temporanei dell'applicazione sono stati ripuliti
  • HPDFJBIG2SplitSymbolDictionaryGlobals: Separa uno stream incorporato sequenziale in dizionari globali e segmenti di immagine di pagina preservando gli header di dipendenza long-form
  • Decodifica della regione visibile: THPDFJBIG2Decoder.LoadRegionFromByteArray alloca solo la finestra richiesta, risolve le sue dipendenze transitive dei dizionari, compone le regioni di pagina intersecanti con clipping e salta le regioni indipendenti fuori finestra prima della decodifica entropica
  • Telemetria di decodifica per regione: LastRegionDecodeStats riporta i conteggi delle regioni decodificate e saltate più i pixel sorgente decodificati, mentre UsedIncrementalRegionDecode distingue il percorso della finestra nativa dal fallback di decodifica completa
  • Accesso alle scanline: Accesso ai dati riga per riga per un'elaborazione efficiente in memoria

Esempio d'uso


// Delphi example - Processing JBIG2 compressed 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;

    // Load JBIG2 compressed image data
    if Decoder.LoadFromByteArray(ImageData) then
    begin
      // Process scanline by scanline for memory efficiency
      for Row := 0 to Decoder.Height - 1 do
      begin
        if Decoder.GetScanline(Row, ScanlineData) then
        begin
          // Process scanline data as needed
          // Add to PDF page
        end;
      end;
    end;

    PDF.EndDoc;
  finally
    Decoder.Free;
    PDF.Free;
  end;
end;
        

Opzioni encoder e backend

  • THotPDF.JBIG2Options: Le THPDFJBIG2Options del documento, che AddImage(..., icJBIG2) converte in TJBIG2EncodeOptions. I default sono pensati per le scansioni: Lossless=True, LossyLevel=5, RemoveIsolatedBlackPixels=True e BlackDotSize=3
  • Rimozione delle macchie: Finché RemoveIsolatedBlackPixels è True, le componenti nere connesse la cui larghezza e altezza sono entrambe minori di BlackDotSize vengono cancellate prima della codifica, quindi i default rimuovono punti di 2 x 2 pixel e più piccoli. Impostala a False quando l'output deve coincidere pixel per pixel con la bitmap
  • Scelta dell'encoder: UseExternalEncoder (default True) usa l'encoder aritmetico ad alte prestazioni registrato; quando è off, manca o fallisce, viene scritta la regione generica MMR lossless incorporata. UseNativeArithmeticFallback=True prova prima il coder aritmetico Pascal incorporato e poi MMR, e con UseSymbolDictionary=True prova prima un dizionario di simboli con regioni testo
  • DefaultJBIG2EncodeOptions: Le opzioni che usa un THPDFJBIG2Encoder autonomo: lossless, con LossyLevel=0 e senza rimozione delle macchie
  • Scelta del decoder: THotPDF.UseExternalJBIG2Decoder (default True) decodifica le immagini /JBIG2Decode caricate con il backend ad alte prestazioni quando è disponibile; False usa il decoder Pascal incorporato
  • Backend personalizzati: RegisterJBIG2EncoderBackend e RegisterJBIG2DecoderBackend installano callback dell'applicazione, IsJBIG2EncoderBackendAvailable e IsJBIG2DecoderBackendAvailable le segnalano, e ClearJBIG2Backends le rimuove

Class Reference

THPDFJBIG2Decoder

  • LoadFromByteArray: Carica dati JBIG2 da un array di byte; restituisce False quando i dati sono incompleti o non supportati
  • GetScanline: Recupera dati di scanline specifici
  • Width/Height: Proprietà delle dimensioni immagine

Ottimizzazione delle prestazioni

  • Un corpus di scansione fisso di 100 pagine si comprime da 158.300 byte con regioni generiche separate a 33.600 byte con addestramento esterno cross-page, una riduzione del 78,8%
  • Lo stesso corpus completa in 11 ms invece di 53 ms su Win64 e 16 ms invece di 77 ms su Win32 nel benchmark di regressione
  • Il lookup pagina→simbolo è indicizzato e gli stream di pagina codificati ripetuti sono messi in cache per estrazione batch a tempo costante
  • Elaborazione scanline efficiente in memoria
  • Ottimizzato per la gestione di documenti grandi
  • Footprint di memoria minimo durante la decompressione

Conformità agli standard

  • conformità allo standard ITU-T T.88
  • supporto dello standard ISO/IEC 14492
  • XObject immagine PDF 1.4 o successivi con /JBIG2Decode e /JBIG2Globals
  • HotPDF non scrive JBIG2 mentre l'output PDF/A è attivo: AddImage(..., icJBIG2) scrive icCCITT42 al suo posto e l'inserimento batch restituisce False
  • Coerenza cross-platform

Vedi anche: