PDF Filter Support

Visão geral

Streams PDF e imagens embutidas identificam sua codificação por meio de nomes de filtros. O HotPDF trabalha principalmente com as seguintes famílias de filtros ao gerar documentos ou decodificar conteúdo externo.

Common Filters

  • FlateDecode: Filtro principal de compressão para streams gerados e o caminho primário de descompressão baseado em zlib
  • LZWDecode: Suportado para cenários legados e de compatibilidade por meio de HPDFLZW.pas
  • DCTDecode: Usado para dados de imagem JPEG padrão tratados pelos caminhos de carregamento de imagens do HotPDF
  • CCITTFaxDecode: Streams de imagens monocromáticas Group 3 e Group 4 carregados suportam linhas unidimensionais e bidimensionais, extensões não comprimidas T.4/T.6, tratamento de EOFB, alinhamento de bytes, polaridade de saída e recuperação limitada de linhas danificadas por meio das entradas padrão de DecodeParms
  • ASCIIHexDecode / ASCII85Decode / RunLengthDecode: Helpers de codificação expostos em HPDFTypes.pas (_ASCIIHexEncode, _ASCII85Encode, _RunLengthEncode) desde o HotPDF v2.4.0. Úteis ao encapsular conteúdo binário arbitrário para canais de 7 bits ou para suporte explícito de ida e volta do PDF 1.7 7.4
  • JBIG2Decode / JPXDecode: Nomes de filtros definidos pelo PDF 1.7 7.4.7 / 7.4.9. O HotPDF roteia streams de imagens JPXDecode e arquivos JPEG 2000 pelo decodificador JPEG2000 respaldado no OpenJPEG e depois embute o resultado com a compressão selecionada pelo chamador. A saída JBIG2 bilevel e os caminhos de imagens JBIG2Decode carregadas usam o pipeline nativo de codificador e decodificador JBIG2, incluindo controles de dicionário de símbolos, segmento global, nível com perdas e filtragem de pontos pretos

