Soporte de filtros PDF

Descripción general

Los flujos PDF y las imágenes incrustadas identifican su codificación mediante nombres de filtro. HotPDF trabaja principalmente con las siguientes familias de filtros al generar documentos o decodificar contenido externo

Filtros comunes

  • FlateDecode: Filtro de compresión principal para flujos generados y ruta primaria de descompresión basada en zlib
  • LZWDecode: Compatible para escenarios heredados y de compatibilidad mediante HPDFLZW.pas
  • DCTDecode: Usado para datos estándar de imágenes JPEG manejados por las rutas de carga de imágenes de HotPDF
  • CCITTFaxDecode: Común en imágenes TIFF monocromas y en datos de estilo fax
  • ASCIIHexDecode / ASCII85Decode / RunLengthDecode: Ayudantes de codificador expuestos en HPDFTypes.pas (_ASCIIHexEncode, _ASCII85Encode, _RunLengthEncode) desde HotPDF v2.4.0. Útiles al envolver contenido binario arbitrario para canales de 7 bits o para compatibilidad explícita de ida y vuelta con PDF 1.7 7.4
  • JBIG2Decode / JPXDecode: Nombres de filtro definidos por PDF 1.7 7.4.7 / 7.4.9. Los ayudantes integrados de JBIG2 y JPEG 2000 de HotPDF son implementaciones vacías que informan que no están admitidos (devuelven False) hasta que se enlace un backend real de OpenJPEG / JBIG2. Las versiones anteriores devolvían un éxito falso de 100×100 que producía imágenes ilegibles; esto ya quedó corregido

