Soporte de compresión JBIG2

Visión general

HotPDF incluye compresión y decodificación JBIG2 para imágenes bilevel usadas por texto escaneado, formularios y line art

Características principales

  • Compresión de alta eficiencia para imágenes bilevel
  • Soporte de modos de compresión con y sin pérdida
  • Optimizado para la compresión de texto y arte lineal
  • Reducción significativa del tamaño de archivo frente a los métodos de compresión tradicionales
  • Codificación multipágina con un único diccionario de símbolos entrenado compartido por cada XObject de imagen
  • Detección exacta de páginas duplicadas antes de la clasificación y reutilización de XObjects codificados durante el ensamblado del PDF
  • Presupuestos acotados de páginas y píxeles con respaldo nativo Pascal opcional

Ventajas de compresión

  • Reutilización entre páginas: los símbolos repetidos se clasifican una vez y se almacenan en datos globales compartidos
  • Symbol matching: con UseSymbolDictionary, los componentes conexos negros repetidos se almacenan una vez como símbolos, y LossyLevel permite que los componentes casi idénticos compartan un mismo símbolo
  • Memory Efficient: optimizado para procesar documentos escaneados grandes

Casos de uso típicos

  • Documentos de texto escaneados
  • Planos técnicos y blueprints
  • Formularios y facturas
  • Mapas y diagramas
  • Documentos de contenido mixto con texto y gráficos

Implementación técnica

La implementación JBIG2 proporciona rutas Pascal nativas y un backend estático externo opcional mediante estas APIs

  • THPDFJBIG2Decoder: clase de decodificación principal para datos comprimidos JBIG2
  • Cobertura de codificación nativa: regiones genéricas MMR, regiones genéricas MQ, diccionarios de símbolos y regiones de texto aritméticos y de estándar-Huffman, símbolos de refinement, símbolos agregados, instancias de texto refinadas, contextos aritméticos retenidos y tablas de referencia de forma larga acotadas
  • Reutilización acotada de contextos: los bancos de probabilidad genéricos y de refinement se retienen con tamaños conscientes de la plantilla, se aíslan entre dependencias de fan-out y se rechazan cuando su origen o plantilla es incompatible
  • Procesado de streams: manejo eficiente de streams de datos JBIG2
  • Soporte de diccionario global: diccionarios de símbolos compartidos y encadenados multinivel con identificadores de segmento de uno, dos o cuatro bytes
  • Codificador de lotes entre páginas: THPDFJBIG2Encoder.EncodePagesToByteArrays entrena sobre el lote completo y devuelve un stream de página por entrada más datos globales compartidos
  • Contrato de lote: TJBIG2BatchPage describe una página empaquetada, TJBIG2BatchEncodeBackend identifica la implementación seleccionada y TJBIG2BatchEncodeCallback define las integraciones de lote externas
  • Integración con documentos: THotPDF.AddJBIG2ImageBatch y THotPDF.AddJBIG2BitmapBatch codifican antes de mutar el grafo PDF, adjuntan un stream /JBIG2Globals compartido y devuelven índices de imagen en orden de entrada
  • Telemetría de lote: TJBIG2BatchEncodeStatistics informa del backend seleccionado, tamaños de entrada y salida, recuento de símbolos nativos y rechazos por presupuesto
  • Recuperación de backend: HPDFJBIG2EncRegisterBackends restaura ambos callbacks de codificador integrados después de limpiar las sobrescrituras temporales de la aplicación
  • HPDFJBIG2SplitSymbolDictionaryGlobals: separa un stream incrustado secuencial en diccionarios globales y segmentos de imagen de página preservando las cabeceras de dependencia de forma larga
  • Decodificación de región visible: THPDFJBIG2Decoder.LoadRegionFromByteArray asigna solo la ventana solicitada, resuelve sus dependencias transitivas de diccionario, compone las regiones de página que se cruzan con recorte y omite las regiones independientes fuera de ventana antes de la decodificación de entropía
  • Telemetría de decodificación de región: LastRegionDecodeStats informa de recuentos de regiones decodificadas y omitidas más píxeles de origen decodificados, mientras UsedIncrementalRegionDecode distingue la ruta de ventana nativa del fallback de decodificación completa
  • Acceso por scanlines: acceso a datos fila a fila para un procesado eficiente en memoria

Ejemplo de 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;
        

Opciones del codificador y backends

  • THotPDF.JBIG2Options: el THPDFJBIG2Options del documento, que AddImage(..., icJBIG2) convierte en TJBIG2EncodeOptions. Sus valores por defecto van bien para escaneos: Lossless=True, LossyLevel=5, RemoveIsolatedBlackPixels=True y BlackDotSize=3
  • Eliminación de motas: mientras RemoveIsolatedBlackPixels es True, los componentes conexos negros cuyo ancho y alto son menores que BlackDotSize se limpian antes de codificar, así que los valores por defecto eliminan motas de 2 x 2 píxeles o menores. Póngalo a False cuando la salida deba coincidir píxel a píxel con el bitmap
  • Elección de codificador: UseExternalEncoder (True por defecto) usa el codificador aritmético de alto rendimiento registrado; si está apagado, falta o falla, se escribe la región genérica MMR sin pérdida integrada. UseNativeArithmeticFallback=True prueba el codificador aritmético Pascal integrado antes que MMR y, con UseSymbolDictionary=True, prueba primero un diccionario de símbolos con regiones de texto
  • DefaultJBIG2EncodeOptions: las opciones que usa un THPDFJBIG2Encoder independiente: sin pérdida, con LossyLevel=0 y sin eliminación de motas
  • Elección de decodificador: THotPDF.UseExternalJBIG2Decoder (True por defecto) decodifica imágenes /JBIG2Decode cargadas con el backend de alto rendimiento cuando está disponible; False usa el decodificador Pascal integrado
  • Backends personalizados: RegisterJBIG2EncoderBackend y RegisterJBIG2DecoderBackend instalan callbacks de la aplicación, IsJBIG2EncoderBackendAvailable y IsJBIG2DecoderBackendAvailable los informan y ClearJBIG2Backends los elimina

Referencia de clases

THPDFJBIG2Decoder

  • LoadFromByteArray: carga de datos JBIG2 desde un byte array; devuelve False cuando los datos están incompletos o no son soportados
  • GetScanline: obtención de datos de una scanline concreta
  • Width/Height: propiedades de dimensiones de la imagen

Optimización de rendimiento

  • Un corpus fijo de escaneos de 100 páginas se comprime de 158.300 bytes con regiones genéricas separadas a 33.600 bytes con entrenamiento cruzado externo entre páginas, una reducción del 78,8 por ciento
  • El mismo corpus completa en 11 ms en lugar de 53 ms en Win64 y 16 ms en lugar de 77 ms en Win32 en el benchmark de regresión
  • La búsqueda página-a-símbolo está indexada y los streams de páginas codificadas repetidas se cachean para extracción por lotes en tiempo constante
  • Procesado por scanlines eficiente en memoria
  • Optimizado para el manejo de documentos grandes
  • Huella de memoria mínima durante la descompresión

Conformidad con estándares

  • Conformidad con el estándar ITU-T T.88
  • Soporte del estándar ISO/IEC 14492
  • Image XObjects PDF 1.4 o posterior con /JBIG2Decode y /JBIG2Globals
  • HotPDF no escribe JBIG2 mientras la salida PDF/A está activa: AddImage(..., icJBIG2) escribe icCCITT42 en su lugar y la inserción por lotes devuelve False
  • Consistencia entre plataformas

Véase también