Practical Notes

  • Nem todo filtro é exposto por uma única API genérica; alguns são acessados por units auxiliares dedicadas de imagem ou de stream
  • Para conteúdo PDF gerado, THotPDF.Compression permanece a configuração central voltada ao usuário
  • Ao carregar dados externos, o filtro aplicável depende do formato do arquivo de origem e da classe auxiliar em uso
  • PDFs criptografados combinam esses filtros com o security handler; veja CryptKeyLength para as opções suportadas de AES‑128 (V=4 R=4 / CFM=AESV2) e RC4 (V=1/V=2)
  • Políticas reservadas de crypt filters podem ser selecionadas independentemente para strings, streams normais e streams de arquivos embutidos por meio de ConfigureCryptFilterDefaults. A segurança por senha aceita StdCF ou Identity, enquanto a segurança de chave pública aceita DefaultCryptFilter ou Identity. SetStreamCryptFilter adiciona ou limpa um filtro inicial explícito de Crypt sem perturbar um pipeline de decodificação existente. Sobrescritas por stream exigem /V 4 ou mais novo no dicionário de criptografia
  • Encrypted payload wrappers mantêm os streams comuns de páginas visíveis enquanto protege metadados e bytes de arquivos embutidos por meio de um crypt filter de EFOpen, com APIs explícitas de inspeção e desbloqueio de documentos carregados disponíveis desde o HotPDF v2.715.0
  • Streams de anexos protegidos por senha usam /EFF e recebem um filtro explícito de Crypt sempre que /EFF difere de /StmF. Filtros explícitos de stream criptografados por chave pública falham fechados, porque exigem um envelope de destinatário específico do stream
  • Documentos carregados expõem a política original de /CF, /StrF, /StmF e /EFF, incluindo filtros nomeados externos sensíveis a maiúsculas, /CFM /None explícito ou omitido, eventos de autenticação e comprimento efetivo de chave por meio de THPDFCryptFilterInfo. Comprimentos de filtros V2 do standard handler são lidos em bytes, comprimentos de filtros V2 de chave pública são lidos em bits, e apenas chaves V2 de 40 e 128 bits são aceitas. Contêineres de object streams em plaintext ainda descriptografam strings de membros empacotados por meio de /StrF, enquanto contêineres criptografados evitam uma segunda descriptografia de membro. Atualizações incrementais retêm a política carregada. Disponível desde o HotPDF v2.675.0
  • Campos de formulários interativos são emitidos como anotações Widget que o viewer pinta; veja AcroForm Support
  • Anotações de marcação de texto (Highlight, Underline, Squiggly, StrikeOut) e links de salto dentro do documento (GoTo, GoToR, Launch) são expostos como novos métodos THPDFPage.Add*Annotation / AddGoToLink / AddGoToRLink / AddLaunchLink desde o HotPDF v2.6.0
  • A saída DeviceCMYK está disponível por meio de THPDFPage.SetCMYKColor / SetCMYKFillColor / SetCMYKStrokeColor; espaços de cor gerenciados por ICC são registrados com THotPDF.RegisterICCProfile e aplicados via SetFillColorSpace / SetStrokeColorSpace + SetFillColor / SetStrokeColor desde o HotPDF v2.7.0
  • Defina THotPDF.UseXRefStream como true antes de salvar para emitir um único cross-reference stream /Type /XRef comprimido com FlateDecode, no lugar da sequência textual xref / trailer / startxref (PDF 1.7 7.5.8); disponível desde o HotPDF v2.8.0
  • Defina THotPDF.EnableXMPMetadata como true para anexar ao Catalog um stream XMP /Type /Metadata /Subtype /XML (PDF 1.7 14.3.2); ele é montado automaticamente a partir dos campos do dicionário Info, ou você pode fornecer um pacote escrito à mão via CustomXMP. Disponível desde o HotPDF v2.9.0
  • Gating de versão de PDF por método (desde o HotPDF v2.24.0). Todo método de feature introduzido na v2.4.0+ consulta RequirePDFVersion antes de emitir; com StrictVersionLock=false (o padrão), o Version do documento é promovido automaticamente em silêncio ao mínimo que a feature exige, e com StrictVersionLock=true a chamada é recusada, de modo que o arquivo salvo esteja estritamente em conformidade com a spec de referência escolhida 1.3 / 1.4 / 1.5 / 1.6 / 1.7.
  • Codificadores de predictors PNG e TIFF para dados de imagem comprimidos com FlateDecode (PDF 1.7 7.4.4.4): _PNGPredictorEncode aplica a heurística de filtro de diferença absoluta mínima do libpng (Predictor=15), _TIFFPredictor2Encode aplica diferenciação horizontal (Predictor=2). Disponível desde o HotPDF v2.10.0
  • Pontos de entrada de tagged PDF (PDF 1.7 14.7-14.8): THotPDF.Lang popula /Lang no Catalog, EnableTaggedPDF emite /MarkInfo <</Marked true>> e um /StructTreeRoot stub, e os novos métodos THPDFPage.BeginMarkedContent / BeginMarkedContentMCID / EndMarkedContent gravam os operadores de content stream BMC / BDC / EMC. Disponível desde o HotPDF v2.11.0
  • Gradientes axiais e radiais (PDF 1.7 7.10 / 8.7): THotPDF.RegisterAxialGradient / RegisterRadialGradient constroem a stack completa de Function Type 2 / Shading Type 2-3 / Pattern Type 2 e retornam um nome de padrão estável; THPDFPage.SetFillPattern / SetStrokePattern instalam-na na página. A contagem de componentes da cor inicial / final seleciona DeviceGray (1) / DeviceRGB (3) / DeviceCMYK (4). Disponível desde o HotPDF v2.13.0; gradientes multi-stop de Function Type 3 são expostos por RegisterMultiStopAxialGradient desde a v2.18.0 e por RegisterMultiStopRadialGradient desde a v2.686.0
  • Imagens inline (PDF 1.7 8.9.7) via THPDFPage.DrawInlineImage; bytes brutos são automaticamente encapsulados com ASCIIHex quando nenhum Filter é fornecido, para que o content stream permaneça 7-bit-clean. Disponível desde o HotPDF v2.18.0
  • OutputIntents (PDF 1.7 14.11) via THotPDF.AddOutputIntent; cada chamada anexa um dict /Type /OutputIntent ao Catalog com /DestOutputProfile opcional referenciando um perfil ICC registrado. Disponível desde o HotPDF v2.18.0
  • Geração automática de appearance streams de AcroForm (PDF 1.7 12.5.5 / 12.7.3.3 / 8.10): defina THotPDF.AutoFormAppearances como true antes de adicionar campos de formulário interativos e o HotPDF pré-construirá um Form XObject de /Subtype /Form para a entrada /AP /N de cada widget (sub-dicts Yes / Off para botões), populará os recursos padrão de /DR do AcroForm com dicts de fontes indiretas Helvetica / ZapfDingbats e mudará /NeedAppearances para false, para que os renderizadores honrem os streams embutidos. Disponível desde o HotPDF v2.28.0
  • ViewerPreferences /ViewArea e /ViewClip (PDF 1.4 12.2 Table 152) agora são expostos pelas propriedades THotPDF.ViewArea / THotPDF.ViewClip (com os membros de set correspondentes vpViewArea / vpViewClip). Ambos aceitam os valores de THPDFPageBoundary (MediaBox / CropBox / BleedBox / TrimBox / ArtBox) e completam a cobertura do HotPDF dos quatro ViewerPreferences de limite de página do PDF 1.4. Disponível desde o HotPDF v2.29.0
  • Transições de página (PDF 1.1 / 1.5 12.4.4): THPDFPage.SetPageTransition grava um dicionário /Trans na página, para que leitores PDF em /PageMode /FullScreen animem a navegação. Os estilos do PDF 1.1 (Split, Blinds, Box, Wipe, Dissolve, Glitter, R) e do PDF 1.5 (Fly, Push, Cover, Uncover, Fade) são expostos pela enumeração THPDFTransitionStyle; as sub-opções complementares /Dm, /M e /Di também são expostas. THPDFPage.SetPageDuration grava o atraso /Dur de avanço automático em segundos. Disponível desde o HotPDF v2.30.0
  • Transparency group no nível de página (PDF 1.4 11.6.6 / 7.5.5): THPDFPage.SetTransparencyGroup anexa um dicionário /Group (/Type /Group /S /Transparency) para que os renderizadores componham conteúdo com alfa de forma previsível. Escolha um espaço de cor de dispositivo pela enumeração THPDFGroupColorSpace (DeviceGray / DeviceRGB / DeviceCMYK ou omita), ou chame THPDFPage.SetTransparencyGroupICC com o nome de um perfil ICC registrado anteriormente por THotPDF.RegisterICCProfile. As flags opcionais /I (Isolated) e /K (Knockout) guiam o compositor; THPDFPage.ClearTransparencyGroup remove uma entrada anexada anteriormente. Disponível desde o HotPDF v2.32.0
  • Atualização incremental (PDF 1.7 ISO 32000-1 7.5.6): THotPDF.BeginIncrementalUpdate(SourceFile) carrega um PDF existente em modo append-only; chamadas subsequentes de CreateIndirect* marcam automaticamente novos objetos como dirty, e THotPDF.MarkDirty(Obj) marca objetos carregados preexistentes para reemissão. THotPDF.SaveIncrementalUpdate(TargetFile) grava os bytes de origem originais verbatim, anexa apenas objetos dirty com os números de objeto deles preservados, emite uma nova subseção de xref e termina com um trailer carregando /Prev apontando para o xref anterior. Combine com o pipeline existente de AddSignedSignatureField + PreparePDFForSigning + InsertSignatureHex para adicionar campos de assinatura posteriores a um documento já assinado sem invalidar assinaturas anteriores (os digests de /ByteRange delas permanecem válidos porque nenhum byte original muta). Disponível desde o HotPDF v2.35.0
  • Normalização de nomes de fontes TrueType embutidas: o HotPDF lê a tabela de nomes da TrueType embutida e alinha /BaseFont, /FontDescriptor /FontName, /FontFamily e os nomes de fontes CID descendentes com o nome PostScript do programa de fonte. Isso evita falhas do Font Capture do Adobe Acrobat causadas por incompatibilidade entre o dicionário de fonte do PDF e o payload TTF embutido. Disponível desde o HotPDF v2.35.1
  • Subsetting de fontes TrueType (PDF 1.7 ISO 32000-1 9.6.4 / 9.8.2): defina THotPDF.EnableFontSubsetting como true antes de BeginDoc e o HotPDF reconstruirá o payload TrueType embutido para conter apenas os glifos realmente usados pelo documento. Documentos latinos típicos veem redução de ~90% no peso da fonte embutida (Arial de 1 MB -> ~70 KB em um "Hello, world." de uma linha). Dependências de glifos compostos são rastreadas recursivamente, a numeração de GIDs é preservada (de modo que streams de conteúdo Type0 / Identity-H existentes continuem funcionando), e o novo /BaseFont ganha automaticamente o prefixo de seis letras com "+" exigido pela spec (ex.: /BaseFont /AAAAAA+ArialMT). Desligado por padrão; habilite opt-in para manter o embutimento de fonte completa em fluxos de edição. Disponível desde o HotPDF v2.36.0
  • Subsetter de Compact Font Format (CFF) (PDF 1.7 ISO 32000-1 9.7.4 / 9.9): companheiro do subsetter TrueType para fontes OpenType-CFF (.otf, sfntVersion OTTO) e Type 1 / Type 1C. A função HPDFSubsetCFF(CFFBytes, KeepGlyph) exportada pela unidade reconstrói o CharStrings INDEX com os glifos não mantidos substituídos pelo stub mínimo de 1 byte de endchar, preservando a numeração de GIDs byte a byte. Disponível desde o HotPDF v2.37.0.
  • Caminho de embutimento OpenType-CFF (.otf) ligado em StoreFont (PDF 1.6+ 9.7.4 Table 117). Quando o binário da fonte carregada pelo GDI é um contêiner sfnt OTTO, o HotPDF faz o subset da sub-tabela 'CFF ' embutida por meio de HPDFSubsetOTFContainer, emite o programa de fonte via /FontFile3 /Subtype /OpenType e grava o dicionário de fonte descendente com /Subtype /CIDFontType0 em vez de /CIDFontType2. Fontes TrueType continuam pelo caminho existente de /FontFile2 + /CIDFontType2 sem mudança de comportamento. Disponível desde o HotPDF v2.38.0.
  • Subsetting de subrotinas CFF de ponta a ponta (PDF 1.7 9.7.4 §6 / Adobe Tech Note #5177 §3.1): o subsetter CFF agora remove entradas não usadas tanto do Global Subr INDEX (localizado imediatamente após o String INDEX no binário CFF) quanto do Local Subr INDEX (aninhado sob o Private DICT, alcançado pelo operador 18 do Top DICT + operador 19 do Private DICT). Um único fechamento de ponto fixo segue cadeias de callsubr (op 0x0A) E de callgsubr (op 0x1D) transitivamente, de modo que um CharString que chama um Local Subr que chama um Global Subr que chama outro Local Subr é capturado em uma iteração. Cada entrada não usada é substituída por um stub de 1 byte de return e o INDEX é reescrito no lugar, com o slack final preenchido com zeros. Esse comportamento é exposto pelos helpers públicos HPDFSubsetCFF e HPDFSubsetOTFContainer; scanners CFF de nível mais baixo permanecem internos. Disponível desde o HotPDF v2.39.0.
  • Subsetting de CFF com chave CID (PDF 1.7 ISO 32000-1 9.7.4 / Adobe Tech Note #5176 §18-19): o subsetter CFF agora reconhece o operador ROS (12-30) do Top DICT que marca uma fonte OpenType-CFF com chave CID e percorre o INDEX de Font DICTs FDArray (12-36), cada um carregando seu próprio Private DICT + Local Subr INDEX. O mapa glifo-para-FD FDSelect (12-37) é preservado byte a byte. O scan de fechamento de subrotinas rastreia o contexto FD de cada CharString mantida, de modo que um glifo no FD #5 marca Local Subrs apenas no FD #5 — os global subrs permanecem compartilhados entre FDs. O Local Subr INDEX de cada FD é reescrito no lugar, com as entradas não usadas colapsadas em stubs de 1 byte de return. Fontes OTF CJK / índicas / árabes (Adobe Fan/Gothic/Heiti/Ming/Myungjo/Song Std, Kozuka Pr6N, Source Han Sans etc.) agora passam pelo pipeline completo de subsetting em vez de serem embutidas como estão. Disponível desde o HotPDF v2.40.0.
  • Object Streams (PDF 1.5 ISO 32000-1 7.5.7): defina THotPDF.UseObjectStreams como true além de UseXRefStream e SaveToStream empacota objetos indiretos elegíveis (tudo exceto streams, o dicionário de criptografia e os dicionários Catalog e Info apontados pelo trailer) em um ou mais streams de contêiner /Type /ObjStm. O cross-reference stream então referencia os objetos empacotados por meio de entradas type-2 (campo-2 = número de objeto do ObjStm hospedeiro; campo-3 = índice da entrada dentro do stream). Corta o tamanho do arquivo substancialmente em PDFs com muitos dicionários pequenos (documentos multi-página, anotações, widgets AcroForm, elementos de árvore de estrutura, camadas de Optional Content) — um smoke de 30 páginas só de gráficos encolhe de 14502 para 8488 bytes (41,5% menor). Rebaixa silenciosamente para false quando UseXRefStream está desligado (entradas type-2 não são representáveis na tabela textual de xref conforme a spec) ou quando Version está abaixo do PDF 1.5. Disponível desde o HotPDF v2.41.0.
  • Imagem de soft mask / SMask (PDF 1.4 ISO 32000-1 8.9.5.4): THotPDF.AddImageWithSMask(Width, Height, RGB, Alpha) emite um Image XObject colorido mais um Image XObject de soft mask DeviceGray de 8 bits e liga a referência cruzada de /SMask automaticamente, de modo que cada pixel possa carregar transparência completa por canal em vez do limite binário on/off do caminho legado de /ImageMask. A sobrecarga de conveniência THotPDF.AddImageWithSMask32(Bitmap32) extrai os planos RGB e alfa de um TBitmap BGRA de 32 bits para embutimento de PNG com alfa em uma chamada. AddImageWithTransparency e AddImageWithTransparency32 expõem o mesmo fluxo com nomenclatura centrada em imagens. Ambos os pontos de chamada passam pelo gate de RequirePDFVersion(pdf14), para que a saída 1.3 em modo estrito permaneça em conformidade. Disponível desde o HotPDF v2.42.0
  • Helpers de conveniência de máscara de imagem: AddImageAsMask emite um /ImageMask binário, AddImageWithMask anexa a máscara resultante a uma imagem colorida por meio de /Mask, e ambos retornam índices normais de imagem para THPDFPage.ShowImage
  • Controles de compressão por imagem: AddImageWithJpegQuality aplica qualidade JPEG em uma chamada sem mudar JpegQuality, enquanto AddMonochromeImageAuto e icAutoMono escolhem Flate, CCITT Group 4 ou JBIG2 para entrada de bitmap de 1 bit
  • Pintura de Tiling Pattern sem cor (PDF 1.7 ISO 32000-1 8.6.6.1): THotPDF.RegisterTilingPattern já emitia tanto /PaintType 1 (colorido) quanto /PaintType 2 (sem cor) desde a v2.19.0, mas a sequência de operadores correspondente no lado da página só estava correta para a variante colorida. Seis novos métodos de THPDFPage — SetFillPatternRGB / SetStrokePatternRGB / SetFillPatternGray / SetStrokePatternGray / SetFillPatternCMYK / SetStrokePatternCMYK — agora dirigem o caminho sem cor, registrando automaticamente o espaço de cor de tinting [/Pattern /BaseCS] correspondente no dict Resources/ColorSpace da página e emitindo a sequência tint_components /Pn scn exigida pela spec. Use o SetFillPattern / SetStrokePattern original para a variante colorida, em que o tile carrega a própria cor. Disponível desde o HotPDF v2.43.0.
  • A renderização completa de padrões de tiling agora aplica a matriz do padrão relativa ao sistema de coordenadas padrão do content stream pai, implementa todas as três regras de posicionamento de /TilingType, suporta /XStep e /YStep negativos, inicia cada célula com um path isolado, aplica a tinta base de um padrão sem cor tanto às operações de fill quanto às de stroke, e retém execução limitada de padrões aninhados. A sobrecarga estendida de RegisterTilingPattern e as propriedades THPDFTilingPatternBuilder.TilingType / Matrix expõem os mesmos controles validados para PDFs gerados. Disponível desde o HotPDF v2.542.0
  • Espaço de cor CIELab (PDF 1.3+ ISO 32000-1 8.6.5.3): THotPDF.RegisterLabColorSpace(Xw, Yw, Zw, aMin, aMax, bMin, bMax) constrói um array de espaço de cor [/Lab << /WhitePoint /BlackPoint /Range >>] inline, armazena-o sob um nome gerado automaticamente (Lab1, Lab2, ...) e retorna esse nome para uso com o pipeline regular de THPDFPage.SetFillColorSpace / SetStrokeColorSpace + SetFillColor([L, a, b]) / SetStrokeColor([L, a, b]). Use um iluminante D50 [0.9505, 1.0, 1.089] para fluxos de impressão ICC ou um iluminante D65 [0.95047, 1.0, 1.08883] para exibição equivalente a sRGB, e depois pinte com L* em [0..100] e a*, b* na faixa escolhida (tipicamente [-128..127]). Disponível desde o HotPDF v2.44.0.
  • Espaço de cor Separation para cores spot (PDF 1.3+ ISO 32000-1 8.6.6.4): THotPDF.RegisterSeparation(ColorantName, AlternateCS, TintC1) declara uma tinta spot de um componente cujo único operando de tint em [0..1] alimenta uma transformação de tint linear de Function Type 2 construída internamente. Use o nome retornado (Sep1, Sep2, ...) com o pipeline regular de SetFillColorSpace / SetStrokeColorSpace + SetFillColor([tint]) / SetStrokeColor([tint]). AlternateCS aceita DeviceGray, DeviceRGB ou DeviceCMYK; TintC1 fornece os componentes do alt-CS em tint = 1.0. Nomes de tintas Pantone e outros com espaços são aceitos diretamente — o HotPDF escapa-os para #20 conforme o PDF 1.7 7.3.5 ao gravar o nome do espaço de cor. Disponível desde o HotPDF v2.45.0.
  • Appearance streams de texto multi-linha e comb de AcroForm (PDF 1.7 ISO 32000-1 12.7.4.3): quando THotPDF.AutoFormAppearances está ligado, campos de texto cujas Flags incluem ffMultiline recebem um Form XObject de /AP /N com quebra de palavra (layout com leading de Td + T* + /TL, honrando separadores CR / LF / CRLF e truncando na contagem de linhas visíveis). Campos cujas Flags incluem ffComb junto com um MaxLen positivo renderizam cada caractere em sua própria célula de largura igual usando uma matriz absoluta de Tm por glifo. O layout de linha única da v2.28.0 é preservado byte a byte para campos sem essas flags. Caracteres internacionais no valor inicial ainda recaem no caminho de recálculo de /NeedAppearances do viewer — a geração completa de appearances com fonte CID embutida continua sendo trabalho futuro. Disponível desde o HotPDF v2.46.0.
  • Fonte Unicode em /AP de AcroForm (PDF 1.7 ISO 32000-1 12.7.2 + 12.7.4.3): THotPDF.SetFormUnicodeFontDict(LogicalName, FontDict) registra uma fonte composta Type 0 / CIDFontType2 + Identity-H fornecida pelo chamador no dicionário de recursos padrão /DR/Font do AcroForm. Depois de registrada, o /DA no nível do AcroForm, o /DA de cada widget Tx e o stream /AP /N produzido por AutoFormAppearances para valores iniciais Tx não ASCII passam todos a usar o nome lógico; o subdicionário /Resources/Font do Form XObject também referencia essa mesma fonte indireta, de modo que o AP fica autossuficiente e não depende da resolução de /DR na hora de renderizar. O helper complementar THotPDF.CreateIndirectFontDict devolve um THPDFDictionaryObject novo e vazio, registrado como objeto PDF indireto, para que você monte dicionários de fonte personalizados (ou qualquer outro dicionário que precise da serialização indireta "N G R") sem mexer em helpers internos. Passe LogicalName vazio e nil em FontDict para voltar ao comportamento apenas ASCII com /Helv da v2.46.0. Campos Tx ASCII continuam usando /Helv, com saída idêntica byte a byte à da v2.46.0 / v2.55.0. /AP não ASCII em multilinha + comb e o shaping RTL bidi (UAX #9 + Arabic contextual joining) continuam como trabalho futuro. Disponível desde o HotPDF v2.56.0; suporte a /AP não ASCII com ffMultiline (Tj em hex UTF-16BE por linha, com leading via Td / T* / /TL e quebra de linha ciente de CJK) desde a v2.57.0; suporte a /AP não ASCII com ffComb (células Tm absolutas de largura igual por CID + Tj de célula única por code point, com tratamento de pares substitutos UTF-16) desde a v2.58.0; a propriedade THotPDF.FormUnicodeRTL para direção da direita para a esquerda (inverte a ordem UTF-16 no hex do Tj do /AP e mantém /V em ordem lógica; o chamador pré-aplica o shaping do árabe para as presentation forms Unicode U+FB50..U+FDFF + U+FE70..U+FEFF; UAX #9 completo + shaping GSUB automático ainda pendentes) desde a v2.59.0.
  • Widget Tx de rich text de AcroForm (PDF 1.5+ ISO 32000-1 12.7.4.3 + Annex L): THPDFPage.AddRichTextField(FieldName, InitialValue, RichValue, DefaultStyle, Rectangle, [MaxLen], [Flags]) emite um widget de texto com /RV (corpo XHTML rich-text), /DS (estilo padrão estilo-CSS), a flag bit 26 de ffRichText /Ff automaticamente com OR, mais o fallback de texto simples de /V + /DV usado por leitores que não fazem parse de /RV. Acrobat e Foxit renderizam diretamente de /RV quando o bit RichText está ligado, aproveitando fallbacks de fonte das fontes Unicode instaladas do leitor — de modo que conteúdo multi-byte (CJK / cirílico / árabe / latino acentuado) exibe corretamente sem o HotPDF embutir uma fonte CID nos /DR Resources. Tanto /V quanto /RV detectam automaticamente entrada multi-byte e mudam para codificação de hex string UTF-16BE (BOM FE FF + unidades de código big-endian) quando necessário. A geração de appearance streams com fonte CID para o caminho próprio de /AP do HotPDF continua sendo trabalho futuro; viewers conscientes de rich text não precisam dela. Disponível desde o HotPDF v2.55.0.
  • Espaço de cor DeviceN para fluxos de tintas spot multi-colorantes (PDF 1.3+ ISO 32000-1 8.6.6.5): THotPDF.RegisterDeviceN(ColorantNames, AlternateCS, TintC1Matrix) generaliza RegisterSeparation de uma única tinta spot para N. A transformação de tint é uma Function Type 4 de calculadora PostScript que emite uma mistura linear ponderada sobre a matriz N x M fornecida (linha n coluna m é a contribuição da colorante n ao canal m de AlternateCS quando só a colorante n vale 1.0). Retorna um nome de espaço de cor (DevN1, DevN2, ...) que dirige o pipeline regular de SetFillColorSpace + SetFillColor([t0, t1, ..., t_{N-1}]). AlternateCS aceita DeviceGray, DeviceRGB ou DeviceCMYK; nomes de tintas com espaços são escapados para #20 conforme o PDF 1.7 7.3.5; o nome especial None marca um slot de colorante não usado. Disponível desde o HotPDF v2.47.0.
  • Malha de triângulos com sombreamento Gouraud de forma livre (PDF 1.3+ ISO 32000-1 8.7.4.5.4): THotPDF.RegisterFreeFormGouraudShading(XMin, YMin, XMax, YMax, NumComponents, Vertices) declara um stream /ShadingType 4 com /BitsPerCoordinate 16 + /BitsPerComponent 8 + /BitsPerFlag 8, embrulha-o em uma entrada de Pattern Type 2 inline no dicionário Resources/Pattern da página e devolve o nome de pattern gerado automaticamente (Sh1, Sh2, ...) para o pipeline normal de SetFillPattern / SetStrokePattern. Cada vértice é empacotado como 1 byte de flag (sempre 0 para triângulos independentes) + 2 bytes de X em big-endian + 2 bytes de Y em big-endian + NumComponents componentes de cor de 8 bits. O argumento NumComponents aceita 1 (DeviceGray), 3 (DeviceRGB) ou 4 (DeviceCMYK); cada vértice contribui com 2 + NumComponents valores Extended para Vertices, na ordem (X, Y, c1...cN); o número de vértices deve ser múltiplo de 3. /Decode mapeia as coordenadas de 16 bits de volta para [XMin, XMax] x [YMin, YMax] e os componentes de cor para [0, 1]. Os shadings de malha Type 5 (lattice), Type 6 (Coons patch) e Type 7 (tensor product) continuam como trabalho futuro. Disponível desde o HotPDF v2.48.0.
  • Malha de triângulos com shading Gouraud em forma de lattice (PDF 1.3+ ISO 32000-1 8.7.4.5.5): THotPDF.RegisterLatticeFormGouraudShading(XMin, YMin, XMax, YMax, NumComponents, VerticesPerRow, Vertices) declara um stream /ShadingType 5 que organiza vértices em um lattice de M linhas x N colunas e deixa o renderizador auto-trianguliar cada par de linhas adjacentes em uma faixa de triângulos. Ao contrário de RegisterFreeFormGouraudShading (Type 4), não há byte de flag por vértice; /BitsPerFlag está ausente do dicionário de shading e cada vértice ocupa apenas 4 + NumComponents bytes (2 X big-endian + 2 Y big-endian + N componentes de cor). O dicionário de shading em vez disso carrega a entrada exigida de /VerticesPerRow N. Use-o para dados de origem que já estão em uma grade regular de amostras (terreno, resultados de FEA, heatmaps científicos) — a aplicação fornece vértices em ordem de linha e o pipeline de renderização monta a topologia da faixa de triângulos automaticamente. VerticesPerRow deve ser pelo menos 2, e a contagem total de vértices deve ser múltiplo de VerticesPerRow com pelo menos duas linhas. Disponível desde o HotPDF v2.49.0.
  • Shading de malha com Coons patch (PDF 1.3+ ISO 32000-1 8.7.4.5.6): THotPDF.RegisterCoonsPatchMesh(XMin, YMin, XMax, YMax, NumComponents, Patches) declara um stream /ShadingType 6 de Coons patches, cada um delimitado por quatro curvas de Bézier cúbicas e com uma cor por canto. O renderizador ajusta a superfície de Coons entre as quatro bordas, gerando um quadrilátero com cor e curvatura arbitrária — útil para gradientes de folha e metálicos em paths curvos, malhas de gradiente derivadas de SVG e qualquer quadrilátero de bordas curvas que, de outro modo, exigiria muitos triângulos pequenos para ser aproximado. Cada patch contribui com 12 pontos de controle (24 valores Extended de X+Y, ordenados de c1 a c12 no sentido horário ao redor do contorno, com c1 / c4 / c7 / c10 nos quatro cantos e os outros 8 como handles internos de Bézier), seguidos de 4 cores de canto (4 * NumComponents valores Extended); assim, o stride de Patches é 24 + 4 * NumComponents. O dicionário de shading leva os mesmos /BitsPerCoordinate 16 + /BitsPerComponent 8 + /BitsPerFlag 8 do Type 4 (e, ao contrário do Type 5, sem /VerticesPerRow). Todo patch emitido leva flag = 0 (patch independente); as flags de continuação 1 / 2 / 3 (compartilhamento de borda) não são expostas nesta sobrecarga de conveniência. Disponível desde o HotPDF v2.50.0.
  • Espaço de cor Separation com transformação de tint LUT amostrada (PDF 1.3+ ISO 32000-1 8.6.6.4 + 7.10.2): THotPDF.RegisterSeparationLUT(ColorantName, AlternateCS, Samples) encapsula RegisterSampledFunction para que chamadores expressem uma curva completa não linear de tint -> alt-CS como um stream plano de bytes de amostras de 8 bits (M-tuplas) sem construir manualmente um dicionário de Function Type 0. Use a variante LUT quando a transição de cor for não linear — rampas de tint estilo PANTONE Hexachrome, curvas de densidade com correção gama, curvas de tom desenhadas à mão que casam com uma caracterização de prensa, LUTs ICC de conversão sRGB-para-spot sem toda a maquinaria de perfil ICC; o ponto de entrada RegisterSeparation da v2.45.0 ainda cobre o caso linear de ponto final único. AlternateCS aceita DeviceGray, DeviceRGB ou DeviceCMYK; o comprimento de Samples deve ser múltiplo positivo de M com pelo menos 2 * M bytes para que a função tenha faixa interpolável, e a contagem de pontos de grade S é inferida de Length(Samples) / M. Interpolação linear é o padrão conforme o PDF 1.7 /Order 1. Retorna o nome do espaço de cor registrado (Sep1, Sep2, ...) para uso com o pipeline regular de SetFillColorSpace + SetFillColor([tint]). Disponível desde o HotPDF v2.53.0.
  • Registro de Function Type 0 (Sampled) (PDF 1.3+ ISO 32000-1 7.10.2): THotPDF.RegisterSampledFunction(Domain, Range, Size, BitsPerSample, Samples, [Order]) declara um stream indireto /FunctionType 0 que expressa um mapeamento arbitrário de entrada para saída como uma grade regular N-dimensional de amostras de saída M-dimensionais, interpoladas entre os pontos da grade. Use quando a maquinaria de perfis ICC é exagero, mas você quer uma LUT de cor ajustada à mão — curvas de tom para /TransferFunction (/TR do ExtGState), tint transforms amostrados para /Separation / /DeviceN além dos caminhos lineares Type 2 / aritméticos Type 4, curvas de limiar de halftone ou qualquer outra construção do PDF que receba um dicionário Function. Domain tem 2N entradas (um par [min, max] por dimensão de entrada); Range tem 2M entradas (um par por dimensão de saída); Size traz as N contagens de pontos da grade; BitsPerSample aceita 1, 2, 4, 8, 12, 16, 24 ou 32, conforme a Table 38 do PDF 1.7; Samples é o stream bruto de amostras empacotadas em bits (MSB primeiro dentro de cada amostra, sem padding entre amostras além do preenchimento com zeros do último byte, com a entrada 0 variando mais rápido, segundo as regras de ordem de amostras da especificação); Order tem 1 (linear) como padrão e aceita 3 (interpolação por spline cúbica, desde a v2.54.0), conforme a Table 38 do PDF 1.7. O HotPDF valida a contagem de bytes das amostras contra ceil(GridPoints * M * BitsPerSample / 8). Devolve o THPDFStreamObject indireto, para que você o anexe onde quer que se espere um dicionário Function. Disponível desde o HotPDF v2.52.0; /Order 3 cúbico + cobertura ponta a ponta de múltiplas entradas / múltiplas saídas desde a v2.54.0.
  • Shading de malha de patches de produto tensorial (PDF 1.3+ ISO 32000-1 8.7.4.5.7): THotPDF.RegisterTensorProductPatchMesh(XMin, YMin, XMax, YMax, NumComponents, Patches) declara um stream /ShadingType 7 de patches de produto tensorial, cada um definido por uma grade completa 4 x 4 de pontos de controle Bezier bicúbicos p[i][j] mais uma cor por canto. Estende RegisterCoonsPatchMesh (Type 6) adicionando 4 pontos de controle interiores explícitos (p[1][1], p[1][2], p[2][2], p[2][1]) sobre os 12 pontos de fronteira, dando controle mais fino do interior do patch do que o ajuste com blend de Coons consegue expressar. Útil para idas e voltas de mesh-gradients SVG e qualquer arte que precise de uma superfície Bezier de produto tensorial. Cada patch contribui com 16 pontos de controle (32 valores Extended de X+Y, ordenados conforme a ordem de stream da Table 88 da spec: p[0][0..3], p[1][3], p[2][3], p[3][3], p[3][2..0], p[2][0], p[1][0], depois os 4 pontos interiores p[1][1], p[1][2], p[2][2], p[2][1]) seguidos de 4 cores de canto (4 * NumComponents valores Extended em p[0][0] / p[0][3] / p[3][3] / p[3][0]), de modo que o stride de Patches é 32 + 4 * NumComponents. Todo patch emitido carrega flag = 0 (patch independente). Com esta versão, toda a família de mesh shadings da ISO 32000-1 8.7.4.5 (Types 4 / 5 / 6 / 7) está coberta. Disponível desde o HotPDF v2.51.0.
  • Estilo de borda de anotações e ligação de Popup (PDF 1.7 12.5.4 / 12.5.6.14): THPDFPage.SetAnnotationBorderStyle(Annot, Width, Style, DashPattern) anexa um dicionário /BS com o THPDFAnnotBorderStyle escolhido (absSolid / absDashed / absBeveled / absInset / absUnderline). THPDFPage.AddPopupAnnotationFor(ParentAnnot, Rect, Open) emite uma anotação /Popup ligada em ambas as direções (pai /Popup -> popup, popup /Parent -> pai) para que o viewer renderize o conector de balão de fala. A nova propriedade THPDFPage.LastAnnotation alimenta qualquer um dos helpers sem mudar a assinatura dos procedimentos existentes de Add*Annotation. Disponível desde o HotPDF v2.34.0
  • Security handler de chave pública (ISO 32000-1 7.6.4, ISO 32000-2 7.6.5): THotPDF.EnablePubKeyEncryption(seed, KeyType, EncryptMetadata) + THotPDF.AddPubKeyRecipient(envelope) emitem um dicionário de criptografia de /Filter /Adobe.PubSec (/SubFilter /adbe.pkcs7.s4 para V=1 RC4-40 / /adbe.pkcs7.s5 para V=2 RC4-128 / V=4 AESV2). O chamador fornece a semente aleatória de 20 bytes e um blob binário de envelopedData PKCS#7 por destinatário (construído externamente com CryptoAPI do Windows, OpenSSL ou pycryptodome). O HotPDF deriva a chave de criptografia do arquivo como descrito na ISO 32000-1 7.6.4.3 (SHA-1 da semente concatenada com cada envelope) e reutiliza a derivação padrão de chave por objeto para streams AES-128 / RC4. Disponível desde o HotPDF v2.33.0
  • A renderização de páginas carregadas decodifica Shading Types 4 a 7 com todas as larguras de bits padrão de coordenadas, componentes e flags, records alinhados a bytes, flags de continuação de triângulos Type 4 e de patches Type 6 / 7, arrays opcionais de Function, conversão de ColorSpace declarada, tratamento de BBox e Background, culling de clip, preenchimentos Gouraud em lote e tesselação adaptativa limitada de Coons e produto tensorial. Disponível desde o HotPDF v2.488.0

See Also