Notas prácticas

  • No todos los filtros se exponen mediante una sola API genérica; algunos se alcanzan a través de unidades de ayuda específicas para imágenes o flujos
  • Para contenido PDF generado, THotPDF.Compression sigue siendo el ajuste principal visible para el usuario
  • Al cargar datos externos, el filtro aplicable depende del formato del archivo fuente y de la clase auxiliar que se use
  • Los PDF cifrados combinan estos filtros con el controlador de seguridad; vea CryptKeyLength para las opciones admitidas AES‑128 (V=4 R=4 / CFM=AESV2) y RC4 (V=1/V=2)
  • Los campos de formulario interactivos se emiten como anotaciones Widget que el visor pinta; vea Soporte AcroForm
  • Las anotaciones de marcado de texto (Highlight, Underline, Squiggly, StrikeOut) y los enlaces de salto dentro del documento (GoTo, GoToR, Launch) se exponen como nuevos métodos THPDFPage.Add*Annotation / AddGoToLink / AddGoToRLink / AddLaunchLink desde HotPDF v2.6.0
  • La salida DeviceCMYK está disponible mediante THPDFPage.SetCMYKColor / SetCMYKFillColor / SetCMYKStrokeColor; los espacios de color administrados por ICC se registran con THotPDF.RegisterICCProfile y se aplican mediante SetFillColorSpace / SetStrokeColorSpace + SetFillColor / SetStrokeColor desde HotPDF v2.7.0
  • Establezca THotPDF.UseXRefStream en true antes de guardar para emitir un único flujo de referencias cruzadas FlateDecode-comprimido /Type /XRef en lugar de la secuencia textual xref / trailer / startxref (PDF 1.7 7.5.8); disponible desde HotPDF v2.8.0
  • Establezca THotPDF.EnableXMPMetadata en true para adjuntar un flujo XMP /Type /Metadata /Subtype /XML al Catalog (PDF 1.7 14.3.2); se construye automáticamente a partir de los campos del Info dict, o bien puede suministrar un paquete hecho a mano mediante CustomXMP. Disponible desde HotPDF v2.9.0
  • Control de versión PDF por método (desde HotPDF v2.24.0). Cada método de funcionalidad introducido en v2.4.0+ consulta RequirePDFVersion antes de emitir; con StrictVersionLock=false (el valor predeterminado) la versión Version del documento se eleva automáticamente al mínimo que exige la función, y con StrictVersionLock=true la llamada se rechaza para que el archivo guardado cumpla de forma estricta con la especificación de referencia 1.3 / 1.4 / 1.5 / 1.6 / 1.7 elegida
  • Codificadores predictivos PNG y TIFF para datos de imagen comprimidos con FlateDecode (PDF 1.7 7.4.4.4): _PNGPredictorEncode aplica la heurística de filtro de diferencia absoluta mínima de libpng (Predictor=15), _TIFFPredictor2Encode aplica diferenciación horizontal (Predictor=2). Disponible desde HotPDF v2.10.0
  • Puntos de entrada de Tagged PDF (PDF 1.7 14.7-14.8): THotPDF.Lang rellena /Lang en el Catalog, EnableTaggedPDF emite /MarkInfo <</Marked true>> y un /StructTreeRoot mínimo, y los nuevos métodos THPDFPage.BeginMarkedContent / BeginMarkedContentMCID / EndMarkedContent escriben los operadores de flujo de contenido BMC / BDC / EMC. Disponible desde HotPDF v2.11.0
  • Gradientes axiales y radiales (PDF 1.7 7.10 / 8.7): THotPDF.RegisterAxialGradient / RegisterRadialGradient construyen la pila completa de Function Type 2 / Shading Type 2-3 / Pattern Type 2 y devuelven un nombre de patrón estable; THPDFPage.SetFillPattern / SetStrokePattern lo instalan en la página. La cantidad de componentes del color inicial / final selecciona DeviceGray (1) / DeviceRGB (3) / DeviceCMYK (4). Disponible desde HotPDF v2.13.0; los gradientes axiales con varios puntos de parada mediante Function Type 3 se exponen a través de RegisterMultiStopAxialGradient desde v2.18.0
  • Imágenes en línea (PDF 1.7 8.9.7) mediante THPDFPage.DrawInlineImage; los bytes sin procesar se envuelven automáticamente con ASCIIHex cuando no se proporciona Filter para que el flujo de contenido siga siendo limpio en 7 bits. Disponible desde HotPDF v2.18.0
  • OutputIntents (PDF 1.7 14.11) mediante THotPDF.AddOutputIntent; cada llamada agrega un diccionario /Type /OutputIntent al Catalog con un /DestOutputProfile opcional que referencia un perfil ICC registrado. Disponible desde HotPDF v2.18.0
  • Generación automática de flujos de apariencia de AcroForm (PDF 1.7 12.5.5 / 12.7.3.3 / 8.10): configure THotPDF.AutoFormAppearances en true antes de agregar campos interactivos y HotPDF preconstruirá un Form XObject /Subtype /Form para la entrada /AP /N de cada widget (subdiccionarios Yes / Off para botones), poblará los recursos predeterminados /DR de AcroForm con diccionarios de fuente indirectos Helvetica / ZapfDingbats, y cambiará /NeedAppearances a false para que los renderizadores respeten los flujos incrustados. Disponible desde HotPDF v2.28.0
  • ViewerPreferences /ViewArea y /ViewClip (PDF 1.4 12.2 Table 152) ahora se exponen mediante las propiedades THotPDF.ViewArea / THotPDF.ViewClip (con los miembros de conjunto coincidentes vpViewArea / vpViewClip). Ambas aceptan los valores THPDFPageBoundary (MediaBox / CropBox / BleedBox / TrimBox / ArtBox) y completan la cobertura de HotPDF sobre las cuatro ViewerPreferences de límite de página de PDF 1.4. Disponible desde HotPDF v2.29.0
  • Transiciones de página (PDF 1.1 / 1.5 12.4.4): THPDFPage.SetPageTransition escribe un diccionario /Trans en la página para que los lectores PDF en /PageMode /FullScreen animen la navegación. Los estilos PDF 1.1 (Split, Blinds, Box, Wipe, Dissolve, Glitter, R) y PDF 1.5 (Fly, Push, Cover, Uncover, Fade) se exponen mediante la enumeración THPDFTransitionStyle; también se exponen las subopciones /Dm, /M y /Di. THPDFPage.SetPageDuration escribe el retraso de avance automático /Dur en segundos. Disponible desde HotPDF v2.30.0
  • Grupo de transparencia a nivel de página (PDF 1.4 11.6.6 / 7.5.5): THPDFPage.SetTransparencyGroup adjunta un diccionario /Group (/Type /Group /S /Transparency) para que los renderizadores compongan de forma predecible el contenido con alfa. Elija un espacio de color de dispositivo mediante la enumeración THPDFGroupColorSpace (DeviceGray / DeviceRGB / DeviceCMYK u omitirlo), o llame a THPDFPage.SetTransparencyGroupICC con el nombre de un perfil ICC registrado previamente mediante THotPDF.RegisterICCProfile. Las marcas opcionales /I (Isolated) y /K (Knockout) controlan el compositor; THPDFPage.ClearTransparencyGroup elimina una entrada agregada previamente. Disponible desde HotPDF v2.32.0
  • Actualización incremental (PDF 1.7 ISO 32000-1 7.5.6): THotPDF.BeginIncrementalUpdate(SourceFile) carga un PDF existente en modo de solo anexado; las llamadas posteriores a CreateIndirect* marcan automáticamente como sucios los nuevos objetos, y THotPDF.MarkDirty(Obj) etiqueta objetos cargados existentes para volver a emitirlos. THotPDF.SaveIncrementalUpdate(TargetFile) escribe los bytes de origen originales de forma literal, agrega solo los objetos sucios con sus números de objeto preservados, emite una nueva subsección xref y termina con un trailer que lleva /Prev apuntando al xref anterior. Combínelo con la canalización existente AddSignedSignatureField + PreparePDFForSigning + InsertSignatureHex para agregar campos de firma posteriores a un documento ya firmado sin invalidar las firmas anteriores (sus resúmenes /ByteRange siguen siendo válidos porque no cambia ninguno de los bytes originales). Disponible desde HotPDF v2.35.0
  • Normalización del nombre de fuente TrueType incrustada: HotPDF lee la tabla de nombres TrueType incrustada y alinea /BaseFont, /FontDescriptor /FontName, /FontFamily y los nombres de fuentes CID descendientes con el nombre PostScript del programa de fuente. Esto evita fallos de Adobe Acrobat Font Capture causados por una falta de coincidencia entre el diccionario de fuente PDF y la carga TTF incrustada. Disponible desde HotPDF v2.35.1
  • Subconjunto de fuentes TrueType (PDF 1.7 ISO 32000-1 9.6.4 / 9.8.2): establezca THotPDF.EnableFontSubsetting en true antes de BeginDoc y HotPDF reconstruirá la carga TrueType incrustada para contener solo los glifos realmente usados por el documento. Los documentos latinos típicos ven una reducción de ~90% en el peso de la fuente incrustada (Arial de 1 MB -> ~70 KB en una sola línea "Hello, world."). Las dependencias de glifos compuestos se rastrean de forma recursiva, la numeración GID se conserva (por lo que los flujos de contenido Type0 / Identity-H existentes siguen funcionando) y el nuevo /BaseFont obtiene automáticamente el prefijo de seis letras con sufijo "+" exigido por la especificación (por ejemplo /BaseFont /AAAAAA+ArialMT). Desactivado por defecto; actívelo explícitamente para mantener la incrustación de la fuente completa en flujos de trabajo de edición. Disponible desde HotPDF v2.36.0
  • Subconjunto de Compact Font Format (CFF) (PDF 1.7 ISO 32000-1 9.7.4 / 9.9): complemento del subconjunto TrueType para fuentes OpenType-CFF (.otf, sfntVersion OTTO) y Type 1 / Type 1C. La función exportada por la unidad HPDFSubsetCFF(CFFBytes, KeepGlyph) reconstruye el CharStrings INDEX y reemplaza los glifos no conservados por el stub mínimo de 1 byte endchar, preservando la numeración GID byte por byte. Disponible desde HotPDF v2.37.0
  • Ruta de incrustación OpenType-CFF (.otf) conectada a StoreFont (PDF 1.6+ 9.7.4 Table 117). Cuando el binario de fuente cargado por GDI es un contenedor sfnt OTTO, HotPDF recorta la subtabla incrustada 'CFF ' mediante HPDFSubsetOTFContainer, emite el programa de fuente a través de /FontFile3 /Subtype /OpenType y escribe el diccionario de fuente descendiente con /Subtype /CIDFontType0 en lugar de /CIDFontType2. Las fuentes TrueType continúan por la ruta existente /FontFile2 + /CIDFontType2 sin cambios de comportamiento. Disponible desde HotPDF v2.38.0
  • Subconjunto de subrutinas CFF de extremo a extremo (PDF 1.7 9.7.4 §6 / Adobe Tech Note #5177 §3.1): el subconjunto CFF ahora elimina las entradas no usadas de AMBOS el Global Subr INDEX (ubicado inmediatamente después del String INDEX en el binario CFF) y el Local Subr INDEX (anidado bajo Private DICT, al que se llega mediante el operador Arriba DICT 18 + el operador Private DICT 19). Un único cierre de punto fijo sigue de forma transitiva las cadenas callsubr (op 0x0A) Y callgsubr (op 0x1D), de modo que un CharString que llama a un Local Subr que llama a un Global Subr que llama a otro Local Subr se detecta en una sola iteración. Cada entrada no usada se reemplaza por un stub return de 1 byte y el INDEX se reescribe en su lugar con el espacio sobrante final rellenado con ceros. Este comportamiento se expone a través de los ayudantes públicos HPDFSubsetCFF y HPDFSubsetOTFContainer; los analizadores CFF de nivel inferior siguen siendo internos. Disponible desde HotPDF v2.39.0
  • Subconjunto CFF con clave CID (PDF 1.7 ISO 32000-1 9.7.4 / Adobe Tech Note #5176 §18-19): el subconjunto CFF ahora reconoce el operador ROS de Arriba DICT (12-30) que marca una fuente OpenType-CFF con clave CID y recorre el INDEX FDArray (12-36) de Font DICTs, cada uno con su propio Private DICT + Local Subr INDEX. El mapa glifo-a-FD FDSelect (12-37) se preserva byte por byte. El análisis de cierre de subrutinas sigue el contexto FD de cada CharString conservado, de modo que un glifo en FD #5 marca solo las Local Subrs en FD #5; las global subrs siguen compartidas entre FDs. El Local Subr INDEX de cada FD se reescribe en su lugar con las entradas no usadas reducidas a stubs return de 1 byte. Las fuentes OTF CJK / Indic / árabe (Adobe Fan/Gothic/Heiti/Ming/Myungjo/Song Std, Kozuka Pr6N, Source Han Sans, etc.) ahora pasan por la canalización completa de subconjuntos en lugar de incrustarse tal cual. Disponible desde HotPDF v2.40.0
  • Object Streams (PDF 1.5 ISO 32000-1 7.5.7): establezca THotPDF.UseObjectStreams en true además de UseXRefStream y SaveToStream para empaquetar los objetos indirectos elegibles (todo excepto streams, el diccionario de cifrado y los diccionarios Catalog e Info apuntados por el trailer) en uno o más flujos contenedor /Type /ObjStm. El flujo de referencias cruzadas luego referencia los objetos empaquetados mediante entradas de tipo 2 (campo-2 = número de objeto del ObjStm anfitrión; campo-3 = índice de entrada dentro del flujo). Reduce de forma sustancial el tamaño de archivo en PDFs con muchos diccionarios pequeños (documentos multipágina, anotaciones, widgets AcroForm, elementos de árbol de estructura, capas de contenido opcional) - un humo de solo gráficos de 30 páginas baja de 14502 a 8488 bytes (41.5% menos). Se degrada silenciosamente a false cuando UseXRefStream está desactivado (las entradas de tipo 2 no se pueden representar en la tabla xref textual según la especificación) o cuando Version está por debajo de PDF 1.5. Disponible desde HotPDF v2.41.0
  • Imagen de máscara suave / SMask (PDF 1.4 ISO 32000-1 8.9.5.4): THotPDF.AddImageWithSMask(Width, Height, RGB, Alpha) emite un XObject de imagen en color más un XObject de imagen de máscara suave DeviceGray de 8 bits y conecta automáticamente la referencia cruzada /SMask, de modo que cada píxel pueda llevar transparencia completa por canal en lugar del límite binario encendido/apagado de la ruta heredada /ImageMask. La sobrecarga de conveniencia THotPDF.AddImageWithSMask32(Bitmap32) extrae los planos RGB y alfa de un TBitmap BGRA de 32 bits para incrustar PNG con alfa en una sola llamada. Ambas rutas pasan por RequirePDFVersion(pdf14) para que la salida estricta en modo 1.3 siga siendo compatible. Disponible desde HotPDF v2.42.0
  • Pintado de Tiling Pattern no coloreado (PDF 1.7 ISO 32000-1 8.6.6.1): THotPDF.RegisterTilingPattern emite tanto /PaintType 1 (coloreado) como /PaintType 2 (no coloreado) desde v2.19.0, pero la secuencia de operadores del lado de la página solo era correcta para la variante coloreada. Seis nuevos métodos THPDFPage - SetFillPatternRGB / SetStrokePatternRGB / SetFillPatternGray / SetStrokePatternGray / SetFillPatternCMYK / SetStrokePatternCMYK - ahora conducen la ruta no coloreada al registrar automáticamente en la página el espacio de color de tramado correspondiente [/Pattern /BaseCS] en el diccionario Resources/ColorSpace y emitir la secuencia tint_components /Pn scn exigida por la especificación. Use las funciones originales SetFillPattern / SetStrokePattern para la variante coloreada, donde la tesela lleva su propio color. Disponible desde HotPDF v2.43.0
  • Espacio de color CIELab (PDF 1.3+ ISO 32000-1 8.6.5.3): THotPDF.RegisterLabColorSpace(Xw, Yw, Zw, aMin, aMax, bMin, bMax) construye un arreglo de espacio de color en línea [/Lab << /WhitePoint /BlackPoint /Range >>], lo guarda bajo un nombre generado automáticamente (Lab1, Lab2, ...) y devuelve ese nombre para usarlo con la canalización habitual THPDFPage.SetFillColorSpace / SetStrokeColorSpace + SetFillColor([L, a, b]) / SetStrokeColor([L, a, b]). Use un iluminante D50 [0.9505, 1.0, 1.089] para flujos de impresión ICC o un iluminante D65 [0.95047, 1.0, 1.08883] para visualización equivalente a sRGB, y luego pinte con L* en [0..100] y a*, b* en el rango elegido (normalmente [-128..127]). Disponible desde HotPDF v2.44.0
  • Espacio de color Separation para tintas directas (PDF 1.3+ ISO 32000-1 8.6.6.4): THotPDF.RegisterSeparation(ColorantName, AlternateCS, TintC1) declara una tinta directa de un componente cuyo único operando de tinte en [0..1] impulsa internamente una transformación de tinte Function Type 2 lineal. Use el nombre devuelto (Sep1, Sep2, ...) con la canalización habitual SetFillColorSpace / SetStrokeColorSpace + SetFillColor([tint]) / SetStrokeColor([tint]). AlternateCS acepta DeviceGray, DeviceRGB o DeviceCMYK; TintC1 suministra los componentes del espacio alterno en tint = 1.0. Pantone y otros nombres de tinta con espacios se aceptan directamente - HotPDF los escapa a #20 conforme a PDF 1.7 7.3.5 al escribir el nombre del espacio de color. Disponible desde HotPDF v2.45.0
  • Flujos de apariencia de texto de AcroForm multilínea y comb (PDF 1.7 ISO 32000-1 12.7.4.3): cuando THotPDF.AutoFormAppearances está activado, los campos de texto cuyos Flags incluyen ffMultiline obtienen un Form XObject /AP /N con ajuste de línea (Td + T* + diseño de interlineado /TL, respetando separadores CR / LF / CRLF y truncando al número de filas visibles). Los campos cuyos Flags incluyen ffComb junto con un MaxLen positivo renderizan cada carácter en su propia celda de igual ancho usando una matriz Tm absoluta por glifo. El diseño de una sola línea de v2.28.0 se conserva byte por byte para los campos sin esas marcas. Los caracteres internacionales en el valor inicial siguen cayendo en la ruta de recomputación /NeedAppearances del visor - la generación completa de apariencia con fuentes CID incrustadas sigue pendiente. Disponible desde HotPDF v2.46.0
  • Fuente Unicode para AcroForm /AP (PDF 1.7 ISO 32000-1 12.7.2 + 12.7.4.3): THotPDF.SetFormUnicodeFontDict(LogicalName, FontDict) registra en el diccionario de recursos predeterminados /DR/Font de AcroForm una fuente compuesta Type 0 / CIDFontType2 + Identity-H proporcionada por el llamador. Una vez registrada, el /DA a nivel de AcroForm, el /DA de cada widget Tx y el flujo /AP /N producido por AutoFormAppearances para valores iniciales Tx no ASCII cambian todos al nombre lógico; el subdiccionario /Resources/Font del Form XObject también referencia la misma fuente indirecta para que el AP quede autónomo sin depender de la resolución de /DR en tiempo de renderizado. El ayudante complementario THotPDF.CreateIndirectFontDict devuelve un nuevo THPDFDictionaryObject vacío registrado como objeto PDF indirecto para que los llamadores puedan construir diccionarios de fuente personalizados (o cualquier otro diccionario que requiera serialización indirecta "N G R") sin tocar ayudantes internos. Pase LogicalName vacío y FontDict nil para volver al comportamiento ASCII-only /Helv de v2.46.0. Los campos Tx ASCII siguen usando /Helv con una salida idéntica a v2.46.0 / v2.55.0. La apariencia /AP no ASCII multilínea + comb y el shapeado bidi RTL (UAX #9 + unión contextual árabe) siguen pendientes. Disponible desde HotPDF v2.56.0; soporte /AP no ASCII para ffMultiline (UTF-16BE hex Tj por línea con interlineado Td / T* / /TL y ajuste de línea consciente de CJK) desde v2.57.0; soporte /AP no ASCII para ffComb (celdas absolutas Tm de igual ancho por CID + Tj de celda única por punto de código con manejo de pares sustitutos UTF-16) desde v2.58.0; propiedad THotPDF.FormUnicodeRTL para dirección de derecha a izquierda (invierte el orden UTF-16 en el hex Tj de /AP mientras mantiene /V en orden lógico; el llamador preforma árabe a formas de presentación Unicode U+FB50..U+FDFF + U+FE70..U+FEFF; UAX #9 completo + shapeado GSUB automático pendiente) desde 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 un widget de texto con /RV (cuerpo XHTML de rich text), /DS (estilo predeterminado similar a CSS), la marca de bit 26 ffRichText OR automática en /Ff, más el fallback de texto plano /V + /DV usado por lectores que no analizan /RV. Acrobat y Foxit renderizan directamente desde /RV cuando el bit RichText está activo, tomando los reemplazos de fuente de las fuentes Unicode instaladas en el lector, por lo que el contenido multibyte (CJK / Cyrillic / Arabic / Latin acentuado) se muestra correctamente sin que HotPDF incruste una fuente CID en los recursos /DR. Tanto /V como /RV detectan automáticamente entrada multibyte y cambian a codificación de cadena hexadecimal UTF-16BE (BOM FE FF + unidades de código big-endian) cuando hace falta. La generación de flujos de apariencia con fuentes CID para la ruta /AP propia de HotPDF sigue pendiente; los visores con soporte de rich text no la necesitan. Disponible desde HotPDF v2.55.0
  • Espacio de color DeviceN para flujos de trabajo con múltiples tintas directas (PDF 1.3+ ISO 32000-1 8.6.6.5): THotPDF.RegisterDeviceN(ColorantNames, AlternateCS, TintC1Matrix) generaliza RegisterSeparation de una sola tinta directa a N. La transformación de tinte es una Function Type 4 de calculadora PostScript que emite una mezcla lineal ponderada sobre la matriz N x M proporcionada (la fila n columna m es la contribución del colorante n al canal m de AlternateCS cuando el colorante n está solo en 1.0). Devuelve un nombre de espacio de color (DevN1, DevN2, ...) que impulsa la canalización habitual SetFillColorSpace + SetFillColor([t0, t1, ..., t_{N-1}]). AlternateCS acepta DeviceGray, DeviceRGB o DeviceCMYK; los nombres de tinta con espacios se escapan a #20 conforme a PDF 1.7 7.3.5; el nombre especial None marca una ranura de colorante no usada. Disponible desde HotPDF v2.47.0
  • Malla triangular Gouraud de forma libre (PDF 1.3+ ISO 32000-1 8.7.4.5.4): THotPDF.RegisterFreeFormGouraudShading(XMin, YMin, XMax, YMax, NumComponents, Vertices) declara un flujo /ShadingType 4 con /BitsPerCoordinate 16 + /BitsPerComponent 8 + /BitsPerFlag 8, lo envuelve en una entrada Pattern Type 2 en línea dentro del diccionario Resources/Pattern de la página y devuelve el nombre de patrón generado automáticamente (Sh1, Sh2, ...) para la canalización habitual SetFillPattern / SetStrokePattern. Cada vértice se empaqueta como 1 byte de bandera (siempre 0 para triángulos independientes) + 2 bytes X big-endian + 2 bytes Y big-endian + componentes de color de 8 bits NumComponents. El argumento NumComponents acepta 1 (DeviceGray), 3 (DeviceRGB) o 4 (DeviceCMYK); cada vértice aporta valores Extended 2 + NumComponents a Vertices en orden (X, Y, c1...cN); el número de vértices debe ser múltiplo de 3. /Decode mapea las coordenadas de 16 bits de vuelta a [XMin, XMax] x [YMin, YMax] y los componentes de color a [0, 1]. Las mallas Type 5 (lattice), Type 6 (Coons patch) y Type 7 (tensor product) siguen pendientes. Disponible desde HotPDF v2.48.0
  • Malla triangular Gouraud de forma lattice (PDF 1.3+ ISO 32000-1 8.7.4.5.5): THotPDF.RegisterLatticeFormGouraudShading(XMin, YMin, XMax, YMax, NumComponents, VerticesPerRow, Vertices) declara un flujo /ShadingType 5 que organiza los vértices en una cuadrícula M-row x N-column y permite que el renderizador triangule automáticamente cada par de filas adyacentes en una triangle strip. A diferencia de RegisterFreeFormGouraudShading (Type 4), no hay un byte de bandera por vértice; /BitsPerFlag no aparece en el diccionario de shading y cada vértice ocupa solo 4 + NumComponents bytes (2 X big-endian + 2 Y big-endian + N componentes de color). El diccionario de shading lleva en su lugar la entrada obligatoria /VerticesPerRow N. Úselo para datos de origen que ya están en una rejilla regular de muestras (terreno, resultados FEA, mapas de calor científicos): la aplicación proporciona los vértices en orden por filas y la canalización de renderizado ensambla automáticamente la topología de triangle strip. VerticesPerRow debe ser al menos 2 y el número total de vértices debe ser múltiplo de VerticesPerRow con al menos dos filas. Disponible desde HotPDF v2.49.0
  • Malla de sombreado Coons patch (PDF 1.3+ ISO 32000-1 8.7.4.5.6): THotPDF.RegisterCoonsPatchMesh(XMin, YMin, XMax, YMax, NumComponents, Patches) declara un flujo /ShadingType 6 de parches Coons, cada uno delimitado por cuatro curvas Bezier cúbicas y con un color por esquina. El renderizador ajusta la superficie Coons entre los cuatro bordes, creando un cuadrilátero con color y curvatura arbitraria, útil para gradientes metálicos y de lámina sobre trayectorias curvadas, mallas de gradiente derivadas de SVG y cualquier cuadrilátero con bordes curvos que de otro modo requeriría muchos triángulos pequeños para aproximarse. Cada parche aporta 12 puntos de control (24 valores Extended X+Y, ordenados c1..c12 en sentido horario alrededor del borde con c1 / c4 / c7 / c10 en las cuatro esquinas y los 8 restantes como manejadores Bezier internos) seguidos de 4 colores de esquina (4 * NumComponents valores Extended), por lo que el paso de Patches es 24 + 4 * NumComponents. El diccionario de shading lleva los mismos /BitsPerCoordinate 16 + /BitsPerComponent 8 + /BitsPerFlag 8 que Type 4 (y, a diferencia de Type 5, /VerticesPerRow no aparece). Cada parche emitido lleva flag = 0 (parche independiente); las banderas de continuación 1 / 2 / 3 (compartición de bordes) no se exponen en esta sobrecarga de conveniencia. Disponible desde HotPDF v2.50.0
  • Espacio de color Separation con transformación de tinte mediante LUT muestreada (PDF 1.3+ ISO 32000-1 8.6.6.4 + 7.10.2): THotPDF.RegisterSeparationLUT(ColorantName, AlternateCS, Samples) envuelve RegisterSampledFunction para que los llamadores puedan expresar una curva completa de tinte no lineal -> canal alterno como un flujo plano de muestras de 8 bits (M-tuple) sin construir manualmente un diccionario Function Type 0. Use la variante LUT cuando la transición de color sea no lineal - rampas de tinte estilo PANTONE Hexachrome, curvas de densidad corregidas por gamma, curvas tonales dibujadas a mano que coincidan con una caracterización de prensa, LUT ICC de conversión sRGB-a-tinta directa sin toda la maquinaria de perfiles ICC; el punto de entrada RegisterSeparation de v2.45.0 sigue cubriendo el caso lineal de un solo extremo. AlternateCS acepta DeviceGray, DeviceRGB o DeviceCMYK; la longitud de Samples debe ser un múltiplo positivo de M con al menos 2 * M bytes para que la función tenga rango interpolable, y el conteo de puntos de rejilla S se infiere de Length(Samples) / M. La interpolación lineal es el valor predeterminado según PDF 1.7 /Order 1. Devuelve el nombre del espacio de color registrado (Sep1, Sep2, ...) para usarlo con la canalización habitual SetFillColorSpace + SetFillColor([tint]). Disponible desde 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 un flujo indirecto /FunctionType 0 que expresa cualquier mapeo de entrada a salida como una rejilla N-dimensional regular de muestras de salida M-dimensionales, interpolada entre puntos de la rejilla. Úselo cuando la maquinaria de perfiles ICC sea excesiva, pero se desee una LUT de color ajustada manualmente: curvas tonales para /TransferFunction (ExtGState /TR), transformaciones de tinte muestreadas para /Separation / /DeviceN más allá de las rutas lineal Type 2 / aritmética Type 4, curvas de umbral de semitono o cualquier otro constructo PDF que consuma un diccionario Function. Domain son 2N entradas (un par [mín, máx] por dimensión de entrada); Range son 2M entradas (un par por dimensión de salida); Size son N conteos de puntos de rejilla; BitsPerSample acepta 1, 2, 4, 8, 12, 16, 24 o 32 según PDF 1.7 Table 38; Samples es el flujo crudo de muestras empaquetadas en bits (MSB-first dentro de cada muestra, sin relleno entre muestras más allá del relleno con cero del último byte, con la entrada 0 variando más rápido según las reglas de orden de muestra de la especificación); Order predetermina en 1 (lineal) y acepta 3 (interpolación cúbica spline, desde v2.54.0) según PDF 1.7 Table 38. HotPDF valida el conteo de bytes de muestra frente a ceil(GridPoints * M * BitsPerSample / 8). Devuelve el THPDFStreamObject indirecto para que los llamadores lo adjunten donde se espere un diccionario Function. Disponible desde HotPDF v2.52.0; /Order 3 cúbico + cobertura integral de entrada múltiple / salida múltiple desde v2.54.0
  • Sombreado de malla de parche de producto tensorial (PDF 1.3+ ISO 32000-1 8.7.4.5.7): THotPDF.RegisterTensorProductPatchMesh(XMin, YMin, XMax, YMax, NumComponents, Patches) declara un flujo /ShadingType 7 de parches de producto tensorial, cada uno definido por una cuadrícula completa 4 x 4 de puntos de control Bezier bicúbicos p[i][j] más un color por esquina. Amplía RegisterCoonsPatchMesh (Type 6) agregando 4 puntos de control interiores explícitos (p[1][1], p[1][2], p[2][2], p[2][1]) sobre los 12 puntos de borde, dando un control más fino del interior del parche que el ajuste combinado de Coons puede expresar. Útil para round-trips de gradientes de malla SVG y cualquier obra que necesite una superficie Bezier de producto tensorial. Cada parche aporta 16 puntos de control (32 valores Extended X+Y, ordenados según el orden de flujo de la Table 88 de la especificación: p[0][0..3], p[1][3], p[2][3], p[3][3], p[3][2..0], p[2][0], p[1][0], luego los 4 puntos interiores p[1][1], p[1][2], p[2][2], p[2][1]) seguidos de 4 colores de esquina (4 * NumComponents valores Extended en p[0][0] / p[0][3] / p[3][3] / p[3][0]), por lo que el paso de Patches es 32 + 4 * NumComponents. Cada parche emitido lleva flag = 0 (parche independiente). Con esta versión, toda la familia de sombreado de malla ISO 32000-1 8.7.4.5 (Types 4 / 5 / 6 / 7) ya está cubierta. Disponible desde HotPDF v2.51.0
  • Estilo de borde de anotación y vínculo Popup (PDF 1.7 12.5.4 / 12.5.6.14): THPDFPage.SetAnnotationBorderStyle(Annot, Width, Style, DashPattern) adjunta un diccionario /BS con el THPDFAnnotBorderStyle elegido (absSolid / absDashed / absBeveled / absInset / absUnderline). THPDFPage.AddPopupAnnotationFor(ParentAnnot, Rect, Open) emite una anotación /Popup que queda enlazada en ambos sentidos (parent /Popup -> popup, popup /Parent -> parent) para que el visor pueda renderizar el conector de globo de diálogo. La nueva propiedad THPDFPage.LastAnnotation alimenta cualquiera de los dos ayudantes sin cambiar la firma de los procedimientos Add*Annotation existentes. Disponible desde HotPDF v2.34.0
  • Controlador de seguridad Public-Key (PDF 1.7 7.6.5): THotPDF.EnablePubKeyEncryption(seed, KeyType, EncryptMetadata) + THotPDF.AddPubKeyRecipient(envelope) emiten un diccionario de cifrado /Filter /Adobe.PubSec (/SubFilter /adbe.pkcs7.s4 para V=1 RC4-40 / /adbe.pkcs7.s5 para V=2 RC4-128 / V=4 AESV2). El llamador proporciona la semilla aleatoria de 20 bytes y un blob binario envelopedData PKCS#7 por destinatario (construido externamente con Windows CryptoAPI, OpenSSL o pycryptodome). HotPDF deriva la clave de cifrado del archivo mediante el algoritmo 9 (SHA-1 de la semilla concatenada con cada envelope) y reutiliza la derivación de clave estándar por objeto para flujos AES-128 / RC4. Disponible desde HotPDF v2.33.0

Véase también