Display Lists and Print Production

O HotPDF compila streams de páginas carregadas em instâncias reutilizáveis de THPDFPageDisplayList com métricas de THPDFDisplayListInfo e bounding boxes de objetos de conteúdo

A renderização de documentos cacheia listas compiladas, enquanto chamadores podem requisitar uma lista de posse independente para execução repetida ou consultas regionais de objetos

Intérprete de produção compartilhado

Bitmap não progressivo, direct-DC, replay de Form e display list passam conteúdo pré-tokenizado por HPDFInterpretContentTokensDevice, que é dono da travessia de operadores e das fronteiras de cancelamento

THPDFPageRenderer implementa IHPDFContentOperatorDevice, de modo que a travessia compartilhada invoca a máquina de estados completa dele de gráficos, texto, recursos, clipping, padrões, transparência, marked content e imagens, sem reduzir a renderização de produção à superfície menor de callbacks semânticos

Display lists cacheiam índices de tokens de operadores enquanto os streams são compilados e reproduzem apenas esses índices, evitando scans repetidos de operandos; THPDFPageDisplayList.OperatorCount e THPDFDisplayListInfo.OperatorCount expõem a contagem de comandos em cache

Dispositivos semânticos que implementam apenas IHPDFContentDevice retêm callbacks filtrados por capacidade, enquanto dispositivos completos de operadores recebem um operador validado por vez com um checkpoint de cancelamento por operador

Renderização limitada e concorrente

THPDFRenderTileEvent recebe um tile ou banda horizontal de tamanho definido pelo chamador por vez, mantendo a memória de pico do raster independente do tamanho total da página

RenderLoadedPagesParallel sobrepõe a compilação de display lists à reprodução, inicia a primeira página pronta sem esperar por uma barreira completa de compilação, balanceia dinamicamente os dois estágios entre workers limitados e retorna um THPDFBitmapArray na ordem de entrada

A compilação roda fora do lock do cache de display lists, enquanto admissão com dupla checagem e contagens de uso protegidas permitem que páginas não relacionadas compilem concorrentemente sem duplicar entradas publicadas nem despejar uma lista durante a reprodução

THPDFParallelRenderPipelineInfo expõe acertos de cache, compilações, conclusões, concorrência de pico de compilação e renderização, páginas compiladas no primeiro resultado, latência do primeiro resultado e tempo total decorrido

RenderLoadedPagesParallelOrdered entrega callbacks na ordem de entrada na thread chamadora e libera cada bitmap emprestado depois que o callback retorna, enquanto uma profundidade de saída escolhida pelo chamador aplica backpressure ao produtor e reserva um slot para a próxima página exigida, de modo que uma página lenta no início não possa entrar em deadlock atrás de resultados posteriores

O streaming ordenado retém no máximo uma display list e uma renderização ativa por worker, mais a fila limitada de bitmaps concluídos, em vez de manter residente toda a saída do trabalho

Pluggable render backends consomem as mesmas listas compiladas por meio de uma visão de recursos do documento sem posse, de modo que os caminhos síncrono e paralelo evitem reparsear conteúdo de página, enquanto as capacidades do backend determinam se as chamadas podem se sobrepor ou exigem despacho serial

O scheduler de memória de pico no escopo do processo agora limita as duas APIs paralelas: a maior estimativa de página reduz a contagem inicial de workers, cada página reivindicada reserva seu conjunto de trabalho estimado completo, e a saída ordenada retém essa reserva até a entrega dos callbacks

O cancelamento do scheduler acorda os que esperam por orçamento no cancelamento de callback ou falha de worker, enquanto a telemetria expõe workers solicitados versus efetivos, peso de reserva de pico, páginas atrasadas e tempo total de espera

RenderLoadedPageTilesParallel e RenderLoadedPageBandsParallel entregam tiles emprestados em ordem de linha ou bandas de cima para baixo entre workers isolados, enquanto cada worker é dono de no máximo um tile e um teto de memória de trabalho fornecido pelo chamador reduz a concorrência antes da primeira reivindicação

Contextos de renderização paralela copiam sequências imutáveis de tokens de glifos Type 3 e telas de threshold de halftone de um cache LRU limitado, preservando a posse local do renderizador para graphics state mutável e recursos GDI

SaveLoadedPageToPng, SaveLoadedPageToPngStream, SaveLoadedPagesToTiffBanded e SaveLoadedPagesToTiffStreamBanded consomem o mesmo renderizador de bandas por meio de encoders de streaming PNG ou TIFF, de modo que páginas muito grandes emitem saída comprimida linha a linha sem reter um framebuffer completo, enquanto THPDFBandImageExportInfo reporta bandas renderizadas, linhas codificadas, workers, bytes de reserva de pico, bytes de saída, tempo decorrido e cancelamento

A decodificação compartilhada de imagens é coordenada separadamente para que o trabalho vetorial de páginas permaneça paralelo sem corromper entradas do cache de imagens decodificadas

PrefetchLoadedPages aquece entradas de raster com um token de cancelamento dedicado enquanto compila e renderiza fora do lock do cache, e a renderização de páginas em primeiro plano preempta o worker antes de iniciar trabalho sensível à latência

THPDFLoadedPagePrefetchInfo reporta trabalho agendado, iniciado, concluído, em cache, renderizado, falho, cancelado e preemptado em primeiro plano, junto com a latência de cancelamento última e de pico

Controles de transparência e impressão

O achatamento de transparência primeiro checa a contagem de transparências da display list e um teto de pixels definido pelo chamador, depois substitui a pintura da página por uma imagem RGB calibrada comprimida com Flate sem perdas

Páginas com colorantes Separation ou DeviceN permanecem como conteúdo vetorial, com as colorantes detectadas e o status de preservação expostos ao chamador

O renderizador executa funções de transferência e dicionários de halftone Type 1, 5, 6, 10 ou 16 do ExtGState, preservando telas RGB independentes e suas sobreposições de transferência por meio de q e Q

THPDFInkCoverageInfo reporta a cobertura CMYK média, a cobertura máxima de área total e o número de pixels acima do limite selecionado

A saída de chapas de processo e spot suporta colorantes DeviceCMYK, Separation e DeviceN

Loaded-page colour rewrite uses the same complete renderer to convert complex pages to Gray, RGB, or CMYK while retaining simple device-colour page content as vectors and applying an explicit spot-plate policy

THPDFTrappingInfo combina declarações de trapping do documento, metadados de página e diagnósticos estruturais de TrapNet

Fluxo de trabalho ICC

A transform de renderização pode combinar um perfil de origem PDF, espaço de cor de blend, perfil de proof, perfil de saída e destino raster sRGB

Os quatro rendering intents do ICC e a compensação de ponto preto verdadeira são aplicados de forma consistente a cores vetoriais e amostras de imagem em todo o pipeline

Transforms completas são compartilhadas entre os caminhos de renderização vetorial, de imagem, de página e paralela por meio de um cache LRU thread-safe de 64 MiB chaveado pelo conteúdo dos perfis de origem, proof e saída, pelo rendering intent efetivo e pela compensação de ponto preto

O achatamento de transparência reutiliza o mesmo pipeline de transform e depois emite tiles CalRGB D65 sem emendas sob orçamentos controlados pelo chamador de raster total e de pixels por tile

Primary APIs