PDF Filter Support

Visão geral

Os fluxos PDF e as imagens incorporadas identificam a sua codificação através de nomes de filtro. O HotPDF trabalha principalmente com as seguintes famílias de filtros ao gerar documentos ou descodificar conteúdo externo

Common Filters

  • FlateDecode: principal filtro de compressão para fluxos gerados e caminho principal de descompressão baseado em zlib
  • LZWDecode: Suportado para cenários legados e de compatibilidade através de HPDFLZW.pas
  • DCTDecode: Used for standard JPEG image data handled by HotPDF image loading paths
  • CCITTFaxDecode: Common in monochrome TIFF and fax-style image data
  • ASCIIHexDecode / ASCII85Decode / RunLengthDecode: auxiliares de codificação expostos em HPDFTypes.pas (_ASCIIHexEncode, _ASCII85Encode, _RunLengthEncode) desde o HotPDF v2.4.0. Úteis quando se encapsula conteúdo binário arbitrário para canais de 7 bits ou para suporte explícito de round-trip PDF 1.7 7.4
  • JBIG2Decode / JPXDecode: Filter names defined by PDF 1.7 7.4.7 / 7.4.9. HotPDF's bundled JBIG2 and JPEG 2000 helpers are stubs that report unsupported (return False) until a real OpenJPEG / JBIG2 backend is linked. Earlier builds returned a fake 100×100 success which produced unreadable images; this is now corrected

