|
JBIG2 Compression Support
Visão geral
O HotPDF inclui compressão e decodificação JBIG2 para imagens bilevel usadas por texto escaneado, formulários e line art
Key Features
- Compressão de alta eficiência para imagens bilevel
- Suporte aos modos de compressão com e sem perdas
- Otimizado para compressão de texto e line art
- Redução significativa de tamanho de arquivo comparado aos métodos tradicionais de compressão
- Codificação multi-página com um único dicionário de símbolos treinado compartilhado por todo Image XObject
- Detecção exata de páginas duplicadas antes da classificação e reutilização de XObjects codificados durante a montagem do PDF
- Orçamentos limitados de páginas e pixels com fallback nativo opcional em Pascal
Compression Benefits
- Cross-page reuse: Símbolos repetidos são classificados uma única vez e armazenados em dados globais compartilhados
- Symbol matching: Com
UseSymbolDictionary, componentes conexos pretos repetidos são armazenados uma única vez como símbolos, e LossyLevel permite que componentes quase idênticos compartilhem um símbolo
- Memory Efficient: Otimizado para processar documentos escaneados grandes
Typical Use Cases
- Documentos de texto escaneados
- Desenhos técnicos e plantas
- Formulários e faturas
- Mapas e diagramas
- Documentos de conteúdo misto com texto e gráficos
Technical Implementation
A implementação JBIG2 fornece caminhos nativos em Pascal e um backend estático externo opcional por meio destas APIs
- THPDFJBIG2Decoder: Classe central de decodificação para dados comprimidos JBIG2
- Native Coding Coverage: Regiões genéricas MMR, regiões genéricas MQ, dicionários de símbolos e regiões de texto aritméticos e standard-Huffman, símbolos de refinamento, símbolos agregados, instâncias de texto refinadas, contextos aritméticos retidos e tabelas limitadas de referências longas
- Bounded Context Reuse: Bancos de probabilidade genéricos e de refinamento são retidos com tamanhos conscientes do template, isolados entre dependências de fan-out e rejeitados quando a origem ou o template é incompatível
- Stream Processing: Tratamento eficiente de streams de dados JBIG2
- Global Dictionary Support: Dicionários de símbolos compartilhados e encadeados em múltiplos níveis com identificadores de segmento de um, dois ou quatro bytes
- Cross-page batch encoder:
THPDFJBIG2Encoder.EncodePagesToByteArrays treina pelo lote completo e retorna um stream de página por entrada mais dados globais compartilhados
- Batch contract:
TJBIG2BatchPage descreve uma página empacotada, TJBIG2BatchEncodeBackend identifica a implementação selecionada e TJBIG2BatchEncodeCallback define integrações externas de lote
- Document integration:
THotPDF.AddJBIG2ImageBatch e THotPDF.AddJBIG2BitmapBatch codificam antes de mutar o grafo PDF, anexam um stream /JBIG2Globals compartilhado e retornam índices de imagem na ordem de entrada
- Batch telemetry:
TJBIG2BatchEncodeStatistics reporta o backend selecionado, tamanhos de entrada e saída, contagem de símbolos nativos e rejeição por orçamento
- Backend recovery:
HPDFJBIG2EncRegisterBackends restaura os dois callbacks de codificação embutidos depois que sobrescritas temporárias da aplicação são limpas
- HPDFJBIG2SplitSymbolDictionaryGlobals: Separa um stream embutido sequencial em dicionários globais e segmentos de imagem de página, preservando os headers de dependências longas
- Visible-Region Decode:
THPDFJBIG2Decoder.LoadRegionFromByteArray aloca apenas a janela solicitada, resolve as dependências transitivas de dicionários, compõe regiões de página que se intersectam com clipping e pula regiões independentes fora da janela antes da decodificação de entropia
- Region Decode Telemetry:
LastRegionDecodeStats reporta contagens de regiões decodificadas e puladas mais pixels de origem decodificados, enquanto UsedIncrementalRegionDecode distingue o caminho nativo de janela do fallback de decodificação completa
- Scanline Access: Acesso aos dados linha a linha para processamento eficiente em memória
Usage Example
// 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;
Encoder Options and Backends
- THotPDF.JBIG2Options: O
THPDFJBIG2Options do documento, que AddImage(..., icJBIG2) converte em TJBIG2EncodeOptions. Os padrões dele servem para digitalizações: Lossless=True, LossyLevel=5, RemoveIsolatedBlackPixels=True e BlackDotSize=3
- Remoção de speckles: Enquanto
RemoveIsolatedBlackPixels é True, componentes conexos pretos cujos largura e altura são ambos menores que BlackDotSize são limpos antes da codificação, de modo que os padrões removem pontos de 2 x 2 pixels e menores. Defina False quando a saída precisa corresponder ao bitmap pixel a pixel
- Escolha do encoder:
UseExternalEncoder (padrão True) usa o encoder aritmético de alto desempenho registrado; quando ele está desligado, ausente ou falha, a região genérica MMR sem perdas embutida é gravada. UseNativeArithmeticFallback=True tenta o coder aritmético Pascal embutido antes do MMR, e com UseSymbolDictionary=True ele primeiro tenta um dicionário de símbolos com text regions
- DefaultJBIG2EncodeOptions: As opções que um
THPDFJBIG2Encoder autônomo usa: sem perdas, com LossyLevel=0 e sem remoção de speckles
- Escolha do decoder:
THotPDF.UseExternalJBIG2Decoder (padrão True) decodifica imagens /JBIG2Decode carregadas com o backend de alto desempenho quando ele está disponível; False usa o decoder Pascal embutido
- Backends personalizados:
RegisterJBIG2EncoderBackend e RegisterJBIG2DecoderBackend instalam callbacks da aplicação, IsJBIG2EncoderBackendAvailable e IsJBIG2DecoderBackendAvailable os reportam, e ClearJBIG2Backends os remove
Class Reference
THPDFJBIG2Decoder
- LoadFromByteArray: Carrega dados JBIG2 de um array de bytes; retorna False quando os dados estão incompletos ou não são suportados
- GetScanline: Recupera dados de uma scanline específica
- Width/Height: Propriedades de dimensões da imagem
Performance Optimization
- Um corpus fixo de scan de 100 páginas comprime de 158.300 bytes com regiões genéricas separadas para 33.600 bytes com treinamento externo entre páginas — uma redução de 78,8%
- O mesmo corpus conclui em 11 ms em vez de 53 ms no Win64 e 16 ms em vez de 77 ms no Win32 no benchmark de regressão
- A consulta página-para-símbolo é indexada e streams de páginas codificadas repetidas ficam em cache para extração de lote em tempo constante
- Processamento de scanlines eficiente em memória
- Otimizado para lidar com documentos grandes
- Pegada mínima de memória durante a descompressão
Standards Compliance
- Conformidade com o padrão ITU-T T.88
- Suporte ao padrão ISO/IEC 14492
- Image XObjects de PDF 1.4 ou mais novo com
/JBIG2Decode e /JBIG2Globals
- O HotPDF não grava JBIG2 enquanto a saída PDF/A está ativa:
AddImage(..., icJBIG2) grava icCCITT42 em vez disso, e a inserção em lote retorna False
- Consistência entre plataformas
See Also
|