Display lists e produção de impressão

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

A renderização de documentos coloca as listas compiladas em cache, enquanto quem chama pode pedir uma lista da sua propriedade independente, para execução repetida ou consultas regionais de objetos

Intérprete de produção partilhado

O bitmap não progressivo, o DC direto, os Forms e o replay de display lists passam todos o conteúdo pré-atomizado por HPDFInterpretContentTokensDevice, que detém a travessia de operadores e os limites de cancelamento

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

As display lists colocam em cache índices de tokens de operadores enquanto as streams são compiladas e reproduzem apenas esses índices, evitando varrimentos repetidos de operandos; THPDFPageDisplayList.OperatorCount e THPDFDisplayListInfo.OperatorCount expõem a contagem de comandos em cache

Dispositivos semânticos que implementam apenas IHPDFContentDevice mantêm callbacks filtrados por capacidade, enquanto dispositivos completos de operadores recebem um operador validado de cada vez, com um ponto de verificação de cancelamento por operador

Renderização limitada e concorrente

THPDFRenderTileEvent recebe um tile ou uma banda horizontal dimensionado pelo chamador de cada 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, arranca a primeira página pronta sem esperar por uma barreira de compilação completa, equilibra dinamicamente ambos os estágios por workers limitados, e devolve uma THPDFBitmapArray pela ordem de entrada

A compilação corre fora do lock da cache de display lists, enquanto a admissão com dupla verificação e contadores de uso protegidos deixam páginas não relacionadas compilar em concorrência, 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 até ao primeiro resultado, latência do primeiro resultado e tempo total decorrido

RenderLoadedPagesParallelOrdered entrega callbacks pela ordem de entrada, na thread de quem chama, e liberta cada bitmap emprestado depois de o callback regressar, enquanto uma profundidade de saída escolhida pelo chamador aplica backpressure ao produtor e reserva um slot para a próxima página necessária, para que uma página lenta inicial não deixe nada bloqueado 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

Os backends de renderização plugáveis consomem as mesmas listas compiladas através de uma vista de recursos do documento sem propriedade, pelo que os caminhos síncrono e paralelo evitam reanalisar o conteúdo da página, enquanto as capacidades do backend determinam se as chamadas se podem sobrepor ou exigem despacho serial

O agendador de memória de pico partilhado pelo processo limita agora ambas as APIs paralelas: a maior estimativa de página reduz a contagem inicial de workers, cada página reclamada reserva o respetivo conjunto de trabalho estimado completo, e a saída ordenada retém essa reserva até à entrega do callback

O cancelamento do agendador acorda os pedidos em espera por orçamento no cancelamento de um callback ou na falha de um worker, enquanto a telemetria expõe workers pedidos versus efetivos, peso de pico das reservas, páginas atrasadas e tempo de espera agregado

RenderLoadedPageTilesParallel e RenderLoadedPageBandsParallel entregam tiles por linha ou bandas de cima para baixo, emprestados, através de workers isolados, com cada worker a deter no máximo um tile, e um limite de memória de trabalho fornecido pelo chamador reduz a concorrência antes do primeiro claim

Os contextos de renderização paralela copiam sequências de tokens imutáveis de glifos Type 3 e screens de halftone a partir de uma cache LRU limitada, preservando a propriedade local do renderer para o estado gráfico mutável e os recursos GDI

SaveLoadedPageToPng, SaveLoadedPageToPngStream, SaveLoadedPagesToTiffBanded e SaveLoadedPagesToTiffStreamBanded consomem o mesmo renderizador de bandas através de codificadores PNG ou TIFF em streaming, pelo que páginas muito grandes emitem saída comprimida linha a linha, sem reter um framebuffer completo, enquanto THPDFBandImageExportInfo informa bandas renderizadas, linhas codificadas, workers, bytes de pico das reservas, bytes de saída, tempo decorrido e cancelamento

A descodificação partilhada de imagens é coordenada em separado, para que o trabalho vetorial de páginas permaneça paralelo sem corromper entradas da cache de imagens descodificadas

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

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

Transparência e controlos de impressão

O achatamento de transparência verifica primeiro a contagem de transparências da display list e um teto de píxeis definido pelo chamador, e 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 detetadas e o estado de preservação expostos a quem chama

O renderer executa funções de transferência e dicionários de halftone Type 1, 5, 6, 10 ou 16 de ExtGState, preservando screens RGB independentes e as respetivas sobreposições de transferência através de q e Q

THPDFInkCoverageInfo informa a cobertura média CMYK, a cobertura máxima de área total e o número de píxeis acima do limiar selecionado

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

A reescrita de cor de páginas carregadas usa o mesmo renderer completo para converter páginas complexas em Gray, RGB ou CMYK, mantendo o conteúdo de páginas com cores de dispositivo simples como vetores e aplicando uma política explícita de chapas spot

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

Fluxo de trabalho ICC

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

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

As transformações completas são partilhadas pelos caminhos vetorial, de imagem, de página e paralelo, através de uma cache LRU thread-safe de 64 MiB, indexada 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 transformação e depois emite tiles CalRGB D65 sem costuras, sob orçamentos de raster total e de píxeis por tile controlados pelo chamador

APIs primárias