Practical Notes

  • Nem todos os filtros são expostos através de uma única API genérica; alguns são acedidos através de módulos auxiliares dedicados a imagens ou streams
  • Para conteúdo PDF gerado, THotPDF.Compression continua a ser a definição central visível ao utilizador
  • Ao carregar dados externos, o filtro aplicável depende do formato do ficheiro de origem e da classe auxiliar que estiver a ser usada
  • Encrypted PDFs combine these filters with the security handler; see CryptKeyLength for the supported AES‑128 (V=4 R=4 / CFM=AESV2) and RC4 (V=1/V=2) options
  • Os campos de formulário interativos são emitidos como anotações Widget que o visualizador desenha; ver AcroForm Support
  • Text-markup annotations (Highlight, Underline, Squiggly, StrikeOut) and intra-document jump links (GoTo, GoToR, Launch) are exposed as new THPDFPage.Add*Annotation / AddGoToLink / AddGoToRLink / AddLaunchLink methods since HotPDF v2.6.0
  • A saída DeviceCMYK está disponível através de THPDFPage.SetCMYKColor / SetCMYKFillColor / SetCMYKStrokeColor; os espaços de cor geridos por ICC são registados com THotPDF.RegisterICCProfile e aplicados via SetFillColorSpace / SetStrokeColorSpace + SetFillColor / SetStrokeColor desde o HotPDF v2.7.0
  • Defina THotPDF.UseXRefStream como true antes de guardar para emitir um único stream de referências cruzadas /Type /XRef comprimido por FlateDecode em vez 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 associar ao Catalog um stream XMP /Type /Metadata /Subtype /XML (PDF 1.7 14.3.2); construído automaticamente a partir dos campos do Info dict, ou forneça um pacote escrito à mão através de CustomXMP. Disponível desde o HotPDF v2.9.0
  • Bloqueio da versão PDF por método (desde o HotPDF v2.24.0). Cada método de funcionalidade introduzido em v2.4.0+ consulta RequirePDFVersion antes de emitir; com StrictVersionLock=false (a predefinição) a Version do documento é promovida automaticamente para o mínimo exigido pela funcionalidade, e com StrictVersionLock=true a chamada é recusada para que o ficheiro guardado cumpra estritamente a especificação de referência 1.3 / 1.4 / 1.5 / 1.6 / 1.7 escolhida
  • Codificadores preditores PNG e TIFF para dados de imagem comprimidos com FlateDecode (PDF 1.7 7.4.4.4): _PNGPredictorEncode aplica a heurística de filtro minimum-absolute-difference do libpng (Predictor=15), _TIFFPredictor2Encode aplica diferenciamento horizontal (Predictor=2). Disponível desde o HotPDF v2.10.0
  • Tagged PDF entry points (PDF 1.7 14.7-14.8): THotPDF.Lang populates /Lang in the Catalog, EnableTaggedPDF emits /MarkInfo <</Marked true>> and a stub /StructTreeRoot, and the new THPDFPage.BeginMarkedContent / BeginMarkedContentMCID / EndMarkedContent methods write the BMC / BDC / EMC content-stream operators. Available since HotPDF v2.11.0
  • Axial and radial gradients (PDF 1.7 7.10 / 8.7): THotPDF.RegisterAxialGradient / RegisterRadialGradient build the full Function Type 2 / Shading Type 2-3 / Pattern Type 2 stack and return a stable pattern name; THPDFPage.SetFillPattern / SetStrokePattern install it onto the page. Component count of the start / end color selects DeviceGray (1) / DeviceRGB (3) / DeviceCMYK (4). Available since HotPDF v2.13.0; multi-stop axial gradients via Function Type 3 are exposed through RegisterMultiStopAxialGradient since v2.18.0
  • Imagens inline (PDF 1.7 8.9.7) via THPDFPage.DrawInlineImage; os bytes brutos são automaticamente encapsulados com ASCIIHex quando não é fornecido Filter, para que o fluxo de conteúdo se mantenha limpo em 7 bits. Disponível desde o HotPDF v2.18.0
  • OutputIntents (PDF 1.7 14.11) via THotPDF.AddOutputIntent; cada chamada acrescenta ao Catalog um dicionário /Type /OutputIntent com /DestOutputProfile opcional a referenciar um perfil ICC registado. Disponível desde o HotPDF v2.18.0
  • Geração automática de fluxos de aparência 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é-constrói um Form XObject /Subtype /Form para cada entrada /AP /N do widget (subdicionários Yes / Off para botões), preenche os recursos predefinidos AcroForm /DR com dicionários de fonte indiretos Helvetica / ZapfDingbats e define /NeedAppearances como false para que os renderizadores respeitem os fluxos incorporados. Disponível desde o HotPDF v2.28.0
  • ViewerPreferences /ViewArea e /ViewClip (PDF 1.4 12.2 Table 152) estão agora expostos através das propriedades THotPDF.ViewArea / THotPDF.ViewClip (com os membros do conjunto vpViewArea / vpViewClip correspondentes). Ambos aceitam os valores THPDFPageBoundary (MediaBox / CropBox / BleedBox / TrimBox / ArtBox) e completam a cobertura do HotPDF das quatro ViewerPreferences de limites 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 escreve um dicionário /Trans na página para que os leitores PDF em /PageMode /FullScreen animem a navegação. Os estilos PDF 1.1 (Split, Blinds, Box, Wipe, Dissolve, Glitter, R) e os estilos PDF 1.5 (Fly, Push, Cover, Uncover, Fade) são expostos através da enumeração THPDFTransitionStyle; as opções auxiliares /Dm, /M e /Di também são expostas. THPDFPage.SetPageDuration escreve o atraso /Dur de avanço automático em segundos. Disponível desde o HotPDF v2.30.0
  • Grupo de transparência ao nível da 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 compõem de forma previsível o conteúdo com alfa. Escolha um espaço de cor de dispositivo através da enumeração THPDFGroupColorSpace (DeviceGray / DeviceRGB / DeviceCMYK ou omita), ou chame THPDFPage.SetTransparencyGroupICC com o nome de um perfil ICC previamente registado através de THotPDF.RegisterICCProfile. As flags opcionais /I (Isolated) e /K (Knockout) orientam o compositor; THPDFPage.ClearTransparencyGroup remove uma entrada previamente anexada. 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 de anexação apenas; as chamadas subsequentes CreateIndirect* marcam automaticamente os novos objetos como dirty e THotPDF.MarkDirty(Obj) assinala os objetos carregados pré-existentes para reemissão. THotPDF.SaveIncrementalUpdate(TargetFile) escreve os bytes de origem originais verbatim, acrescenta apenas os objetos dirty com os respetivos números preservados, emite uma nova subsecção xref e termina com um trailer que contém /Prev a apontar para a xref anterior. Combine com o pipeline existente AddSignedSignatureField + PreparePDFForSigning + InsertSignatureHex para adicionar campos de assinatura subsequentes a um documento já assinado sem invalidar assinaturas anteriores (os respetivos hashes /ByteRange permanecem válidos porque nenhum byte original é alterado). Disponível desde o HotPDF v2.35.0
  • Normalização do nome de tipo de letra TrueType incorporado: o HotPDF lê a tabela name do TrueType incorporado e alinha /BaseFont, /FontDescriptor /FontName, /FontFamily e os nomes de tipo de letra CID descendentes com o nome PostScript do programa de tipo de letra. Isto evita falhas do Adobe Acrobat Font Capture causadas por um desajuste entre o dicionário de tipo de letra PDF e o payload TTF incorporado. Disponível desde o HotPDF v2.35.1
  • TrueType font subsetting (PDF 1.7 ISO 32000-1 9.6.4 / 9.8.2): set THotPDF.EnableFontSubsetting to true before BeginDoc and HotPDF rebuilds the embedded TrueType payload to contain only the glyphs actually used by the document. Typical Latin documents see ~90% reduction in embedded font weight (1 MB Arial -> ~70 KB on a one-line "Hello, world."). Composite-glyph dependencies are tracked recursively, GID numbering is preserved (so existing Type0 / Identity-H content streams keep working), and the new /BaseFont automatically gains the spec-mandated six-letter "+"-suffixed prefix (e.g. /BaseFont /AAAAAA+ArialMT). Off by default; enable opt-in to keep full-font embedding for editing workflows. Available since HotPDF v2.36.0
  • Compact Font Format (CFF) subsetter (PDF 1.7 ISO 32000-1 9.7.4 / 9.9): companion to the TrueType subsetter for OpenType-CFF (.otf, sfntVersion OTTO) and Type 1 / Type 1C fonts. The unit-exported HPDFSubsetCFF(CFFBytes, KeepGlyph) function rebuilds the CharStrings INDEX with un-kept glyphs replaced by the minimal 1-byte endchar stub, preserving GID numbering byte-for-byte. Available since HotPDF v2.37.0.
  • Caminho de incorporação OpenType-CFF (.otf) ligado a StoreFont (PDF 1.6+ 9.7.4 Table 117). Quando o binário de tipo de letra carregado por GDI é um contentor sfnt OTTO, o HotPDF faz subset da sub-tabela 'CFF ' incorporada através de HPDFSubsetOTFContainer, emite o programa de tipo de letra via /FontFile3 /Subtype /OpenType e escreve o dicionário de tipo de letra descendente com /Subtype /CIDFontType0 em vez de /CIDFontType2. Os tipos de letra TrueType continuam pelo caminho existente /FontFile2 + /CIDFontType2 sem alteração de comportamento. Disponível desde o HotPDF v2.38.0
  • Subset de sub-rotinas CFF de ponta a ponta (PDF 1.7 9.7.4 §6 / Adobe Tech Note #5177 §3.1): o subsetter CFF passa a remover entradas não utilizadas de AMBOS os índices Global Subr INDEX (localizado imediatamente após String INDEX no binário CFF) e Local Subr INDEX (aninhado sob Private DICT, alcançado via operador Top DICT 18 + operador Private DICT 19). Um único fecho de ponto fixo segue transitivamente as cadeias callsubr (op 0x0A) E callgsubr (op 0x1D), pelo que um CharString que chama uma Local Subr que chama uma Global Subr que chama outra Local Subr é apanhado numa iteração. Cada entrada não utilizada é substituída por um stub de return de 1 byte e o INDEX é reescrito in place com o espaço excedente final preenchido com zeros. Este comportamento é exposto através dos auxiliares públicos HPDFSubsetCFF e HPDFSubsetOTFContainer; os scanners CFF de nível inferior permanecem internos. Disponível desde o HotPDF v2.39.0
  • Subset CFF com chave CID (PDF 1.7 ISO 32000-1 9.7.4 / Adobe Tech Note #5176 §18-19): o subsetter CFF passa a reconhecer o operador Top DICT ROS (12-30) que identifica um tipo de letra OpenType-CFF com chave CID e percorre o INDEX FDArray (12-36) dos Font DICTs, cada um com o seu próprio Private DICT + Local Subr INDEX. O mapa FDSelect (12-37) glifo-para-FD é preservado byte a byte. A varredura de fecho de sub-rotinas acompanha o contexto FD de cada CharString mantido, para que um glifo em FD #5 marque apenas as Local Subrs em FD #5 - as global subrs permanecem partilhadas entre FDs. O Local Subr INDEX de cada FD é reescrito in place com as entradas não usadas colapsadas em stubs de return de 1 byte. Tipos de letra OTF CJK / Indic / árabe (Adobe Fan/Gothic/Heiti/Ming/Myungjo/Song Std, Kozuka Pr6N, Source Han Sans, etc.) passam agora pelo pipeline completo de subset em vez de serem incorporados tal como estão. Disponível desde o HotPDF v2.40.0
  • Fluxos de objectos (PDF 1.5 ISO 32000-1 7.5.7): defina THotPDF.UseObjectStreams como true em conjunto com UseXRefStream e SaveToStream para empacotar objectos indirectos elegíveis (tudo excepto streams, o dicionário de encriptação e os dicionários Catalog e Info apontados pelo trailer) em um ou mais fluxos contentores /Type /ObjStm. O fluxo de xref referencia depois os objectos empacotados através de entradas do tipo 2 (field-2 = número do objecto ObjStm anfitrião; field-3 = índice da entrada dentro do fluxo). Reduz substancialmente o tamanho do ficheiro em PDFs com muitos dicionários pequenos (documentos multipágina, anotações, widgets AcroForm, elementos de árvore de estrutura, camadas de conteúdo opcional) - um teste de fumo de 30 páginas só com gráficos encolhe de 14502 para 8488 bytes (41,5% menor). Regressa silenciosamente para false quando UseXRefStream está desligado (as entradas do tipo 2 não são representáveis na tabela xref textual segundo a especificação) ou quando Version está abaixo de 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 XObject de imagem a cores mais um XObject de imagem soft-mask DeviceGray de 8 bits e liga automaticamente a referência cruzada /SMask, para que cada píxel possa transportar transparência completa por canal em vez do limite binário ligado/desligado do caminho /ImageMask legado. A sobrecarga de conveniência THotPDF.AddImageWithSMask32(Bitmap32) extrai os planos RGB e alpha de um TBitmap BGRA de 32 bits para incorporação PNG com alpha numa única chamada. Ambas as chamadas passam por RequirePDFVersion(pdf14) para que a saída em modo estrito 1.3 permaneça conforme. Disponível desde o HotPDF v2.42.0
  • Pintura de Tiling Pattern não colorido (PDF 1.7 ISO 32000-1 8.6.6.1): THotPDF.RegisterTilingPattern emitiu ambos /PaintType 1 (colorido) e /PaintType 2 (não colorido) desde o v2.19.0, mas a sequência de operadores do lado da página só estava correta para a variante colorida. Seis novos métodos THPDFPage - SetFillPatternRGB / SetStrokePatternRGB / SetFillPatternGray / SetStrokePatternGray / SetFillPatternCMYK / SetStrokePatternCMYK - passam agora a conduzir o caminho não colorido ao registar automaticamente o espaço de cor de tintagem correspondente [/Pattern /BaseCS] no dicionário Resources/ColorSpace da página e ao emitir a sequência tint_components /Pn scn exigida pela especificação. Use os métodos originais SetFillPattern / SetStrokePattern para a variante colorida, em que o tile transporta a sua própria cor. Disponível desde o HotPDF v2.43.0
  • CIELab color space (PDF 1.3+ ISO 32000-1 8.6.5.3): THotPDF.RegisterLabColorSpace(Xw, Yw, Zw, aMin, aMax, bMin, bMax) builds an inline [/Lab << /WhitePoint /BlackPoint /Range >>] color space array, stores it under an auto-generated name (Lab1, Lab2, ...) and returns that name for use with the regular THPDFPage.SetFillColorSpace / SetStrokeColorSpace + SetFillColor([L, a, b]) / SetStrokeColor([L, a, b]) pipeline. Drop in a D50 illuminant [0.9505, 1.0, 1.089] for ICC print workflows or a D65 illuminant [0.95047, 1.0, 1.08883] for sRGB-equivalent display, then paint with L* in [0..100] and a*, b* in the chosen range (typically [-128..127]). Available since 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 tintagem em [0..1] conduz internamente uma transformação de tintagem linear Function Type 2. Use o nome devolvido (Sep1, Sep2, ...) com o pipeline regular SetFillColorSpace / SetStrokeColorSpace + SetFillColor([tint]) / SetStrokeColor([tint]). AlternateCS aceita DeviceGray, DeviceRGB ou DeviceCMYK; TintC1 fornece os componentes alt-CS em tint = 1.0. Nomes Pantone e outros nomes de tinta com espaços são aceites diretamente - o HotPDF escapa-os para #20 segundo o PDF 1.7 7.3.5 ao escrever o nome do espaço de cor. Disponível desde o HotPDF v2.45.0
  • Fluxos de aparência de texto multilinha e comb AcroForm (PDF 1.7 ISO 32000-1 12.7.4.3): quando THotPDF.AutoFormAppearances está ligado, os campos de texto cujas Flags incluem ffMultiline recebem um Form XObject /AP /N com quebra automática de linhas (Td + T* + layout com /TL, respeitando separadores CR / LF / CRLF e truncando ao número de linhas visíveis). Os campos cujas Flags incluem ffComb juntamente com um MaxLen positivo renderizam cada caráter na sua própria célula de largura igual usando uma matriz Tm absoluta por glifo. O layout de linha única do v2.28.0 é preservado byte a byte para campos sem essas flags. Carateres internacionais no valor inicial continuam a seguir o caminho de recomputação /NeedAppearances do visualizador - a geração completa de fluxos de aparência com tipos de letra CID incorporados continua para trabalho futuro. Disponível desde o HotPDF v2.46.0
  • AcroForm /AP Unicode font (PDF 1.7 ISO 32000-1 12.7.2 + 12.7.4.3): THotPDF.SetFormUnicodeFontDict(LogicalName, FontDict) registers a caller-supplied Type 0 / CIDFontType2 + Identity-H composite font in the AcroForm /DR/Font default-resources dict. Once registered, the AcroForm-level /DA, every Tx widget's /DA, and the /AP /N stream produced by AutoFormAppearances for non-ASCII Tx initial values all switch to the logical name; the Form XObject's /Resources/Font sub-dict also references the same indirect font so the AP is self-contained without depending on /DR resolution at render time. The companion helper THotPDF.CreateIndirectFontDict returns a fresh empty THPDFDictionaryObject registered as an indirect PDF object so callers can build custom font dicts (or any other dict requiring "N G R" indirect serialization) without touching internal helpers. Pass empty LogicalName and nil FontDict to revert to the v2.46.0 ASCII-only /Helv behavior. ASCII Tx fields continue to use /Helv with byte-identical output to v2.46.0 / v2.55.0. Multi-line + comb non-ASCII /AP and RTL bidi shaping (UAX #9 + Arabic contextual joining) remain future work. Available since HotPDF v2.56.0; ffMultiline non-ASCII /AP support (per-line UTF-16BE hex Tj with Td / T* / /TL leading and CJK-aware word-wrap) since v2.57.0; ffComb non-ASCII /AP support (per-CID equal-width absolute Tm cells + single-cell Tj per code point with UTF-16 surrogate-pair handling) since v2.58.0; THotPDF.FormUnicodeRTL property for right-to-left direction (reverses UTF-16 order in /AP Tj hex while keeping /V in logical order; caller pre-shapes Arabic to Unicode presentation forms U+FB50..U+FDFF + U+FE70..U+FEFF; full UAX #9 + automatic GSUB shaping pending) since v2.59.0.
  • Widget Tx rich-text 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 predefinido em estilo CSS), a flag ffRichText /Ff bit 26 automaticamente aplicada, mais o fallback de texto simples /V + /DV usado por leitores que não analisam /RV. O Acrobat e o Foxit renderizam diretamente a partir de /RV quando a flag RichText está ativa, tirando proveito dos fallbacks de fonte Unicode instalados no leitor - por isso conteúdo multibyte (CJK / Cirílico / Árabe / latim acentuado) é mostrado corretamente sem o HotPDF incorporar uma fonte CID em /DR Resources. Tanto /V como /RV detetam automaticamente entrada multibyte e mudam para codificação hex-string UTF-16BE (BOM FE FF + code units big-endian) quando necessário. A geração de fluxos de aparência com fonte CID para o próprio caminho /AP do HotPDF continua para trabalho futuro; os visualizadores conscientes de rich text não precisam disso. Disponível desde o HotPDF v2.55.0
  • DeviceN color space for multi-colorant spot-ink workflows (PDF 1.3+ ISO 32000-1 8.6.6.5): THotPDF.RegisterDeviceN(ColorantNames, AlternateCS, TintC1Matrix) generalises RegisterSeparation from a single spot ink to N. The tint transform is a PostScript-calculator Function Type 4 emitting a linear weighted-blend over the supplied N x M matrix (row n column m is colorant n's contribution to AlternateCS channel m when colorant n is 1.0 alone). Returns a color-space name (DevN1, DevN2, ...) that drives the regular SetFillColorSpace + SetFillColor([t0, t1, ..., t_{N-1}]) pipeline. AlternateCS accepts DeviceGray, DeviceRGB or DeviceCMYK; ink names with spaces are escaped to #20 per PDF 1.7 7.3.5; the special name None marks an unused colorant slot. Available since HotPDF v2.47.0.
  • Free-form Gouraud-shaded triangle mesh (PDF 1.3+ ISO 32000-1 8.7.4.5.4): THotPDF.RegisterFreeFormGouraudShading(XMin, YMin, XMax, YMax, NumComponents, Vertices) declares a /ShadingType 4 stream with /BitsPerCoordinate 16 + /BitsPerComponent 8 + /BitsPerFlag 8, wraps it in an inline Pattern Type 2 entry on the page Resources/Pattern dict, and returns the auto-generated pattern name (Sh1, Sh2, ...) for the regular SetFillPattern / SetStrokePattern pipeline. Each vertex is packed as 1 flag byte (always 0 for independent triangles) + 2 big-endian X bytes + 2 big-endian Y bytes + NumComponents 8-bit color components. The NumComponents argument accepts 1 (DeviceGray), 3 (DeviceRGB) or 4 (DeviceCMYK); each vertex contributes 2 + NumComponents Extended values to Vertices in (X, Y, c1...cN) order; vertex count must be a multiple of 3. /Decode maps the 16-bit coordinates back to [XMin, XMax] x [YMin, YMax] and the color components to [0, 1]. Type 5 (lattice), Type 6 (Coons patch) and Type 7 (tensor product) mesh shadings remain future work. Available since HotPDF v2.48.0.
  • Mesh triangular Gouraud sombreado em forma de grelha (PDF 1.3+ ISO 32000-1 8.7.4.5.5): THotPDF.RegisterLatticeFormGouraudShading(XMin, YMin, XMax, YMax, NumComponents, VerticesPerRow, Vertices) declara um fluxo /ShadingType 5 que organiza vértices numa grelha M-row x N-column e permite ao renderizador auto-triangulizar cada par de linhas adjacentes num triangle strip. Ao contrário de RegisterFreeFormGouraudShading (Type 4), não existe 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 transporta em vez disso a entrada obrigatória /VerticesPerRow N. Use-o para dados de origem que já estejam numa grelha de amostragem regular (terreno, resultados FEA, mapas de calor científicos) - a aplicação fornece vértices em row-major e o pipeline de renderização monta automaticamente a topologia do triangle strip. VerticesPerRow tem de ser pelo menos 2 e o número total de vértices tem de ser múltiplo de VerticesPerRow com pelo menos duas linhas. Disponível desde o HotPDF v2.49.0
  • Mesh de shading Coons patch (PDF 1.3+ ISO 32000-1 8.7.4.5.6): THotPDF.RegisterCoonsPatchMesh(XMin, YMin, XMax, YMax, NumComponents, Patches) declara um fluxo /ShadingType 6 de patches Coons, cada um delimitado por quatro curvas de Bézier cúbicas e com uma cor por canto. O renderizador ajusta a superfície Coons entre as quatro arestas, produzindo um quadrilátero de cor com curvatura arbitrária - útil para gradientes metálicos e de folha em caminhos curvos, mesh gradients derivados de SVG e qualquer quadrilátero com arestas curvas que de outro modo exigiria muitos triângulos pequenos para ser aproximado. Cada patch contribui com 12 pontos de controlo (24 valores Extended X+Y, ordenados c1..c12 no sentido horário à volta do contorno com c1 / c4 / c7 / c10 nos quatro cantos e os restantes 8 como alças Bézier internas) seguidos de 4 cores de canto (4 * NumComponents valores Extended), pelo que a dimensão Patches é 24 + 4 * NumComponents. O dicionário de shading transporta os mesmos /BitsPerCoordinate 16 + /BitsPerComponent 8 + /BitsPerFlag 8 que o Type 4 (e, ao contrário do Type 5, /VerticesPerRow está ausente). Cada patch emitido transporta flag = 0 (patch independente); as flags de continuação 1 / 2 / 3 (partilha de arestas) não são expostas nesta sobrecarga de conveniência. Disponível desde o HotPDF v2.50.0
  • Separation color space with sampled LUT tint transform (PDF 1.3+ ISO 32000-1 8.6.6.4 + 7.10.2): THotPDF.RegisterSeparationLUT(ColorantName, AlternateCS, Samples) wraps RegisterSampledFunction so callers can express a full non-linear tint -> alt-CS curve as a flat byte stream of 8-bit (M-tuple) samples without manually constructing a Function Type 0 dictionary. Use the LUT variant when the color transition is non-linear - PANTONE Hexachrome-style tint ramps, gamma-corrected density curves, hand-drawn tone curves matching a press characterisation, sRGB-to-spot conversion ICC LUTs without the full ICC profile machinery; the v2.45.0 RegisterSeparation entry point still covers the linear single-endpoint case. AlternateCS accepts DeviceGray, DeviceRGB or DeviceCMYK; Samples length must be a positive multiple of M with at least 2 * M bytes so the function has interpolable range, and the grid-point count S is inferred from Length(Samples) / M. Linear interpolation is the default per PDF 1.7 /Order 1. Returns the registered color-space name (Sep1, Sep2, ...) for use with the regular SetFillColorSpace + SetFillColor([tint]) pipeline. Available since HotPDF v2.53.0.
  • Function Type 0 (Sampled) registration (PDF 1.3+ ISO 32000-1 7.10.2): THotPDF.RegisterSampledFunction(Domain, Range, Size, BitsPerSample, Samples, [Order]) declares an indirect /FunctionType 0 stream that expresses an arbitrary input-to-output mapping as a regular N-dimensional grid of M-dimensional output samples, interpolated between grid points. Use it where ICC profile machinery is overkill but a hand-tuned color LUT is desired - tone curves for /TransferFunction (ExtGState /TR), sampled tint transforms for /Separation / /DeviceN beyond the linear Type 2 / arithmetic Type 4 paths, halftone threshold curves, or any other PDF construct that takes a Function dictionary. Domain is 2N entries (one [min, max] pair per input dimension); Range is 2M entries (one pair per output dimension); Size is N grid-point counts; BitsPerSample accepts 1, 2, 4, 8, 12, 16, 24, or 32 per PDF 1.7 Table 38; Samples is the raw bit-packed sample stream (MSB-first within each sample, no padding between samples beyond the final-byte zero-fill, with input 0 varying fastest per spec sample-order rules); Order defaults to 1 (linear) and accepts 3 (cubic-spline interpolation, since v2.54.0) per PDF 1.7 Table 38. HotPDF validates the sample-byte count against ceil(GridPoints * M * BitsPerSample / 8). Returns the indirect THPDFStreamObject so callers can attach it wherever a Function dictionary is expected. Available since HotPDF v2.52.0; cubic /Order 3 + end-to-end multi-input / multi-output coverage since v2.54.0.
  • Mesh de shading com patch tensor product (PDF 1.3+ ISO 32000-1 8.7.4.5.7): THotPDF.RegisterTensorProductPatchMesh(XMin, YMin, XMax, YMax, NumComponents, Patches) declara um fluxo /ShadingType 7 de patches tensor-product, cada um definido por uma grelha 4 x 4 completa de pontos de controlo Bézier bicúbicos p[i][j] mais uma cor por canto. Estende RegisterCoonsPatchMesh (Type 6) ao adicionar 4 pontos de controlo interiores explícitos (p[1][1], p[1][2], p[2][2], p[2][1]) por cima dos 12 pontos de fronteira, dando um controlo mais fino do interior do patch do que o ajuste blended Coons consegue expressar. Útil para round-trips de mesh-gradient SVG e qualquer arte que precise de uma superfície Bézier tensor-product. Cada patch contribui com 16 pontos de controlo (32 valores Extended X+Y, ordenados segundo a Table 88 da especificação: p[0][0..3], p[1][3], p[2][3], p[3][3], p[3][2..0], p[2][0], p[1][0], seguidos dos 4 pontos interiores p[1][1], p[1][2], p[2][2], p[2][1]) e depois 4 cores de canto (4 * NumComponents valores Extended em p[0][0] / p[0][3] / p[3][3] / p[3][0]), pelo que a dimensão Patches é 32 + 4 * NumComponents. Cada patch emitido transporta flag = 0 (patch independente). Com esta versão, toda a família ISO 32000-1 8.7.4.5 de mesh shading (Types 4 / 5 / 6 / 7) passa a estar coberta. Disponível desde o HotPDF v2.51.0
  • Annotation border style and Popup linkage (PDF 1.7 12.5.4 / 12.5.6.14): THPDFPage.SetAnnotationBorderStyle(Annot, Width, Style, DashPattern) attaches a /BS dictionary with the chosen THPDFAnnotBorderStyle (absSolid / absDashed / absBeveled / absInset / absUnderline). THPDFPage.AddPopupAnnotationFor(ParentAnnot, Rect, Open) emits a /Popup annotation that is wired in both directions (parent /Popup -> popup, popup /Parent -> parent) so the viewer can render the speech-balloon connector. The new THPDFPage.LastAnnotation property feeds either helper without changing the signature of the existing Add*Annotation procedures. Available since HotPDF v2.34.0
  • Public-Key Security Handler (PDF 1.7 7.6.5): THotPDF.EnablePubKeyEncryption(seed, KeyType, EncryptMetadata) + THotPDF.AddPubKeyRecipient(envelope) emitem um dicionário de encriptação /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 seed aleatória de 20 bytes e um blob binário PKCS#7 envelopedData por destinatário (construído externamente com Windows CryptoAPI, OpenSSL ou pycryptodome). O HotPDF deriva a chave de encriptação do ficheiro através do algoritmo 9 (SHA-1 da seed 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

See Also