HotPDF Notas de la versión

Historial de versiones con las funciones visibles para el usuario, correcciones, actualizaciones de compatibilidad y cambios de documentación de HotPDF

Nota: solo se conservan los 800 registros de cambios más recientes

Last release

  • Última versión: 2.974.0; Fecha de lanzamiento: 2026-10-11

Version 2.974.0

Added

  • Elimina las anotaciones de página por página exacta y nombre Unicode, incluyendo las cascadas de popup y reply, mediante APIs nativas acotadas, transacciones de Windows, jobs JSON y callbacks versionados con permisos autenticados y rollback de publicación

Version 2.973.0

Added

  • Intercambia anotaciones FDF binarias con recursos de apariencias preservados, grafos de objetos compartidos y destinos de acciones locales mediante APIs nativas, intercambio de Windows y callbacks versionados

Version 2.972.0

Added

  • Renderiza las apariencias predeterminadas de las anotaciones con estado de texto preservado, ajuste automático, espaciado rich-text y clipping de texto, incluyendo los modos de rendering 4 a 7

Version 2.971.1

Fixed

  • Evita fallas de range-check en el cache público de shaped-runs en builds de Windows con FPC 3.3.1 preservando la multiplicación hash modular explícita de 32 bits, el aislamiento exacto de cache-keys y la evicción LRU

Version 2.971.0

Added

  • Reconoce el :scope raíz y admite las pseudo clases estáticas hover, active y focus con estado de interacción inactivo, preservando negaciones, selectores lógicos y relativos, consultas de soporte y apariencias FDF/XFDF guardadas

Version 2.970.0

Added

  • Evalúa los grupos @supports nativos de rich-text y las importaciones supports() con consultas de declaraciones y selectores soportados, condiciones anidadas acotadas, sondas conscientes del namespace, recuperación de cancelación y apariencias FDF/XFDF guardadas calculadas

Version 2.969.0

Added

  • Evalúa expresiones finitas de calc, min, max y clamp, longitudes de viewport relativas a la raíz y explícitas, y métricas de línea y espaciado de la fuente final en la decodificación nativa de rich-text, apariencias de campos guardadas e importaciones rich FDF/XFDF

Fixed

  • Admite dimensiones mínimas exactas de media, resolución y tamaños iniciales de fuente de manera consistente entre los targets de compiladores mientras sigue rechazando valores por debajo del límite soportado

Version 2.968.0

Added

  • Evalúa preferencias explícitas de rich-text para esquema de colores, movimiento reducido, transparencia y datos, contraste, colores forzados e invertidos y disponibilidad de scripting, preservando preferencias omitidas desconocidas y apariencias guardadas calculadas

Version 2.967.0

Added

  • Aplica hojas de estilo rich-text vinculadas e importadas suministradas por el llamador con conjuntos de títulos preferred o alternate compartidos, resolución acotada de URI y base de documento, y publicación transaccional FDF/XFDF nativa, de Windows y de Linux

Version 2.966.0

Added

  • Evalúa media queries nativas de rich-text con perfiles explícitos print/screen, condiciones anidadas y rangos de features acotados, reteniendo estilos calculados en apariencias guardadas e importaciones transaccionales FDF/XFDF

Version 2.965.0

Added

  • Crea, clona y edita árboles de formularios XFA nativos de manera transaccional, preservando identidades de nodos sobrevivientes, rollback de eventos, ocurrencias de empty-merge soportadas y paquetes de formularios guardados independientemente de las plantillas originales

Version 2.964.0

Added

  • Genera apariencias nativas plain, rich, shaped y family a partir de fuentes OpenType CFF2 completas en coordenadas de variación predeterminadas, preservando identidad de glyphs, Unicode, anchos y permisos de embedding en salida estática CID-keyed CFF 1 acotada

Version 2.963.0

Added

  • Aplica declaraciones de namespace CSS con scope y selectores calificados a campos rich-text nativos y transacciones de formularios de Windows/Linux, preservando apariencias calculadas, búsqueda de namespace acotada, publicación no-op exacta y compatibilidad con builds checked

Version 2.962.0

Added

  • Divide el texto de anotaciones con fuentes raw generado en límites de espacios y guiones entre runs de estilo, preservando caracteres codificados completos, saltos duros, dimensionamiento automático y cancelación acotada

Version 2.961.0

Added

  • Renderiza apariencias de texto de anotaciones faltantes con programas de fuentes Type1C, CIDFontType0C y Type1 puros originales, preservando mapeos Unicode, dimensionamiento automático, espaciado, altura de línea y recursos inmutables acotados

Version 2.960.0

Added

  • Transporta apariencias Form normal, rollover y down del Stamp XFDF estándar con recursos de fuentes e imágenes embebidos, grafos acíclicos acotados, transacciones nativas autenticadas y callbacks existentes de Windows/Linux

Version 2.959.0

Added

  • Aplica listas not complejas, listas is y where indulgentes, relaciones has ancladas y posiciones nth-child filtradas a hojas de estilo rich-text internas nativas, preservando especificidad de selectores, valores calculados, fuentes y apariencias transaccionales FDF/XFDF

Version 2.958.0

Added

  • Accede a colecciones de hijos del Data DOM nativo live mediante índices numéricos read-only en JavaScript y FormCalc, preservando el orden actual de hijos, referencias retenidas de script-objects, clones independientes, valores guardados y apariencias PDF

Fixed

  • Rechaza la asignación numérica, la eliminación y la definición de propiedades tanto en colecciones actuales como dentro de script-objects léxicos retenidos, con rollback de eventos acotado y reintento

Version 2.957.0

Added

  • Aplica selectores de atributos, combinadores de hermanos, pseudo clases estructurales y posicionales, coincidencia de lenguaje heredada y negación compuesta a hojas de estilo rich-text internas nativas, preservando valores calculados reales, fuentes, apariencias guardadas e importaciones transaccionales FDF/XFDF

Version 2.956.1

Fixed

  • Resuelve las rutas de listas de hijos de nodos FormCalc mediante el compilador de eventos real, preservando colecciones live de formularios/propiedades, acceso a items del Data DOM, replay acotado, valores nativos guardados y apariencias PDF

Version 2.956.0

Added

  • Genera apariencias de campos nativas plain, rich y shaped a partir de fuentes OpenType CFF completas, preservando identidades de glyphs por nombre, charsets CID-keyed reales, mapeos Unicode, permisos de embedding y recursos de fuentes compartidos; renderiza apariencias FreeText faltantes usando valores predeterminados OpenType embebidos

Fixed

  • Limita el parsing de CFF y las métricas de glyphs, retiene la cancelación y los readers inmutables por estilo, y preserva el comportamiento de TrueType en seis targets de compiladores nativos

Version 2.955.1

Security

  • Rechaza los shared secrets X25519 y X448 todos cero después de la serialización canónica de bytes, incluyendo inputs low-order cuyas componentes débiles de campo son distintas de cero, y mantiene el resultado del acuerdo en falso con un secret vacío y un diagnóstico fresco

Fixed

  • Preserva las constantes portables SHA3/SHAKE y la aritmética intencional módulo-2^64 del acuerdo de llaves cuando el overflow de enteros y los range checks están habilitados, incluyendo los intercambios full-width P-256, P-384 y P-521 en Free Pascal de 32 bits

Version 2.955.0

Added

  • Agrega colecciones de hijos form/property de JavaScript live con length, lecturas indexadas, item, namedItem, iteración y clones independientes; retiene la identidad del propietario a través de eventos, ediciones de instancias repetidas y creación implícita de propiedades, con valores nativos guardados y apariencias PDF

Fixed

  • Mantiene las listas live retenidas adjuntas a su propietario de evento actual, rechaza los propietarios eliminados sin redirigir a otra instancia, y preserva valores nativos, estado retenido y rollback del journal ante fallas de asignación de colecciones, operación y deadline

Version 2.954.0

Added

  • Aplica hojas de estilo XHTML internas a campos rich-text nativos e importaciones FDF/XFDF con selectores de tipo, clase e ID, combinadores de descendiente e hijo, selectores agrupados, escapes de identificadores Unicode, especificidad, importance y orden de fuente

Fixed

  • Preserva estilos calculados en valores guardados reales y apariencias de widgets, con escaneo y coincidencia acotados, cancelación, bytes no-op confirmados exactos y rollback transaccional de callbacks

Version 2.953.0

Added

  • Agrega colecciones independientes de nodos de consulta XFA con operaciones all, classAll, classIndex, clone y membership, referencias retenidas estables, replay transaccional acotado y consumo nativo de PDF guardado

Fixed

  • Mantiene los instance managers consultados retenidos adjuntos al grafo de eventos actual y evalúa rutas SOM ordinarias y predicados dentro de los límites originales de default-stack y operación

Version 2.952.0

Added

  • Preserva los destinos GoToR remotos de annotations a través del intercambio XFDF nativo, ordinario de Windows y de callbacks versionados, incluyendo coordenadas exactas, file specifications Unicode y comportamiento opcional de ventana

Fixed

  • Autentica las importaciones ordinarias de annotations de documentos cargados contra los permisos de cifrado originales, las firmas y los locks de campos mientras retiene las ediciones permitidas del llamador y el lifetime independiente del origen; lee los enteros ByteRange de firmas sin redondeo Single y desacopla el almacenamiento compartido de strings RC4 antes del cifrado

Version 2.951.0

Added

  • Renderiza bordes nubosos acotados para las annotations Square, Circle, Polygon y FreeText sin apariencias normales, preservando el ancho, el dash, la opacidad y los grafos de origen; comparte bytes de fuentes generados inmutables entre vistas FreeText sin cargas repetidas de bytes decodificados mientras retiene los presupuestos de parseo y la cancelación

Version 2.950.0

Added

  • Crea, clona, renombra, inserta y elimina nodos nativos del Data DOM de XFA con propiedad acotada, namespaces heredados, referencias importadas estables, refresco de bindings y rollback completo de eventos; preserva los atributos UTF-8 y las referencias FormCalc retenidas a través del XML guardado y los consumidores nativos de PDF

Version 2.949.0

Added

  • Preserva la distinción entre no tener opciones de choice seleccionadas y tener seleccionado un export value vacío a través del intercambio XFDF nativo, de Windows y de Linux, con publicación exacta de no-ops, validación acotada y carga comprobada de documentos cifrados

Version 2.948.0

Fixed

  • Renderiza máscaras de glifos rellenos con cobertura de clip fraccionaria capturada mientras preserva paths, patrones, alfa y operadores de blend PDF, y comprueba la capacidad de memoria de trabajo del raster antes de asignar

Version 2.947.1

Fixed

  • Preserva las declaraciones explícitas de namespace XML por defecto vacío durante el parseo y la serialización de XFA, evitando que subárboles de datos sin calificar hereden el namespace de un ancestro tras el guardado y el reload

Version 2.947.0

Added

  • Renderiza bordes rectangulares de annotations beveled e inset y leyendas de línea Unicode o rich medidas, preservando la opacidad, los offsets de endpoints, las apariencias existentes, los recursos de fuentes acotados y el clipping de annotations

Version 2.946.3

Fixed

  • Aplica xfa.host.resetData mediante eventos nativos sin malinterpretarlo como una importación XML de datos, preservando los valores por defecto de la plantilla, los valores con binding, los scopes repetidos, las ediciones pendientes y el rollback transaccional

Version 2.946.2

Fixed

  • Corrige la aritmética de palabras de SHA-1, SHA-256, SHA-384 y SHA-512 con las comprobaciones de rango y overflow del compilador habilitadas, preservando los digests válidos y la autenticación de contraseñas AES-256 sin cambiar las interfaces públicas

Version 2.946.1

Fixed

  • Preserva los atributos XFA presentes y vacíos y los nombres, valores, namespaces y consultas indexadas UTF-8 a través de la serialización XML nativa, los defaults de propiedades persistentes, los eventos repetidos de scripts y el rollback transaccional

Version 2.946.0

Added

  • Renderiza texto rich temporal de annotations con permisos de fuentes explícitos de solo lectura Preview/Print y bytes completos de fuente sin cambios, preservando las políticas de embebido editables y las apariencias Screen existentes sin placeholders implícitos de media

Version 2.945.0

Added

  • Preserva los destinos locales de páginas y nombrados de annotations a través del intercambio XFDF nativo y heredado, con tokens decimales exactos acotados, XML Adobe calificado, validación de atributos duplicados y publicación transaccional de callbacks de Windows/Linux

Version 2.944.0

Added

  • Gestiona los items de display y export de choices XFA vivos mediante JavaScript y FormCalc, preservando los aliases sobrevivientes, las selecciones duplicadas o vacías exactas, las listas nativas por instancia y las apariencias PDF nativas o heredadas guardadas bajo límites de mutación acotados

Version 2.943.1

Fixed

  • Preserva los bytes exactos del PDF cargado cuando las transacciones nativas mixtas de escalares y rich text tipado o los lotes vacíos no hacen cambios, reteniendo las ediciones pendientes del grafo, las políticas autenticadas de firmas y cifrado, los límites de recursos y la publicación atómica

Version 2.943.0

Added

  • Intercambia XFDF mapeado de annotations a través de file jobs de Windows y callbacks V1 originales con transacciones de adición autenticadas, datos binarios y Unicode acotados, bytes exactos de no-ops y publicación atómica

Version 2.942.0

Added

  • Renderiza las anotaciones soportadas sin apariencias normales mediante geometría temporal acotada, terminaciones de línea, íconos y FreeText Unicode, reteniendo los recursos de origen, el rich text, los flags de view/print y la cancelación

Version 2.941.1

Fixed

  • Valida la unicidad de las selecciones de choices XFA nativas con ordenamiento acotado y cancelable, conservando los valores de export exactos case-sensitive, el orden de selección original y el comportamiento transaccional ante fallos

Version 2.941.0

Added

  • Aplica el espaciado de letras y palabras CSS nativo con cascada independiente y el espaciado tipado original a los runs con shaping, las líneas físicas, el fitting y las apariencias guardadas, con serialización de puntos calculada, redondeo decimal exacto y publicación transaccional JSON de Windows/Linux

Version 2.940.0

Added

  • Intercambia dieciocho tipos de anotaciones mapeadas mediante operaciones nativas acotadas de XFDF y JSON V1 de Linux, conservando contenidos rich Unicode, callouts, colores transparentes, adjuntos binarios, links de popup y forward-reply, permisos autenticados y publicación transaccional de anexado

Version 2.939.0

Added

  • Crea campos combo y list XFA legacy con exports exactos de instancia repetida, etiquetas de display, índices seleccionados, posiciones de scroll y apariencias Unicode con estilo, conservando los flags altos de campo y el rollback por campo, con una factory de choices detached con fuente suministrada y un modo de solo metadatos

Version 2.938.0

Added

  • Renderiza las cuatro intenciones de color estándar en estados de gráficos, formularios, imágenes, shadings, patrones y grupos de transparencia, con overrides por imagen, fallback relativo para nombres desconocidos y una caché acotada y cancelable de transformaciones ICC

Version 2.937.0

Added

  • Crea grupos de radio XFA legacy independientes a partir de los ámbitos reales de instancia repetida, conservando exports exactos, estados seleccionados y captions Unicode con estilo, con rollback de adopción de todo el grupo y una API nativa de apariencias de miembros detached con fuentes suministradas

Version 2.936.1

Added

  • Parsea diccionarios y trailers PDF válidos con comprobación de overflow aritmético, habilitada al retener explícitamente los 32 bits bajos de la multiplicación del hash FNV

Version 2.936.0

Added

  • Vincula alturas de línea tipadas de rich text JSON explícitas a las apariencias guardadas de Windows y Linux, conservando los runs originales, las métricas del padre suministradas, una planificación agregada acotada y actualizaciones transaccionales de campos mixtos

Version 2.935.1

Added

  • Cuenta una sola vez los caracteres Unicode suplementarios en las apariencias portables de passwords XFA, retiene los valores originales y aplica presupuestos agregados de glifos antes de asignar máscaras, con cancelación de granularidad escalar

Version 2.935.0

Added

  • Conserva la altura de línea del rich text, las longitudes CSS calculadas, los factores heredados y las métricas de la fuente padre entre el layout nativo, las apariencias guardadas, los file jobs de Windows con sus callbacks y las importaciones FDF/XFDF JSON de Linux, con planificación acotada de fuentes métricas

Version 2.934.0

Added

  • Crea apariencias Unicode reales para campos de texto, numéricos, de fecha y password XFA legacy, con familia y estilo de fuente efectivos por instancia, recursos de fuentes incrustadas editables, enmascaramiento escalar de passwords y adopción transaccional de recursos

Version 2.933.0

Added

  • Evalúa funciones de color cúbicas muestreadas multidimensionales con la convención escalar existente de cuatro nodos, fallback lineal en la dimensión corta, trabajo tensor acotado, cancelación e interpolación escalar sin cambios

Version 2.932.0

Added

  • Decodifica componentes con y sin signo de JPEG 2000 de hasta 26 bits con precisión mixta, subsampling y opacidad, normaliza las muestras acotadas e ignora las declaraciones BitsPerComponent de las imágenes JPX antes de renderizar

Version 2.931.0

Added

  • Conserva los estados de export on, off y neutro de los checkbox XFA legacy, sus captions Unicode con estilo y los bundles nativos de apariencias, codifica de forma consistente los nombres PDF especiales y restaura los recursos directos de página tras una adopción de widgets cancelada

Version 2.930.0

Added

  • Evalúa las aplicaciones automáticas de uso de optional content con contexto explícito de zoom, idioma y usuario, selecciones manuales nativas persistentes y un estado acotado de operaciones JSON de Linux; invalida los contextos de renderizado prestados tras cambios en el documento

Version 2.929.0

Added

  • Construye texto escalar, celdas comb, etiquetas de choices y marcas de botones a partir de familias de fuentes regulares suministradas y ordenadas, tanto en los setters nativos como en los jobs de Windows y los callbacks versionados de Windows/Linux; conserva los metadatos escalares ordinarios y distingue una selección de choice vacía de un export vacío seleccionado

Version 2.928.0

Added

  • Renderiza los dash arrays y fases de ExtGState con un escaneo acotado de arrays PDF tipados, conservando los comentarios, la validación estricta de operandos, la geometría de trazado heredada, la cancelación y los arrays de texto ordinarios

Version 2.927.0

Added

  • Pinta las captions escalares y rich de los push buttons del ApplyXFAAsAcroForm original de Windows con los programas de familia/estilo realmente instalados, overrides persistentes por instancia y bundles nativos de apariencias normal/down/rollover, registrando recursos de fuentes AcroForm genuinos

Version 2.926.0

Added

  • Expande el shorthand de fuentes del CSS inline acotado en candidatos de tamaño, weight, cursiva y familia suministrada con cascada independiente, conservando el tamaño relativo heredado, los resets de estilos omitidos, las prioridades important por componente y las apariencias de fuentes guardadas reales

Version 2.925.0

Added

  • Selecciona familias de fuentes suministradas por el llamador y ordenadas para grafemas completos de rich text con estilo, mediante file jobs de Windows y callbacks V1, conservando los candidatos CSS y tipados, las transacciones con valor vacío genuinas y los presupuestos agregados de fuentes

Version 2.924.0

Added

  • Renderiza los grupos de optional content por defecto del documento y sus expresiones de pertenencia en el contenido de página marcado, los form XObjects y las anotaciones, conserva el estado oculto de gráficos y texto, y expone el uso explícito de view o print mediante la interfaz nativa JSON V1 de Linux

Version 2.923.0

Added

  • Conserva las listas ordenadas de candidatas de fuentes del rich text en las apariencias nativas y el JSON V1 de Linux, y vincula runs mixtos escalares y tipados originales a file jobs de Windows y callbacks V1 sin cambios, con pintado preciso, programas de estilo suministrados y publicación en dos fases

Version 2.922.0

Added

  • Selecciona la visibilidad view o print nativa de anotaciones con las reglas Invisible de PDF 2.0, reconoce apariencias estáticas de RichMedia y Projection y transforms implícitos de Text, y retiene el reemplazo atómico de PNG de Windows acotado y cancelable con diagnósticos reales de errores del sistema operativo

Version 2.921.0

Added

  • Renderiza las captions escalares y XHTML de los push buttons XFA nativos con programas genuinos de familia y estilo suministrados, separadores inline conservados y padding original, apariencias reales normal/down/rollover, visibilidad de captions y overrides persistentes de instancia repetida

Version 2.920.1

Fixed

  • Mantiene las mutaciones PDF correctas de la C ABI nativa de Linux alineadas con el snapshot de origen confirmado, de modo que las importaciones posteriores de FDF o XFDF con el mismo valor conserven los valores de formulario publicados exactos, las apariencias tipadas, el texto dibujado y las páginas importadas en lugar de restaurar bytes de entrada obsoletos

Version 2.920.0

Added

  • Guarda campos escalares mixtos y runs originales tipados de rich text en una única transacción atómica e independiente del documento, retiene valores de apariencia precisos y programas de fuentes suministrados, conserva políticas autenticadas y las ediciones actuales del grafo, y reconoce no-ops genuinos de apariencias de solo lectura

Version 2.919.0

Added

  • Resuelve grafemas Unicode completos con estilo mediante familias de fuentes candidatas suministradas explícitamente, conserva los valores originales y los estilos de apariencia precisos, expone un fallback JSON nativo de Linux opt-in a través de callbacks V1 sin cambios, y retiene el tope agregado real de fuentes mientras carga los programas configurados

Version 2.918.0

Added

  • Renderiza las captions Boolean de XFA nativas a partir del XHTML efectivo y de fuentes de estilo con nombre suministradas, conserva los overlays de instancia repetida y el XML de runtime guardado, y mide las reservas automáticas de captions con las extensiones lógicas finales de las líneas de texto

Version 2.917.0

Added

  • Selecciona programas genuinos de familia y estilo con nombre para las importaciones FDF y XFDF de Windows mediante rutas de archivos anidadas o callbacks de fuentes versionados ya existentes, y aísla las lecturas sincronizadas del origen aleatorio de la publicación secuencial de transacciones

Version 2.916.0

Added

  • Decodifica y renderiza 182 CMaps legacy integrados con códigos acotados de uno a cuatro bytes, writing modes exactos de padre e hijo, mapeos Unicode, recuperación determinista de códigos mal formados, herencia cancelable y avisos de redistribución incluidos

Version 2.915.0

Added

  • Mantiene visibles las opciones seleccionadas de las listas XFA nativas mediante ventanas de selección basadas en métricas de fuentes e índices superiores persistidos, conserva los arrays completos de opciones y valores, y retiene los cambios de fuentes de instancia repetida y el rollback de eventos con una preparación acotada de glifos visibles

Version 2.914.1

Fixed

  • Solapa los aciertos de la caché de memoria en primer plano con la cancelación cooperativa del prefetch después de adquirir la reserva real de memoria, conserva la telemetría de la caché de operaciones y recomprueba la cancelación tras las esperas de locks de caché o de reserva, manteniendo el orden estricto de los misses y los joins de hilos

Version 2.914.0

Added

  • Crea apariencias Boolean XFA nativas con seis marcas personalizadas, bordes redondos o cuadrados, colores y tamaños de marca, cinco ubicaciones de captions y fuentes de captions incrustadas compartidas; conserva alias de export Unicode reversibles y estados neutros legales diferenciados durante la ejecución de eventos y la recarga del PDF guardado

Version 2.913.2

Fixed

  • Decodifica los códigos de barras matriciales rotados completos antes que los fragmentos desconectados y rechaza los mismatches exactos de finders QR antes del muestreo de la rejilla completa, manteniendo una agrupación más estricta, el comportamiento original de las barras lineales, presupuestos de escaneo atómicos y el plazo de dos segundos sin cambios

Version 2.913.1

Added

  • Resuelve los valores implícitos existentes de XFA mediante contextos de datos vivos acotados, sin repetir el parseo de selectores cargado al tope de operaciones de scripts, conservando los plazos transaccionales originales y el comportamiento de binding explícito

Version 2.913.0

Added

  • Selecciona familias de fuentes rich nativas configuradas mediante los callbacks JSON V1 de Linux sin cambios, para fills tipados e importaciones FDF o XFDF, carga los programas de familia y estilo realmente necesarios con presupuestos agregados y anuncia ambos perfiles rich implementados

Version 2.912.0

Added

  • Importa y exporta FDF o XFDF reales mediante file jobs de Windows y callbacks V1, con entrada propia inmutable, preparación del grafo actual no guardado, apariencias rich reales de cuatro fuentes, políticas AES firmadas y autenticadas, y commit del contexto solo después de que ambos callbacks de salida tengan éxito

Version 2.911.0

Added

  • Crea trazados nativos de rectángulo, línea y arco de XFA e imágenes inline PNG o JPEG con decodificación real de muestras, máscaras alfa, proporción ajustada y colocación rotada, preparación acotada y propiedad transaccional bajo cancelación

Version 2.910.0

Added

  • Ajusta las apariencias de anotaciones NoZoom y NoRotate alrededor del ancla rectangular transformada superior izquierda, conservando el UserUnit, la geometría ajustada del formulario, la opacidad y el recorte real de la página entre escalado y rotación

Version 2.909.0

Added

  • Selecciona familias TrueType con nombre realmente suministradas para cada run rich y declaración font-family XHTML acotada, conserva las métricas de estilo y las cachés de marcas por familia, e importa valores rich reales de FDF o XFDF con comparación canónica consciente de la familia

Version 2.908.1

Fixed

  • Aplica declaraciones válidas de rich text inline con prioridad important independiente, bases font-size calculadas envolventes y propiedades heredadas explícitas, conservando los límites de comentarios CSS y de declaraciones entre comillas o de funciones

Version 2.908.0

Added

  • Crea combo boxes, list boxes, campos multiselección, checkbox y grupos de radio con ámbito estructural XFA nativos genuinos directamente desde los datos de runtime guardados, con etiquetas display/export emparejadas, elementos por instancia, flags de acceso y estados de apariencia nativos independientes

Version 2.907.1

Fixed

  • Decodifica escapes hexadecimales PDF y bytes UTF-8 reales en campos de formulario con valores de nombre y heredados, conservando los estados de export de botones con espacios, puntuación y Unicode durante la recarga nativa del documento guardado

Version 2.907.0

Added

  • Renderiza identidades reales de glifos CID-keyed CFF y sustituciones notdef acotadas mediante mapeos CID-to-GID reales de fuentes, conservando la extracción de texto independiente y las comprobaciones de cancelación durante todo el parseo de CMaps con escapes

Version 2.906.0

Added

  • Posiciona marcas combinantes entre estilos usando los bounds reales del glifo seleccionado y las clases combinantes canónicas cuando faltan anclas de sujeción, con escalas de fuentes independientes, apilamiento en el mismo lado y direcciones reales resueltas de los elementos para marcas dobles

Version 2.905.1

Fixed

  • Resuelve los parámetros de predictor con escapes dentro del diccionario DecodeParms real y localiza el token real del stream tras la sintaxis balanceada del diccionario exterior, conservando los payloads xref binarios con valores de espacios en blanco en la carga ordinaria de Windows

Version 2.905.0

Added

  • Crea árboles de páginas PDF nativos, campos editables repetidos, push buttons y texto estático Unicode directamente desde valores XDP y de runtime guardados en Linux y Windows, con apariencias incrustadas genuinas y una preparación acotada de candidatas antes de la salida al llamador

Version 2.904.2

Fixed

  • Lee los diccionarios reales exteriores de streams de referencias cruzadas sin confundir los ajustes de cifrado anidados, resuelve los nombres de entradas con escapes y conserva los diccionarios de cifrado directos en las revisiones incrementales ordinarias de Windows

Version 2.904.1

Fixed

  • Conserva los controles completos de dirección de párrafo y los corchetes emparejados durante el shaping independiente automático y el ajuste de líneas sencillo de campos multilínea, con contextos de unión de líneas físicas, caché inmutable de párrafos y una salida total de glifos acotada

Version 2.904.0

Added

  • Ejecuta el runtime de JavaScript, el diario de eventos, el Data DOM, XML, FormCalc y los locales ICU de XFA nativo en Linux con leases propias de módulos compartidos y relojes monótonos reales, conservando la inicialización Unicode existente de Windows

Version 2.903.1

Fixed

  • Mantiene los clusters de shaping de solo direccionales Unicode con avance cero de espaciado de caracteres, conservando los controles lógicos, las identidades de glifos y el espaciado normal de clusters visibles y de palabras

Version 2.903.0

Added

  • Conserva los embeddings direccionales, overrides, isolates y el contexto de párrafo de corchetes emparejados entre las líneas rich con estilo ajustadas, expone APIs acotadas de orden derivado de párrafos y con caché de líneas físicas, y aplica shaping a los elementos reales de línea con niveles y scripts resueltos

Version 2.902.0

Added

  • Importa y exporta FDF y XFDF con estilo mediante callbacks reales de la C ABI JSON de Linux, incrusta font faces configurados genuinos, conserva las políticas de firma y los bytes privados exactos del origen en importaciones no-op, y publica el estado actual del documento solo cuando ambas salidas de callbacks tienen éxito

Version 2.901.0

Added

  • Renderiza shadings de mallas de parches Coons y tensor con geometría cúbica acotada, interpolación de color en el espacio de origen, aristas de continuación, manejo de pliegues y límites transaccionales de recursos y cancelación

Version 2.900.0

Added

  • Carga y guarda de forma transaccional el XML del Data DOM XFA nativo consciente de namespaces, conserva el contenido mixto ordenado y las identidades de data binding, entrecomilla los valores del host en tiempo lineal y retiene un lease exacto de módulo JavaScript por sesión mediante replay acotado del engine

Version 2.899.0

Added

  • Adjunta marcas combinantes con estilo a las anclas GPOS reales de base, ligadura y marca con escalas de fuentes independientes, conserva los contornos de glifos con origen negativo dentro de los clips de widgets rich y reserva extensiones de línea ajustadas para las marcas apiladas visibles

Version 2.898.0

Added

  • Lee y escribe rich text acotado de FDF y XFDF, decodifica spans de estilo XHTML nativos en cuatro estilos de fuentes incrustadas genuinos e importa transaccionalmente apariencias reales en PDFs firmados o cifrados, incluida la comparación canónica de valores rich existentes de solo lectura

Version 2.897.0

Added

  • Aplica shaping a los spans de estilo Unicode seleccionados con contexto HarfBuzz circundante genuino, expone APIs nativas de orden y dirección de párrafos y coloca los elementos rich tipados dentro de líneas físicas ajustadas reales, conservando los estilos lógicos y la propiedad de los objetos

Version 2.896.0

Added

  • Resuelve el SOM de binding XFA nativo a través de ámbitos de datos repetidos con recorrido acotado de descendientes, nombres con escapes, coincidencia Unicode, fallbacks por instancia para hojas ausentes y sincronización transaccional de valores de runtime

Version 2.895.1

Fixed

  • Compila el soporte de eventos estáticos XFA nativos una vez por engine JavaScript propio y repite argumentos dinámicos completos de eventos compactos, conservando closures, respuestas del host registradas, aislamiento de instancias, los presupuestos originales del diario y los plazos transaccionales durante el rollback

Version 2.895.0

Added

  • Importa y exporta bytes reales de FDF y XFDF mediante callbacks JSON nativos de Linux versionados ya existentes, conserva valores de campos Unicode, seguridad AES y políticas de firma autenticadas, y hace rollback del documento actual tras una salida o publicación de resultados fallida

Version 2.894.0

Fixed

  • Ajusta el rich text tipado demasiado ancho en límites completos de grafemas Unicode entre estilos de fuentes y colores, mide los rangos con estilo reales antes de asignar líneas y conserva los clusters sobredimensionados indivisibles, los tamaños en puntos mixtos y el espaciado de caracteres explícito

Version 2.893.1

Security

  • Autentica la evidencia requerida de CRL y OCSP firmadas por Adobe dentro de timestamps RFC3161 genuinos de documentos antes de aceptar actualizaciones de formulario protegidas por políticas de firma, conservando el rechazo transaccional ante evidencia ausente, revocada, expirada o no confiable

Version 2.893.0

Added

  • Lee y escribe datos escalares acotados de campos nativos FDF y XFDF e importa transaccionalmente apariencias reales Unicode, de choices y de botones en PDFs publicados de forma independiente, conservando políticas de firma autenticadas y cifrado AES

Version 2.892.0

Added

  • Renderiza shadings acotados de mallas triangulares de forma libre y de retícula con semántica genuina de coordenadas, flags, funciones, color y transparencia, y decodifica una sola vez los streams de paletas Indexed hexadecimales

Version 2.891.0

Added

  • Conserva los comentarios XML y las instrucciones de procesamiento XFA nativas ordenados durante la importación de eventos, la serialización, el clonado y el rollback transaccional, excluyéndolos del texto escalar, del rich text y de la selección de elementos SOM

Version 2.890.1

Fixed

  • Recupera los locks transitorios de publicación atómica de Windows con un máximo de ocho intentos de reemplazo cancelables, conservando los destinos exactos, los bytes preparados, los errores permanentes del sistema operativo y la limpieza propia del staging

Version 2.890.0

Added

  • Conserva los grupos Unicode legales de palabras, espacios de no separación, puntuación y números entre runs tipados de estilos rich, ajusta grupos completos con avances reales de fuentes con estilo, retiene líneas base de tamaños mixtos y fusiona CRLF a través de las costuras de estilo

Version 2.889.0

Added

  • Sincroniza los alias escalares XFA materializados ocultos e invisibles después de los commits de campos visibles, conservando los ámbitos nativos de datos repetidos, los valores vacíos explícitos y el rollback transaccional exacto

Version 2.888.0

Added

  • Aplica las propiedades completas de Unicode 17 y los saltos de línea contextuales mediante las APIs existentes del documento, expone consultas portables de propiedades en bruto o resueltas con LB1, conserva los ordinales de enums establecidos y los contratos de tailoring, y respeta las prohibiciones del guion discrecional

Version 2.887.0

Added

  • Importa y serializa XML exData XFA nativo persistente con lecturas inmediatas desde scripts, conservación de namespaces y contenido mixto, identidades retenidas de instancia repetida, rollback transaccional y renderizado genuino del XHTML guardado

Version 2.886.0

Added

  • Crea y autentica timestamps RFC3161 independientes de documentos PDF con streaming acotado, huellas SHA256, SHA384 o SHA512, identidad TSA de confianza y binding de nonce, declaraciones requeridas de extensiones ESIC y excepciones autenticadas de certificación o de bloqueo de campos

Version 2.885.0

Added

  • Expone las oportunidades de salto de línea por defecto de Unicode 17 y las consume en campos rich nativos reales, conservando los grupos de espacios de no separación, guiones y puntuación y los separadores explícitos Unicode con los valores V y RV originales exactos

Version 2.884.0

Added

  • Expone los límites portables de grafemas extendidos por defecto de Unicode 17 y ajusta las palabras rich demasiado anchas en clusters completos, reteniendo el contenido Unicode real de las apariencias y corrigiendo los cambios de ancho de las formas de unión tras el shaping de subcadenas

Version 2.883.0

Added

  • Crea hijos de valor persistentes de imagen y geometría XFA nativos y renderiza alfa PNG real, DPI de imagen y geometría de proporción, conservando el aislamiento de instancia repetida y el rollback transaccional; corrige los píxeles de imágenes FPC que antes se renderizaban en negro

Version 2.882.0

Added

  • Hereda recursos reales de fuentes de streams hijos y parámetros de texto PDF en el renderizado de Form, Type3 y Pattern, conserva los saves de texto del estado gráfico, respeta el texto Type3 invisible y restablece los valores por defecto independientes de apariencias de anotaciones

Version 2.881.0

Added

  • Autentica automáticamente firmas CAdES detached estándar con el binding requerido del certificado de firma y lee de forma consistente cadenas Contents literales genuinas en hexadecimal o con escapes para verificación, actualizaciones de formulario permitidas y evidencia de validación a largo plazo

Version 2.880.2

Fixed

  • Conserva la alineación de párrafos rich entre runs iniciales vacíos, cambios de estilo inline y saltos de línea explícitos, y pinta los bordes de rectángulo o círculo solicitados y las filas resaltadas medidas en lugar de omitirlos silenciosamente

Version 2.880.1

Fixed

  • Atiende la cancelación antes de la asignación del renderer de páginas y de la instalación del contexto y durante la inicialización, conserva un contexto de color activo del llamador cuando la construcción se rechaza de inicio, y libera las display lists prestadas sin publicar bitmaps parciales

Version 2.880.0

Added

  • Renderiza valores reales de draw y captions escalares XFA nativos después de su creación por script, conserva los valores explícitamente vacíos y el aislamiento de instancia repetida, y retiene el rollback exacto cuando el dibujo nativo posterior agota su presupuesto

Version 2.879.0

Added

  • Crea hijos de valor escalar XFA nativos persistentes con sincronización inmediata de campo, datos y alias compartidos, persistencia tipada de formulario, commits de widgets, aislamiento de instancia repetida y rollback transaccional exacto

Version 2.878.0

Added

  • Genera perfiles reales de apariencia de firma de Windows con fuentes Unicode incrustadas para widgets fusionados y separados, en los flujos de rotación, cifrado y certificación, y aplica el AppearanceFilter requerido contra el perfil realmente generado

Version 2.877.0

Added

  • Renderiza patrones PDF reales de mosaico y shading, con y sin color, con orígenes de patrón heredados, celdas anidadas, solapamiento, pintado de trazos y stencils, transparencia y cancelación acotada en los destinos nativos de Linux y Windows

Version 2.876.1

Fixed

  • Conserva el binding SOM XFA completo y la selección real de datos de la instancia emitida al aplicar los valores por defecto de formulario y plantilla para instancias ausentes, sin tomar valores prestados de otra ocurrencia repetida

Version 2.876.0

Added

  • Incrusta evidencia autenticada de CRL y OCSP en los atributos RevocationInfoArchival de Adobe firmados de Windows, aplica las políticas seed reales y valida el estado de confianza, la autorización de la respuesta y la frescura antes de publicar las firmas

Version 2.875.0

Added

  • Resuelve los valores por defecto reales de los campos XFA sin fabricar datos durante la lectura, conserva los valores de instancia explícitamente vacíos y garantiza que las ediciones escriban datos de instancia independientes sin modificar las plantillas compartidas

Version 2.874.0

Added

  • Edita campos nativos de rich text con runs tipados de estilos Unicode, fuentes incrustadas reales regular, bold, italic y bold-italic, líneas base de apariencias medidas de tamaños mixtos, decoraciones y valores V/RV sincronizados entre widgets y salida cifrada

Version 2.873.0

Added

  • Crea choices de UI XFA persistentes por instancia mediante scripts nativos y consume widgets reales de texto, password y choice con apariencias multilínea y de palabras largas medidas

Version 2.872.0

Added

  • Crea firmas de certificación DocMDP reales de Windows con permisos P1, P2 o P3 y declaraciones legales Unicode autenticadas, respeta las políticas seed requeridas y los locks FieldMDP, y solo permite firmas posteriores donde la política firmada lo permita

Version 2.871.1

Fixed

  • Ejecuta los cuerpos de eventos XFA en su propio ámbito léxico y estricto, conservando los alias de campos en el ámbito exterior, el valor this del evento, los returns explícitos y el rollback exacto ante fallos

Version 2.871.0

Added

  • Crea las propiedades font, paragraph, fill, color, border, edge y corner de XFA ausentes mediante scripts nativos de eventos reales, persiste bindings de formulario estables por instancia con rollback exacto y regenera las apariencias opcionales de widgets después de cambios de estilo efectivos

Version 2.870.0

Added

  • Renderiza la salida nativa real de Cairo de Windows con contornos explícitos de fuentes estándar GDI y las convenciones de llamada correctas de OpenJPEG en Win32, usando dependencias nativas ancladas reproducibles y una aceptación independiente de la salida

Version 2.869.0

Added

  • Firma documentos de Windows con callbacks reales y síncronos de transporte RFC 3161 de la C ABI y huellas SHA256, SHA384 o SHA512, confianza TSA autenticada y comprobaciones CRL, restricciones seed requeridas de timestamps y publicación transaccional acotada

Version 2.868.0

Added

  • Genera apariencias enmascaradas de campos password y de selección de archivos literal con valores Unicode conservados y políticas AES-256, transporta Unicode suplementario con escapes por la ABI JSON nativa, retiene tokens decimales PDF subnormales del origen y crea buffers de prefetch RGB sin un DC de pantalla

Version 2.867.0

Added

  • Ajusta el rich text XFA entre estilos inline con límites de palabras medidos, saltos de línea explícitos, líneas base y alineación compartidas, huecos justificados reales entre palabras y geometría de links de fragmentos, conservando la persistencia XDP nativa de instancia repetida

Version 2.866.1

Added

  • Autentica tokens RFC 3161 de firmas raw usando su algoritmo real soportado de huella de mensaje, SHA256, SHA384 o SHA512, conservando el valor por defecto SHA256 de las peticiones existente y las comprobaciones completas de confianza y revocación del token

Version 2.866.0

Added

  • Alinea los runs de rich text XFA de tamaños mixtos a una línea base común del PDF guardado, conserva el modo de posición de texto del llamador y aplica el margen de párrafo adyacente mayor, incluidas las transiciones de párrafos vacíos

Version 2.865.0

Added

  • Solicita y autentica timestamps RFC 3161 para huellas de mensaje explícitas SHA256, SHA384 y SHA512 sin volver a hashear la huella, conservando longitudes de digest estrictas, nonces frescos, transporte acotado, cadenas de confianza y validación de revocación

Version 2.864.0

Fixed

  • Conserva el plazo original de escaneo de códigos de barras priorizando los rasters lineales completos y los grupos candidatos de zona de silencio, y rechaza los bordes finder proyectivos DataMatrix no válidos antes de muestrear los módulos interiores sin cambiar las tolerancias del finder

Version 2.863.0

Added

  • Respeta las restricciones seed y de certificado heredadas válidas de las firmas de Windows con selección real de digest y CAdES, información de firma Unicode, locks de campo indirectos normalizados, permisos autenticados de locks históricos, segundas firmas permitidas y políticas de formularios cifradas

Version 2.862.0

Added

  • Renderiza shadings PDF nativos reales de función, axiales y radiales con geometría y evaluación de funciones acotadas, recorte heredado, semántica de Domain, Matrix, Extend y BBox, colores calibrados y especiales, transparencia, soft masks, blending y grupos knockout

Version 2.861.0

Added

  • Exporta PDFs nativos reales de revisión de contratos anotados y resaltados Unicode explícitos con apariencias normales visibles, conservando el contenido de origen y las revisiones de firma incrementales, aplicando permisos de anotaciones P3 autenticados y derechos de usuario cifrados, y preparando salidas acotadas antes de la publicación por callbacks

Version 2.860.0

Added

  • Vincula las opciones nativas de firma y verificación de Linux a la selección real de digest, metadatos de firma Unicode, perfiles de apariencia con nombre, bytes de confianza explícitos, identidad de transporte de timestamps y evidencia de revocación autenticada, con preparación privada acotada antes de la publicación

Version 2.859.0

Added

  • Aplica overrides vivos por instancia de fuente, párrafo y cuerpo escalar XFA al dibujo y la medición reales de rich text, conserva la precedencia del CSS inline y el contenido vacío explícito mediante la persistencia XDP nativa, y retiene el rollback transaccional exacto

Version 2.858.0

Added

  • Decodifica una sola vez los nombres con escapes de fuentes, codificaciones, glifos, colores y recursos PDF en el renderizado nativo y la extracción de texto compartida, conserva las claves de recursos hash literales y mantiene los nombres equivalentes alineados con los contornos y las métricas de glifos reales

Version 2.857.0

Added

  • Compara documentos nativos por conteos de páginas y objetos, texto Unicode, grafos estructurales normalizados y píxeles reales renderizados en RGB o luminancia, con equivalencia semántica de streams, entradas cifradas autenticadas y preparación acotada antes de la publicación por callbacks

Version 2.856.0

Added

  • Selecciona presets reales de apariencia de firma nativos por nombre de perfil registrado, genera layouts distintos de aprobación, certificación y compacto, conserva metadatos de perfil autenticados y políticas cifradas, y rechaza los perfiles desconocidos antes de publicar

Version 2.855.0

Added

  • Aplica los valores por defecto del schema de propiedades XFA nativo y conserva los valores explícitamente vacíos, los estilos por instancia y las medidas fraccionarias en puntos de fuentes, bordes y draws en la salida real AcroForm y PDF aplanado

Version 2.854.0

Added

  • Expone objetos de propiedades y atributos XFA nativos con bindings de formulario persistentes por instancia, escrituras sincronizadas de valor/datos y efectos reales de fuente, borde, párrafo y layout de UI, conservando el rollback transaccional y los presupuestos de focus sin scripts

Version 2.853.0

Added

  • Incrusta evidencia de revocación genuina de Adobe como atributos firmados CMS autenticados, valida cadenas completas de certificados y timestamps contra la confianza explícita y la evidencia actual de CRL u OCSP antes de publicar, y aplica la incrustación de revocación requerida por el seed de firma

Version 2.852.0

Added

  • Escribe declaraciones legales Unicode autenticadas en las firmas de certificación, respeta los requisitos Legal del seed exclusivos de certificación, conserva las estadísticas legales y los permisos del catálogo existentes, y retiene las políticas de cadenas cifradas

Version 2.851.0

Added

  • Renderiza colores físicos Lab de origen ICC y entradas de compatibilidad XYZ acotadas en trazados, texto, imágenes empaquetadas y paletas Indexed, conserva los tintes alternativos calibrados e ICC mediante grupos RGB o CMYK, y aplica perfiles JPX incrustados con alfa separado o asociado

Version 2.850.0

Added

  • Convierte documentos compatibles con fuentes ausentes a texto buscable y PDF/A-4 vectorial con incrustación explícita y acotada de fuentes Ghostscript, validación veraPDF genuina y publicación atómica, y selecciona fuentes TrueType Unicode nativas de forma consistente entre distribuciones

Version 2.849.0

Added

  • Renderiza fuentes simples Type1 y Type1C incrustadas con codificaciones de glifos Adobe exactas, declaradas o integradas, mantiene la extracción ToUnicode separada de los contornos mostrados, y acepta un estado gráfico validado de ajuste de trazo neutro y colorimetría relativa

Version 2.848.0

Added

  • Resuelve sufijos completos de rutas de descendientes XFA dentro de cada contexto de comodines, conserva los límites locales de ocurrencia y ejecuta los predicados en el ámbito del evento actual con rollback transaccional exacto

Version 2.847.0

Added

  • Aplica las restricciones seed y de certificado nativas heredadas con cadenas de emisores reales, políticas de subject y key usage, digests CMS seleccionables, metadatos de firma Unicode cifrados y transformaciones de documentos bloqueados

Version 2.846.0

Added

  • Expone datasets y nodos de datos XFA nativos con bindings de formulario bidireccionales, réplica dinámica de datos de instancia, referencias retenidas estables, valores de formulario no enlazados independientes y replay transaccional de scripts

Version 2.845.0

Added

  • Emite referencias FieldMDP autenticadas a partir de locks existentes o heredados de campos de firma, conserva nombres de campos Unicode cifrados y referencias de certificación, y aplica niveles de permiso de locks sin debilitar las políticas firmadas originales

Version 2.844.0

Added

  • Renderiza tintes alternativos Separation y DeviceN con funciones vectoriales acotadas, imágenes empaquetadas y blending de grupos CMYK, conserva la geometría knockout None y mapea los colores de registro All de forma consistente

Version 2.843.0

Added

  • Resuelve rutas SOM XFA dinámicas con ocurrencias inferidas y relativas, predicados con ámbito, selectores de clase y de descendientes, colecciones de comodines y asignaciones transaccionales de propiedades de objetos de script

Version 2.842.0

Added

  • Proporciona comparación semántica nativa de contratos de dos documentos vía C ABI y Pascal mediante un núcleo portable compartido, con geometría de glifos del origen, entradas cifradas y de contenido anidado, salida de revisión JSON o HTML preparada y un orden de locks concurrente estable

Version 2.841.0

Added

  • Autentica revisiones CMS y CAdES originales antes de las actualizaciones nativas de formularios, aplica los permisos DocMDP y FieldMDP originales y los campos bloqueados, conserva el contenido y los recursos firmados, y sincroniza atómicamente los metadatos de captions de botones

Version 2.840.0

Added

  • Renderiza colores de origen calibrados CalGray, CalRGB y Lab, blending calibrado de grupos y páginas, bases Indexed, muestras de imagen de 16 bits y soft masks de luminancia XYZ con conversión acotada y evaluación segura de gamma

Version 2.839.0

Added

  • Implementa la copia de valores FormCalc y las referencias estables de nodos con asignación a través de referencias, rebinding y desvinculación null, igualdad de identidad numérica, handles retenidos y rollback transaccional

Version 2.838.0

Added

  • Ejecuta programas Eval de FormCalc generados en runtime con ámbitos de cálculo aislados, evaluación anidada, fuente Unicode, reintentos acotados de compilación y replay transaccional de respuestas del host

Version 2.837.0

Added

  • Genera apariencias Unicode incrustadas mediante el llenado nativo de formularios JSON de Linux para campos de texto, choice y multiselección, estados de checkbox y radio, y captions de botones, conservando la publicación transaccional y el cifrado

Version 2.836.0

Added

  • Proporciona transporte síncrono de timestamps RFC 3161 mediante un registro de operación de firma nativo extendido compatible, con respuestas acotadas, cancelación compartida y validación explícita de confianza y revocación TSA

Version 2.835.0

Added

  • Ejecuta de forma transaccional el estado de host XFA, los flags de página y ciclo de vida, los cambios de focus por instancia, la validación de ediciones pendientes y las operaciones de reset con identidad estable y replay del estado léxico

Version 2.834.0

Added

  • Valida los identificadores de certificados de firma CAdES contra el firmante real con independencia de la confianza opcional del certificado, y resuelve los streams Encoding CMap incrustados mediante el adaptador nativo de fuentes

Version 2.833.0

Added

  • Renderiza CMaps verticales Identity-V y predefinidos Unicode con orígenes W2/DW2 reales, matrices, movimiento de texto y recorte, y decodifica correctamente los streams Encoding CMap incrustados

Version 2.832.0

Added

  • Firma mediante la ABI de callbacks nativa de Linux con identidades PEM o PFX acotadas, nuevos campos de apariencia Unicode y certificación, y retiene el documento firmado preparado como contexto actual después de una publicación con éxito

Version 2.831.0

Fixed

  • Aplica de forma consistente las restricciones seed, de locks y de solo lectura de firma a los nombres PDF codificados, rechaza las claves duplicadas semánticamente y valida los diccionarios de políticas heredados

Version 2.830.0

Added

  • Ejecuta cláusulas picture avanzadas de XFA numéricas, de calendario, de texto y compuestas mediante eventos de formulario reales, conservando la precisión de entrada, la semántica del locale y el replay transaccional de scripts

Version 2.829.0

Added

  • Importa grafos nativos de recursos de página y apariencias transformadas de anotaciones en documentos planos o cifrados, y convierte entradas compatibles a texto buscable y PDF/A-4 vectorial con validación genuina antes de la publicación atómica

Version 2.828.0

Added

  • Renderiza grupos de transparencia y grupos de página CMYK de cuatro componentes e ICC con todos los modos de blending, geometría knockout anidada y presupuestos compartidos de perfiles de color

Version 2.827.0

Added

  • Ejecuta pictures XFA de fecha, hora, números y texto conscientes del locale con conjuntos de locales incrustados, consultas transaccionales acotadas de locales y aritmética IEEE protegida en JavaScript

Version 2.826.0

Added

  • Lee y escribe selecciones de choices con valores de arrays Unicode, mantiene índices de opciones ordenados y genera apariencias coincidentes para las selecciones visibles y desplazadas de los list boxes

Version 2.825.0

Added

  • Firma documentos cifrados mediante jobs JSON y de C ABI de Windows conservando las revisiones originales, los ajustes de seguridad AES, los IDs de documento y los permisos de firma

Version 2.824.0

Added

  • Crea documentos HTML nativos de Linux, inserta texto Unicode buscable visible o ajustado, ejecuta OCR Tesseract acotado y cancelable, y genera salida raster PDF/A-4 con validación independiente mediante APIs de Pascal y callbacks
  • Renderiza soft masks Alpha/Luminosity del estado gráfico, funciones de transferencia acotadas, transparencia aditiva y grupos de página, formas knockout, y muestras extendidas de JPEG 2000 con color y alfa incrustados
  • Valida la evidencia suministrada de certificados, OCSP y CRL antes de la publicación incremental DSS/VRI, conservando las firmas existentes y el cifrado AES
  • Ejecuta callbacks de transporte XFA host y FormCalc tipados explícitos con peticiones acotadas, respuestas registradas y replay transaccional

Fixed

  • Conserva los valores Unicode y los diagnósticos de excepciones que devuelve la API QuickJS de Free Pascal

Version 2.823.0

Added

  • Incrusta timestamps RFC 3161 validados en firmas CMS headless con comprobaciones de huella de mensaje, nonce, autorización TSA, confianza y evidencia de revocación suministrada, conservando los archivos de destino cuando un timestamp requerido falla
  • Retiene el estado léxico de objetos de script XFA, las closures anidadas y los módulos independientes de instancia repetida con un replay transaccional acotado y determinista
  • Aplica espaciado explícito de caracteres y de palabras a las apariencias Unicode headless medidas y generadas

Fixed

  • Usa el orden de argumentos source/search correcto según la especificación en el At de FormCalc y devuelve la primera posición para una cadena de búsqueda vacía

Version 2.822.0

Added

  • Ejecuta eventos XFA generales de QuickJS y FormCalc compilado con operaciones DOM vivas de instancia repetida, persistencia transaccional del paquete de formulario estándar, ciclo de vida automático initialize/calculate/validate/ready, ejecución acotada y cancelación

Fixed

  • Aplica parámetros y fórmulas de flujo de caja correctos según la especificación en las funciones financieras XFA, orígenes de fechas gregorianas y comportamiento del residuo negativo, conservando la precisión double entre Delphi y Free Pascal

Version 2.821.0

Added

  • Amplía los flujos headless nativos de documentos con una C ABI de Linux versionada, operaciones reales de texto/formularios/renderizado/firma basadas en callbacks, cancelación acotada y rollback ante fallos, apariencias multiline/comb/rotated/choice/button con shaping HarfBuzz/FriBidi, identidades PFX, nuevos campos de firma visibles y certificación DocMDP
  • Renderiza máscaras de imagen acotadas, soft masks, colores Indexed/ICC, modos de blending PDF, grupos de transparencia RGB aislados, glifos Type3 y recorte de texto, y decodifica streams de imágenes JPEG, JPEG 2000, CCITT, JBIG2 y RunLength por la ruta nativa autenticada de documentos

Version 2.820.0

Added

  • Rellena campos AcroForm Unicode nativos headless de una línea soportados con apariencias TrueType incrustadas genuinas, anchos de glifos exactos y mapeos CIDToGID/ToUnicode, actualizaciones transaccionales de múltiples widgets, seguridad AES conservada, incrustación de fuentes controlada y guardado atómico acotado en Linux y Windows

Version 2.819.0

Added

  • Renderiza a PNG los trazados PDF soportados, texto horizontal, imágenes, Forms y apariencias de anotaciones existentes con superficies CPU nativas Cairo/FreeType en Linux, aplica trabajo acotado y cancelación, conserva los orígenes y publica los archivos PNG atómicamente

Fixed

  • Usa avances canónicos de AFM de Adobe para los doce estilos estándar Helvetica/Times/Courier cuando faltan anchos PDF, evitando la deriva acumulativa de la posición de texto por métricas de fuentes sustitutas, conservando los anchos explícitos y de fuentes incrustadas

Version 2.818.0

Added

  • Publica firmas PDF incrementales CMS/CAdES nativas headless genuinas en Linux y Windows usando campos sin firmar existentes y credenciales PEM explícitas, conserva las revisiones previas y la seguridad AES-256, verifica los bytes firmados exactos y protege los destinos existentes mediante publicación atómica acotada

Version 2.817.0

Added

  • Completa jobs de documentos JSON y de C ABI acotados con firma incremental PFX validada, campos de firma existentes, comparación de dos documentos, seis modos nativos de comparación y revisión bilateral de contratos en JSON/HTML/PDF anotado, incluidas cancelación cooperativa, límites de recursos y publicación atómica de archivos

Version 2.816.0

Added

  • Verifica firmas PDF nativas headless con binding exacto de ByteRange/Contents y OpenSSL 3 en streaming, genera firmas CMS/CAdES detached genuinas a partir de credenciales PEM explícitas, y reporta la confianza del certificado por separado de la integridad en Linux y Windows

Version 2.815.0

Added

  • Usa el helper acotado de presentación de instancias XFA para eventos condicionales, binding repetido explícito, presencia y acceso independientes de instancias, identidad persistida estable, reflow transaccional, pintado del canvas del host y registros de accesibilidad

Version 2.814.0

Added

  • Abre documentos nativos headless AES-256 R5/R6 en Linux y Windows, autentica permisos de owner/user, decodifica objetos comprimidos cifrados, y guarda valores de formulario incrementales cifrados con conservación exacta del prefijo de origen y salida atómica acotada

Version 2.813.0

Added

  • Reorganiza texto en rectángulos de página acotados entre líneas base e invocaciones compartidas de Form seleccionadas, cambia fuentes y ancho, revisa reportes de colisiones conservadores, y usa vistas previas selladas con commit o rollback transaccional

Fixed

  • Conserva las ediciones del documento cargado en guardados repetidos después de la serialización de objetos, incluidos los guardados de stream a archivo y los reintentos después de un fallo de salida

Version 2.812.0

Added

  • Convierte documentos cargados compatibles a PDF/A-4 conservando el texto, los vectores, las imágenes y los recursos incrustados originales, compone apariencias visibles de anotaciones/widgets, retiene o agrega OCR buscable, reporta las pérdidas explícitas y valida la conservación antes de la publicación atómica del archivo

Version 2.811.0

Added

  • Carga streams de referencias cruzadas, secciones de referencia híbridas y streams de objetos comprimidos mediante la API nativa headless de documentos, valida índices de miembros acotados y precedencia de revisiones, conserva los valores numéricos anchos exactos del origen, y guarda una salida incremental independiente que preserva el origen en Linux y Windows

Version 2.810.0

Added

  • Corrige la orientación del escaneo, sesgos de ángulo continuo, sombras, bordes y cuadriláteros en perspectiva explícitos con geometría reversible acotada, usa evidencia de orientación confiable de Tesseract, y mapea palabras OCR, líneas base, cuadriláteros de página y layout semántico de vuelta al escaneo original para una salida estructurada editable

Version 2.809.0

Added

  • Configura engines locales Tesseract y RapidOCR por CLI o DLL en jobs OCR de JSON y C ABI, retiene el texto Unicode buscable y los píxeles del escaneo, descubre los adaptadores soportados, valida los ajustes explícitos, y aplica presupuestos de renderizado/reconocimiento con salida atómica y rollback si la publicación falla

Version 2.808.0

Added

  • Carga PDFs classic-xref en aplicaciones de consola nativas de Linux, extrae texto Unicode de páginas y Forms anidados con recursos heredados, inspecciona y rellena valores de texto AcroForm, y publica salida incremental que preserva el origen con diagnósticos tipados, cancelación, presupuestos de recursos y reemplazo atómico

Version 2.807.0

Added

  • Localiza múltiples códigos de barras nativos separados en un solo raster, retiene payloads repetidos en posiciones distintas, decodifica símbolos Data Matrix ECC 200 rotados y proyectivos con geometría de cuatro esquinas, y aplica presupuestos agregados de escaneo con cancelación y publicación atómica de resultados

Version 2.806.0

Added

  • La comparación de documentos cubre párrafos de contratos y ediciones de palabras u oraciones con registros de inserción, eliminación, reemplazo y movimiento, ubicaciones de página en ambas versiones, preservación de cláusulas repetidas, exclusiones explícitas de boilerplate, revisión HTML acotada y salida PDF anotada verificada contra el documento fuente

Version 2.805.0

Added

  • Las plantillas HTML de negocios importadas admiten paneles flex/grid anidados, filas con ajuste de línea, spans de columnas de grid, imágenes y controles de formulario en cajas paralelas; los recursos font-face suministrados explícitamente se conservan durante la incrustación diferida, con un presupuesto de caché separado para las imágenes decodificadas

Version 2.804.0

Added

  • El núcleo compartido de objetos PDF, E/S directa de archivos, decodificación de contenido y fuentes, compresión, criptografía y escritura se compila ahora como código Linux nativo con mapeo y sincronización POSIX, conserva las APIs de Windows y serializa correctamente las entradas xref clásicas

Version 2.803.0

Added

  • Se agregó el registro de capas de perfiles de factura versionados y de reglas por país, la validación de facturas CII XML explícitas o híbridas con reportes que muestran el alcance, y la ejecución de las reglas oficiales de facturación XRechnung 3.0.2 y CTC de Francia mediante un motor Saxon configurado explícitamente, con selección de perfil publicada y diagnósticos que bloquean ante cualquier fallo

Version 2.802.0

Added

  • La exportación de tablas tipadas a libros XLSX sin depender de Office ya funciona vía APIs nativas, jobs JSON y la C ABI, y preserva tipos de valores, formatos de moneda y porcentajes, celdas combinadas, enteros grandes exactos y metadatos opcionales del documento fuente, con staging acotado y publicación a prueba de fallos

Version 2.801.0

Added

  • Los jobs JSON y la C ABI pueden exportar las páginas cargadas seleccionadas como HTML, XHTML, XML o JSON semánticos, y las tablas tipadas como CSV o JSON, con opciones nativas, staging acotado, cancelación, compatibilidad con campos de firma, preservación del estado de la fuente y publicación atómica de archivos

Version 2.800.2

Fixed

  • Las cachés de relaciones de formularios cargados se invalidan antes del rollback del grafo, así los jobs de firma y las ediciones fallidas dejan el documento original en un estado seguro para consultarlo y reutilizarlo

Version 2.800.1

Fixed

  • El renderizado paralelo ordenado ahora admite las reservas de memoria en el orden de entrada, de modo que las páginas posteriores no pueden agotar el presupuesto mientras la entrega espera por una página anterior; se conservan la cancelación y la salida acotada en Delphi y FPC

Version 2.800.0

Changed

  • El texto SVG, las apariencias FreeText cargadas y los reemplazos de texto cargados ahora preservan las características de shaping del documento, los flags de auto-shaping de la escritura y las selecciones de script e idioma de GSUB, usando los datos OpenType de cada fuente seleccionada y reteniendo los mapeos Unicode entre cambios de fuente

Version 2.799.0

Changed

  • Las importaciones vectoriales SVG ahora retienen los arrays de guiones heredados, los offsets de guion y los límites de inglete para trazos sólidos y con degradado, mientras que el renderizado nativo preserva los patrones de guiones escalonados y de longitud cero

Version 2.798.0

Changed

  • El texto Unicode con estilos ahora retiene las fuentes bold e italic a lo largo del layout de fallback; las sobrecargas conscientes del estilo ResolveFontForCodePoint y AnalyzeUnresolvedGlyphs hacen que el preflight coincida con la salida, y las referencias de caracteres XML en FPC preservan los escalares Unicode en lugar de corromper el texto

Version 2.797.0

Fixed

  • Las importaciones SVG ahora componen la opacidad de objetos y grupos mediante Forms de transparencia vectorial aislados, preservan el alpha independiente del relleno y del trazo, y retienen el comportamiento anidado de recursos, clips, máscaras y links bajo presupuestos explícitos

Version 2.796.0

Added

  • La conversión de archivado raster PDF/A-4 acotada ya está disponible vía jobs JSON y la C ABI, con aceptación explícita de la pérdida de información, fallos de presupuesto estructurados, cancelación cooperativa, restauración del estado de la fuente y salida atómica de archivos

Version 2.795.0

Added

  • Los PDFs cargados ahora pueden normalizarse en documentos raster PDF/A-4 validados, con renderizado nativo estricto, color sRGB verificado, decodificación y recursos raster acotados, cancelación, protección de los alias de la fuente y publicación atómica de archivos; el reporte de conversión identifica el contenido interactivo y adjunto que se eliminó deliberadamente

Version 2.794.0

Changed

  • La importación HTML5 ahora usa líneas de texto de dirección mixta medidas, paginación con control de viudas y huérfanas, separación silábica opcional, layouts flex y grid acotados y diagnósticos CSS observables; los bitmaps nativos de FPC sincronizan el dibujo GDI directo con las cachés de imágenes del LCL

Version 2.793.0

Changed

  • Se agregaron eventos acotados de alta y baja dinámicas del instance-manager de XFA y de presencia de plantillas, con revinculación del layout, preservación del estado de edición, rollback atómico, límites de recursos y salida XDP persistente

Version 2.792.0

Changed

  • La importación SVG se amplió con fuentes Unicode incrustadas medidas, recursos PNG/JPEG, trazos con degradado y soft masks reales de Alpha y Luminosity, y se corrigieron el alpha de grupos nativo y la composición de superficies bitmap de FPC

Version 2.791.0

Changed

  • Se agregó reemplazo de texto Unicode cargado con vista previa, fuentes incrustadas, políticas de ajuste de línea y de ancho, diagnósticos por coincidencia, detección de planes desactualizados, recursos acotados, commits atómicos y operaciones de vista previa y aplicación vía JSON y la C ABI

Version 2.790.0

Changed

  • Se implementaron las operaciones estándar de pila y de arrays transitorios de CFF Type 2 en el renderizado de glifos, y se preservan las dependencias de subrutinas locales y globales derivadas de operaciones aritméticas durante el subsetting de fuentes

Version 2.789.0

Changed

  • La decodificación de códigos de barras incorporada se amplió con Code 128, EAN/UPC, recuperación de QR consciente de la perspectiva, Data Matrix ECC 200 y PDF417 con corrección Reed-Solomon y decodificación acotada del payload

Version 2.788.0

Changed

  • Windows FPC ahora soporta TIFF nativo, conversión de JPEG/JPX e ICC, además de JBIG2 y Zopfli, mediante un puente de codecs validado por ABI, y usa threads de trabajo reales para el renderizado de páginas, páginas ordenadas, tiles, bandas y tiles JPEG 2000 con presupuestos, callbacks ordenados, cancelación y píxeles deterministas

Version 2.787.0

Changed

  • La C ABI y el procesador de jobs JSON ahora comparten operaciones de documentos versionadas por schema para capacidades, renderizado, texto Unicode y formularios, capas OCR, redacción y firma PFX, con presupuestos de recursos explícitos, rollback ante fallos de callbacks y salidas de archivos atómicas; las entradas multipágina de los callbacks se cargan correctamente

Version 2.786.0

Changed

  • La edición de FreeText cargados ahora reconstruye atómicamente las apariencias Unicode y rich-text incrustadas, con ajuste de línea, alineación, opacidad, rotación, callouts, insets y políticas explícitas de overflow; los payloads de los streams reescritos se capturan antes de la mutación, de modo que el rollback de la transacción restaura el texto original

Version 2.785.0

Added

  • La demo de consola SearchableOCR agrega los motores de OCR incorporado y de Tesseract por DLL o CLI junto a RapidOCR, genera un ejemplo de escaneo de tres páginas y expone selección de páginas, filtrado por confianza, presupuestos de reconocimiento y estadísticas detalladas de conversión

Version 2.784.0

Changed

  • Las importaciones por lotes de FDF y XFDF ahora revierten las actualizaciones previas de campos y anotaciones después de un fallo de importación, preservan las transacciones propiedad del llamador y limpian los metadatos de resultados de intercambio fallidos

Version 2.782.0

Added

  • El adaptador OCR local de Tesseract acepta segmentación de página configurable, modo del motor de reconocimiento, límites de píxeles y timeouts mediante THPDFTesseractOptions para reconocimiento de línea única, palabra única, texto disperso y bloques verticales

Fixed

  • El adaptador nativo de Tesseract usa la dimensión transversal de la caja de texto para las líneas base predominantemente verticales, lo que evita que las longitudes de palabras verticales inflen los tamaños de texto del PDF buscable

Version 2.781.0

Changed

  • Las colecciones de demos de Delphi y C++Builder ahora incluyen una guía multipágina de campos de códigos de barras con etiquetas de negocios y un manual completo de navegación con bookmarks jerárquicos, destinos con nombre y links funcionales a documentos complementarios; las recetas mínimas de PDF/A se movieron a Miscellaneous y se retiraron los proyectos independientes redundantes de outlines y metadatos

Version 2.780.1

Fixed

  • La página de anotaciones del Showcase separa los rótulos de vista previa de contenido de las apariencias en vivo de free-text y stamps, lo que evita etiquetas superpuestas en los lectores de PDF sin perder la identificación de los ejemplos cuando las apariencias de las anotaciones están ocultas

Version 2.780.0

Changed

  • Los catálogos de demos ahora priorizan flujos de trabajo completos y separan diecisiete ejemplos mínimos, enfocados o antiguos en subcarpetas de Miscellaneous; los proyectos redundantes ImageCompression y AddDelPages se eliminaron, con su funcionalidad conservada en las demos principales y en las suites de regresión

Version 2.779.0

Added

  • Las demos Showcase de Delphi y C++Builder ahora abren un estudio de documentos completo de diez capítulos con vista previa incrustada, resaltado de búsquedas, portadas personalizadas, marcas de agua de revisión a un clic, exportación verificada de páginas y copias protegidas con AES-256 R6 que retienen las ediciones; ambas usan el mismo motor de documentos y soportan un comando de generación sin ventana

Version 2.778.1

Removed

  • Las demos GUI TestNumeric redundantes de Delphi y C++Builder se retiraron en favor de tests de regresión numérica automatizados que verifican las dimensiones fraccionales de página y los operandos de dibujo después de guardar y recargar PDFs sin comprimir y comprimidos con Flate, con cobertura persistida de arrays numéricos

Version 2.778.0

Changed

  • Las demos de páginas y de reportes para clientes ahora ofrecen flujos de trabajo prácticos: PageOperations edita PDFs reales con comandos de extraer, eliminar, mover, insertar y agregar, y verifica recargando el documento, mientras que DBTable usa el motor de tablas para filas con ajuste de línea, encabezados repetidos y paginación automática con un ejemplo por defecto que no requiere base de datos

Version 2.777.1

Fixed

  • El OCR rechaza UTF-8 mal formado, caracteres de control no soportados y salidas incompatibles de modelos de detección nativos antes de publicar el texto, y descuenta los resultados de reconocimiento descartados al aplicar los límites de palabras entre páginas

Version 2.777.0

Fixed

  • El OCR incorporado acepta páginas en blanco o no reconocidas como resultados vacíos exitosos para que los lotes de documentos escaneados puedan continuar, conserva los píxeles del bitmap de Windows FPC y comprueba la cancelación y los límites de tiempo durante todo el análisis de imágenes
  • La clasificación de ángulos del RapidOCR nativo preserva las proporciones de las líneas cortas y exige predicciones confiables de inversión antes de rotar los recortes de texto
  • El adaptador local de RapidOCR para Python conserva el espaciado de línea y la puntuación reconocidos en lugar de publicar caracteres individuales que pueden acabar con espacios no deseados, y el adaptador DLL de Tesseract rechaza los caracteres de control C1 antes de publicar el texto

Version 2.776.0

Added

  • Las capas de texto de PDFs escaneados pueden reemplazar atómicamente los streams OCR de HotPDF marcados después de guardar y recargar, conservan las capas existentes cuando el reconocimiento falla o sale vacío, reportan las páginas reemplazadas y usan un ejemplo de consola nativo y multilingüe de RapidOCR para la conversión sin sobrescribir archivos existentes

Fixed

  • Las palabras OCR latinas y cirílicas adyacentes con un espacio entre palabras en la misma línea reciben espacios Unicode explícitos para una búsqueda de frases y una copia estables, mientras que las palabras CJK adyacentes permanecen sin separar
  • El renderizado de escaneos JPEG en Windows FPC retiene los píxeles decodificados al convertir al formato bitmap de OCR, evitando una entrada de reconocimiento en blanco por un cambio de formato de píxel del LCL

Version 2.775.0

Added

  • El RapidOCR nativo incorpora presets de modelos locales para chino simplificado y tradicional, inglés, francés, alemán, español, portugués, italiano, neerlandés, turco, japonés, coreano, ruso, árabe y hindi, con diccionarios de caracteres coincidentes, instalación de modelos verificada, orden de lectura horizontal y salida Unicode multilingüe en Delphi, C++Builder y Windows FPC/Lazarus

Fixed

  • Los adaptadores OCR de proceso local reintentan la limpieza de la salida temporal cuando los archivos de diagnóstico permanecen bloqueados brevemente tras terminar el worker

Version 2.774.0

Added

  • Un adaptador DLL nativo de RapidOCR mantiene los modelos ONNX locales en el proceso, reconoce snapshots de bitmaps sin Python, soporta clasificación de ángulos opcional y PDFs buscables Unicode, y valida los presupuestos de salida con cancelación cooperativa en los builds de Delphi, C++Builder y Windows FPC/Lazarus

Version 2.773.0

Added

  • El adaptador local de RapidOCR incorpora configuración explícita de modelos ONNX, clasificación de ángulos opcional, diccionarios de caracteres y fuentes locales, controles de hilos de CPU, preflight sin conexión y presupuestos de reconocimiento para PDFs buscables Unicode en los builds de Delphi, C++Builder y FPC/Lazarus

Version 2.772.1

Fixed

  • Los adaptadores DLL y CLI de Tesseract ahora funcionan en los builds Win32 y Win64 de Windows FPC/Lazarus, conservando las palabras OCR Unicode y leyendo los píxeles actuales de la imagen LCL para las capas de texto buscables del PDF

Version 2.772.0

Added

  • Un adaptador DLL nativo opcional de Tesseract agrega OCR multilingüe con modos configurables de segmentación de página y de motor, palabras Unicode, confianza, límites de palabras y líneas base, además de cancelación cooperativa, plazos de reconocimiento y presupuestos de salida para PDFs escaneados buscables

Version 2.771.1

Changed

  • El OCR incorporado reconoce texto ASCII normal, en negrita, en cursiva y en negrita cursiva sobre fondos claros o predominantemente oscuros, acepta letras desvanecidas con suficiente contraste en escala de grises y omite las palabras que contienen glifos retenidos dudosos en lugar de descartar caracteres en silencio

Version 2.770.175

Fixed

  • LoadedDocInspector y SignatureValidator devuelven un código de salida de fallo para PDFs ilegibles y rechazan argumentos de comando inválidos en lugar de reportar una inspección vacía exitosa

Version 2.770.174

Fixed

  • LoadedImageExport valida cada destino de imagen antes de exportar cualquier página, evita que alias de rutas sobrescriban el PDF de entrada u otra página seleccionada, y rechaza los nombres de formato no soportados

Version 2.770.173

Fixed

  • El caché en disco de páginas renderizadas omite las carpetas de documentos enlazadas durante la recuperación, la búsqueda, el almacenamiento, la invalidación y la expulsión, preservando los archivos fuera del caché

Version 2.770.172

Fixed

  • Los jobs JSON rechazan sintaxis mal formada, contenido sobrante, números fuera del rango finito de Double y anidamiento excesivo antes de ejecutar cualquier operación, y liberan los valores parcialmente parseados en caso de fallo

Version 2.770.171

Fixed

  • PreflightCLI revisa el plan completo de salidas de reportes antes de escribir, protege los PDFs de entrada de alias de archivos y rechaza destinos de reportes en conflicto; los escaneos recursivos omiten los directorios hijos enlazados para evitar ciclos

Version 2.770.170

Fixed

  • CopyPage verifica las identidades de los archivos antes de exportar, rechaza alias de salida en conflicto y coloca las salidas con nombre automático junto a las entradas sin extensión en directorios que contienen puntos

Version 2.770.169

Fixed

  • Los valores de jobs JSON preservan los caracteres nulo escapados, serializan números finitos fuera del rango de 64 bits con signo sin desbordamiento de enteros y devuelven valores por defecto para parámetros enteros fuera de rango sin cambiar el locale del proceso

Version 2.770.168

Fixed

  • La recuperación del parser de objetos simples termina ante llaves de cierre sueltas en cuerpos de arrays sin llaves y preserva los números válidos y las claves de diccionario inmediatamente después de delimitadores mal formados

Version 2.770.167

Fixed

  • HotPDFCLI rechaza las rutas de salida que son alias de archivos de entrada y revisa todas las rutas generadas antes de comenzar la exportación por lotes, evitando que los comandos trunquen o reemplacen sus datos de origen

Version 2.770.166

Fixed

  • El ejemplo ExtractText protege su PDF de entrada cuando una salida usa un directory junction o un hard link, y LoadedImageExport reporta fallo para documentos ilegibles o exportaciones de página incompletas

Version 2.770.165

Fixed

  • Las lecturas directas de archivos invalidan los rellenos de caché incompletos tras un fallo de E/S y acotan de forma segura los rangos de lectura anticipada cerca del límite de offsets de 64 bits con signo

Version 2.770.164

Fixed

  • La decodificación RunLength asigna solo el tamaño del payload decodificado y valida las secuencias mal formadas antes de asignar la salida, evitando reservas excesivas de memoria en streams con terminadores tempranos

Version 2.770.163

Fixed

  • Los ejemplos de Delphi y C++Builder localizan las imágenes, metafiles, perfiles de color y fixtures de firma opcionales incluidos tanto en las carpetas de proyecto como en los directorios de salida de build anidados

Version 2.770.162

Fixed

  • Los ejemplos HugeFileBenchmark rechazan las rutas de PDFs generados que coinciden con algún documento de entrada antes de comenzar un lote de benchmark
  • El ejemplo de C++Builder preserva los subdirectorios relativos de entrada para los PDFs generados, evitando que entradas recursivas con el mismo nombre compartan un archivo de salida
  • Las operaciones fallidas, las violaciones del límite de memoria y las cargas inválidas de cero páginas ahora producen un código de salida distinto de cero conservando el reporte de benchmark

Version 2.770.161

Fixed

  • Las CLIs de Preflight de Delphi y C++Builder rechazan las rutas de salida de reportes y agregados que coinciden con un PDF de entrada, evitando que los reportes sobrescriban los documentos de origen

Version 2.770.160

Fixed

  • El parseo de ASN.1 rechaza las codificaciones high-tag-number que exceden el rango de tags de 32 bits soportado en lugar de aceptar un número de tag con wrap

Version 2.770.159

Fixed

  • La CLI de Preflight de C++Builder preserva los subdirectorios relativos para los reportes recursivos y los enlaces del dashboard, así que los PDFs con el mismo nombre ya no se sobrescriben entre sí
  • Los dashboards de Preflight de Delphi y C++Builder codifican correctamente los enlaces de reportes con caracteres especiales y nombres de directorio no ASCII
  • Los fallos de validación estándar de C++Builder ahora devuelven el código de salida 3 y aparecen como inválidos en el dashboard para todos los formatos de reporte, incluyendo las entradas que no cargan

Version 2.770.158

Fixed

  • El ejemplo de fusión de PDFs de C++Builder resuelve las rutas de entrada relativas desde el directorio del ejecutable y evita que los diálogos de archivos cambien el directorio de trabajo
  • Cada bookmark generado ahora apunta a la primera página copiada de su propio documento de entrada

Version 2.770.157

Fixed

  • El parser de objetos normaliza los finales de línea CR y CRLF sin escapar dentro de cadenas literales de PDF a LF, conservando los retornos de carro escapados y las continuaciones de línea

Version 2.770.156

Fixed

  • La compresión de streams LZW reporta la cantidad real de bytes escritos para entrada vacía
  • La compresión y descompresión LZW hacen el round-trip correctamente con InitialCodeSize en 2, y la compresión rechaza literales fuera de un alfabeto reducido antes de escribir la salida

Version 2.770.155

Fixed

  • En builds Win64, importar datos de ruta SVG o XPS con un número que tiene un exponente cercano a 100, como 1e-100 o 5e99, ya no lanza un overflow de punto flotante cuando la aplicación desmascara las excepciones de punto flotante
  • Estos números ahora se leen con su valor real, así que una mantisa larga con un exponente negativo grande se importa correctamente

Version 2.770.154

Fixed

  • DecodeLoadedPageBarcodes ahora reporta los límites correctos de los códigos de barras en páginas cuyo CropBox difiere del MediaBox cuando no hay región de decodificación configurada; antes las posiciones quedaban desplazadas por el offset del crop box, o escaladas contra la altura de página equivocada
  • Los hallazgos de rostros de DetectLoadedRedactionFindings (con la detección de rostros habilitada) ahora caen sobre los rostros detectados en esas páginas, en lugar de quedar desplazados respecto de ellos
  • Ambas funciones renderizan el área visible de la página (el CropBox recortado al MediaBox) y ahora mapean las posiciones detectadas de vuelta a través de esa misma área; el page box que se pasa a un IHPDFFaceDetector personalizado ahora coincide con el bitmap que recibe
  • La decodificación de códigos de barras con región explícita, y las páginas sin CropBox o cuyo CropBox es igual al MediaBox, quedan sin cambios

Version 2.770.153

Fixed

  • ApplyLoadedOCRTextLayer ahora coloca correctamente la capa de texto invisible en páginas cuyo CropBox difiere del MediaBox; antes el texto buscable quedaba desplazado por el offset del crop box, o escalado contra la altura de página equivocada, así que las selecciones y los resultados de búsqueda no coincidían con las palabras visibles
  • El raster de OCR se renderiza desde el área visible de la página (el CropBox recortado al MediaBox), y las posiciones de las palabras reconocidas ahora se mapean de vuelta a través de esa misma área
  • El page box que se entrega a un IHPDFOCREngine personalizado en THPDFOCRRequest es ahora el área visible renderizada, coincidiendo con el bitmap que recibe
  • Las páginas sin CropBox, o cuyo CropBox es igual al MediaBox, quedan sin cambios

Version 2.770.152

Fixed

  • GetLoadedInvoiceSummary ahora devuelve el nombre del comprador (BT-44) como texto decodificado, así que nombres con letras no ASCII como "Müller & Söhne" ya no vuelven como bytes UTF-8 en crudo con el escape XML aún puesto
  • El nombre del comprador ahora siempre se lee de la parte comercial del comprador misma, igual que el nombre del vendedor y los demás campos del resumen
  • ValidateVisualXmlConsistency también sale beneficiado: un nombre de comprador con letras acentuadas o caracteres escapados ahora se compara con el texto visible de la página tal como está escrito

Version 2.770.151

Fixed

  • THPDFTable ahora mantiene en una sola página las filas atadas entre sí por un RowSpan: cuando el grupo no cabe en el espacio restante, todo el grupo pasa a la página siguiente junto con el encabezado repetido
  • Una celda que abarca varias filas ya no se extiende más allá del margen inferior mientras las filas que cubre continúan en la página siguiente
  • Un grupo de row-span más alto que una página completa sigue dividiéndose fila por fila, con sus celdas extendidas cortadas en el margen inferior de cada página
  • TotalHeightRendered refleja el grupo movido en la última página

Version 2.770.150

Fixed

  • Las celdas de THPDFTable con un ColSpan o RowSpan de cero o menos ahora se dibujan como celdas simples, tal como las colocó la cuadrícula de la tabla, en lugar de empujar las celdas siguientes a columnas equivocadas
  • Los spans negativos ya no hacen que la tabla lea fuera de su cuadrícula, y los spans que pasan de la última columna o fila se cortan en el borde de la tabla también al medir y dibujar
  • Una celda cuya primera palabra es más ancha que la columna ya no empieza con una línea vacía, así que su fila no es más alta de lo que el texto ajustado necesita

Version 2.770.149

Security

  • Los formularios XFA que declaran una entidad interna en su DOCTYPE ya no pueden disparar el consumo de memoria referenciando muchas veces una entidad grande: el texto sustituido por entidades internas se limita a 16 MB por documento
  • Un valor de entidad interna individual de más de 1 MB se rechaza
  • Los documentos que excedan cualquiera de los dos límites fallan al cargar con un EHPDFXFAError en lugar de expandirse a gigabytes de texto; el uso ordinario de entidades no se ve afectado
  • El texto con muchas referencias a entidades o caracteres también se decodifica en tiempo lineal

Version 2.770.148

Fixed

  • RecalculateLoadedFormFieldsIncremental ahora trata igual todos los campos pasados como cambiados, sin importar el orden en que se listan los nombres
  • Un campo calculado que fue escrito directamente junto con uno de sus campos fuente conserva el valor escrito en lugar de recalcularse solo cuando se lista después de esa fuente
  • Los campos que dependen de los campos cambiados siguen recalculándose una vez, en orden de cálculo

Version 2.770.147

Fixed

  • Los códigos de barras GS1-128 con start code A (THPDFBarcode tipo 20) ahora codifican sus datos en el code set A, como lo hace Code 128 A
  • Las letras minúsculas en esos códigos de barras ahora se escriben con un SHIFT al code set B en lugar de un codeword del set B que los escáneres leen como carácter de control en el set A
  • Los símbolos GS1-128 A escaneados que contienen texto en minúsculas devuelven por lo tanto el texto original

Version 2.770.146

Fixed

  • Los códigos de barras add-on EAN-2 y EAN-5 (THPDFBarcode tipos 18 y 19) ya no agregan un dígito calculado a Text cuando Checksum está habilitado
  • Dibujar ese código de barras repetidamente ahora produce el mismo símbolo cada vez, en lugar de hacer crecer el texto un dígito por cada redibujado y cambiar el patrón de barras
  • Los símbolos add-on no llevan carácter de verificación por definición, así que Checksum se ignora para ellos; el patrón de paridad sigue derivándose del valor como antes

Version 2.770.145

Fixed

  • La exportación XFDF ahora decodifica los valores de campos de formulario y el texto de anotaciones como cadenas de texto PDF (ISO 32000-1 7.9.2.2): los valores UTF-16BE, las cadenas hexadecimales y los caracteres PDFDocEncoding como el bullet se escriben como el texto Unicode real en lugar de dígitos hexadecimales o basura de code page
  • Los contenidos de anotaciones, autor, asunto, estado y texto superpuesto exportados a XFDF conservan los caracteres no latinos, por ejemplo comentarios en chino o cirílico
  • El texto enriquecido (/RC, /RV) que empieza con una declaración XML ahora se incrusta sin ella, así que el XFDF exportado sigue siendo XML bien formado
  • La importación XFDF ya no convierte el texto por la code page ANSI del sistema: los valores que PDFDocEncoding puede representar se almacenan como tales, y cualquier otra cosa como cadena de texto UTF-16BE, tanto para campos de formulario como para texto de anotaciones
  • Los archivos XFDF exportados ahora hacen el round-trip de los caracteres fuera de la code page ANSI a través de ImportLoadedFormFromXFDF y ImportLoadedAnnotationsFromXFDF sin convertirlos en signos de interrogación

Version 2.770.144

Fixed

  • Los nombres y demás texto del resumen de factura ahora se decodifican del XML de factura UTF-8, así que un vendedor como "Müller GmbH" ya no vuelve como caracteres multibyte ilegibles
  • Los caracteres de marcado escapados y las referencias de carácter se resuelven, así que "A & B" en el XML se reporta como "A & B"
  • ValidateVisualXmlConsistency ya no reporta como ausente del texto visible de la página un nombre de vendedor con letras acentuadas o un ampersand cuando sí está impreso ahí
  • El texto del resumen se devuelve en la code page ANSI del sistema, ya que los campos del record de resumen son cadenas ANSI; los caracteres que esa code page no puede representar se convierten en signos de interrogación

Version 2.770.143

Fixed

  • GetLoadedInvoiceSummary ahora reporta el total neto a nivel de factura (BT-106) desde la sumación monetaria del encabezado en lugar del monto del primer line item
  • El total de impuestos, el total general y el monto adeudado se leen igualmente de la sumación del encabezado, inclusive para facturas ZUGFeRD 1.0
  • La fecha de emisión (BT-2) ahora se devuelve como el valor de fecha plano, por ejemplo 20260305, en lugar de incluir el marcado DateTimeString anidado
  • HPDFFacturXXMLElementText ahora devuelve los datos de carácter del elemento completo sin los tags hijos, y ya no coincide con elementos cuyo nombre apenas empieza con el nombre solicitado

Version 2.770.142

Fixed

  • La exportación XFDF ahora escribe los caracteres fuera del Basic Multilingual Plane, como emoji o ideogramas CJK raros, como UTF-8 de cuatro bytes válido en lugar de codificar cada mitad surrogate por separado, así que los lectores XML estrictos aceptan el archivo
  • La importación XFDF ahora decodifica las referencias de carácter por encima de U+FFFF, como 😀, al carácter completo en lugar de truncarlo a un carácter BMP sin relación
  • Las referencias de carácter que no nombran un valor escalar Unicode, y los surrogates sin pareja en la exportación, ahora se convierten en U+FFFD en lugar de corromper el texto
  • Los archivos XFDF escritos por versiones anteriores siguen importando correctamente

Version 2.770.141

Fixed

  • Los valores de campos y el texto de anotaciones que contienen backslashes, como rutas de Windows tipo C:\Data\2024\001, ahora sobreviven a una exportación e importación XFDF sin cambios, en lugar de que las secuencias de dígitos se conviertan en caracteres de control
  • Cuando un backslash de otro modo se leería como escape, la exportación XFDF ahora lo escribe como el escape octal \134, como en una cadena literal de PDF (ISO 19444-1 5.8.2)
  • La importación XFDF solo decodifica los escapes octales que el formato usa para caracteres de control y backslashes; las demás secuencias de backslash de archivos de terceros se conservan literalmente
  • El texto SVG leído por el mismo lector XML ligero ya no pierde tampoco las secuencias de backslash

Version 2.770.140

Fixed

  • El caché persistente de páginas renderizadas que habilita RenderCacheFolder ahora funciona para documentos abiertos con LoadFromFile, LoadFromStream y LoadFromRandomAccessSource; antes el nivel de disco se omitía en las cargas ordinarias, así que ninguna página se escribía o leía de la carpeta
  • Los documentos cargados desde un archivo se identifican por su tamaño, su fecha de última escritura y sus bytes iniciales y finales, así que reabrir un archivo sin cambios lee sus páginas del caché sin hashear el archivo completo
  • Los documentos cargados desde un stream o una fuente de acceso aleatorio se identifican por el SHA-256 de su contenido; configure RenderCacheFolder antes de la carga para que estos documentos usen el nivel de disco
  • Un documento editado después de cargarse ya no lee ni escribe entradas de disco por el resto de esa carga, así que las páginas editadas nunca se sirven desde, ni se almacenan como, las páginas en caché del archivo original
  • Las entradas de disco ahora también dependen del backend de renderizado de página y del flujo de proofing ICC, así que un backend o perfil de salida distinto no reutiliza páginas renderizadas con otras configuraciones; los documentos cifrados nunca se escriben al caché de disco

Version 2.770.139

Fixed

  • Importar archivos XFDF grandes ya no se ralentiza con el cuadrado del tamaño del archivo: un archivo con miles de campos o anotaciones ahora se parsea en milisegundos en lugar de en segundos o minutos
  • Los valores de campos con muchos saltos de línea u otras referencias de carácter se decodifican en tiempo lineal
  • La memoria pico al parsear XFDF ya no crece con el número de elementos multiplicado por el tamaño del archivo
  • La entrada SVG leída por el mismo lector XML ligero se beneficia de la misma aceleración

Version 2.770.138

Fixed

  • Cuando DecodeLoadedPageBarcodes reintenta una página girada 90 o 270 grados, el raster entregado al decodificador ahora está girado en sentido horario, como documenta AttemptRotationDegrees
  • Los símbolos encontrados solo en esos reintentos ahora se reportan en su posición real en la página en lugar de la posición espejada punto por punto
  • La orientación reportada para esos símbolos ahora coincide con su dirección de lectura en la página en lugar de estar desviada 180 grados
  • Los decodificadores de códigos de barras personalizados que dependen del giro horario documentado ahora reciben rasters girados correctamente

Version 2.770.137

Fixed

  • Copiar páginas entre documentos (CopyPageFromDocument, CopyPageByPhysicalIndex, los métodos de importación y fusión de páginas) ya no convierte en diccionarios o arrays las cadenas de texto que contienen "<<" y ">>" o "[" y "]"; un comentario de anotación como "Read <<this>> [now]" se copiaba como un diccionario roto
  • Las cadenas hexadecimales, como los nombres e identificadores de anotaciones, se copian en su forma hexadecimal en lugar de escribirse como cadenas literales de sus dígitos hexadecimales

Version 2.770.136

Fixed

  • Las anotaciones creadas en páginas nuevas (AddStampAnnotation, AddTextAnnotation y los demás métodos de anotaciones de THPDFPage) ahora escriben /Rect con la esquina inferior izquierda primero, [llx lly urx ury]; varias de ellas escribían el borde superior antes del inferior, por ejemplo [395 712 575 652], algo que los visores aceptan pero los validadores PDF/A y algunas herramientas de procesamiento rechazan o leen mal

Version 2.770.135

Changed

  • THotPDF.RenderCacheFolder ahora es un string (UnicodeString en Delphi 2009 y posteriores, UnicodeString en C++Builder) en lugar de un AnsiString, así que una carpeta de caché cuya ruta contiene caracteres fuera de la code page del sistema, como un nombre de usuario chino en un Windows en inglés, se usa tal cual en lugar de convertirse en signos de interrogación
  • El código que asigna un AnsiString a la propiedad sigue compilando; el valor se convierte a Unicode en la asignación

Version 2.770.134

Fixed

  • SetOptionalContentGroupUsage con la categoría Zoom ahora escribe el rango de zoom como los números /min y /max, como los define la especificación PDF; todo el valor se escribía como una cadena de texto bajo /Min, que los visores ignoran, así que el rango de zoom de la capa no tenía efecto
  • El valor de Zoom es la magnificación mínima seguida opcionalmente del máximo, separados por un espacio (por ejemplo '0.5 4'); un valor que no empieza con un número ahora lanza una excepción

Version 2.770.133

Fixed

  • El subsetting de fuentes CFF/OpenType embebidas ya no descarta subrutinas que los glifos aún usan; los glifos con más de ocho hints, hints hstemhm o counter masks se escaneaban incorrectamente, así que una subrutina en uso podía quedar reemplazada por una vacía y el glifo renderizarse con contornos faltantes o rotos

Version 2.770.132

Fixed

  • RegisterNChannelColorSpace (la sobrecarga con definiciones de colorantes spot) ahora escribe correctamente como claves de los diccionarios /Colorants, /Solidities y /DotGain los nombres de colorantes que contienen espacios o delimitadores, como "PANTONE 185 C"; el nombre en crudo rompía la sintaxis del archivo
  • AddPDFX6ExternalOutputIntentSpotData escribe sus claves de colorantes de datos de solidity y espectrales de la misma manera

Version 2.770.131

Fixed

  • Los metadatos XMP escritos con EnableXMPMetadata ahora llevan Title, Author, Subject y Keywords como UTF-8 válido cuando contienen texto en la code page del sistema (por ejemplo caracteres acentuados o chinos asignados como AnsiString); los bytes en crudo de la code page hacían el paquete XML inválido, algo que los validadores PDF/A y los lectores XMP rechazan
  • Los caracteres de control que XML 1.0 no permite se dejan fuera de estos valores XMP

Version 2.770.130

Fixed

  • Las imágenes JBIG2 escritas con JBIG2Options.AccumulateGlobalsAcrossPages vuelven a decodificarse correctamente cuando una página posterior agrega símbolos que las páginas anteriores no usaron; esas páginas seguían refiriendo el globals stream de la primera página, que carece de los símbolos nuevos, así que los visores las mostraban ilegibles o directamente no las mostraban
  • Cada vez que una página agrega símbolos, se escribe un globals stream que contiene el diccionario completo hasta esa página y se usa de ahí en adelante; las páginas que no agregan símbolos siguen compartiendo el más reciente

Version 2.770.129

Fixed

  • Guardar un documento cargado cuyos objetos tienen un número de generación distinto de 0 ahora escribe números de objeto consistentes: una reescritura completa (SaveLoadedDocument y métodos relacionados) escribe cada objeto, referencia y entrada de cross-reference con generación 0, donde los encabezados de objeto y el trailer solían conservar la generación vieja mientras que las referencias y la tabla de cross-reference usaban 0
  • Las actualizaciones incrementales (SaveIncrementalUpdate y métodos relacionados) ahora refieren a los objetos existentes con su número de generación real; las referencias siempre se escribían con generación 0 y por eso apuntaban a objetos que no existen cuando el original usaba otra generación

Version 2.770.128

Fixed

  • THPDFPage.TextOutHTML con un MaxWidth ya no pierde el formato en un salto de línea: cuando varios runs con estilos distintos pasaban juntos a la línea siguiente, se fusionaban en un solo run dibujado con el estilo vigente en el salto, así que se perdían su color, su estilo de negrita o cursiva, su fuente, su tamaño, su offset de sub/superíndice y su enlace. Cada run ahora conserva su propio formato en la nueva línea

Version 2.770.127

Fixed

  • InvalidateRenderedPageCache ahora también descarta las entradas de glifos Type 3 y halftone compartidas por el renderizado paralelo; tras una invalidación de todo el documento, el siguiente render paralelo podía reutilizar glifos en caché del contenido anterior
  • PreflightLoadedPAdES ya no vacía el caché de renderizado compartido como efecto secundario de verificar el nivel PAdES de una firma, así que los renders posteriores a un preflight conservan sus glifos en caché

Version 2.770.126

Fixed

  • El análisis de revisión y modificación de documentos firmados ahora reporta correctamente los nombres de campos cuando el nombre contiene paréntesis o termina en uno, por ejemplo "Total (net)"; el último carácter se cortaba
  • Los nombres de campos escritos con escapes octales o con una continuación de línea con backslash también se decodifican

Version 2.770.125

Fixed

  • SplitPDFToFiles ya no abre cada archivo de salida en el visor de PDFs por defecto al escribirlo; los documentos internos que crea ahora tienen AutoLaunch desactivado

Version 2.770.124

Fixed

  • GetLoadedTrailerID ahora devuelve el identificador de archivo permanente del documento desde el array /ID del trailer, como texto hexadecimal; buscaba /ID en el catálogo del documento, donde nunca está, y por eso no reportaba identificador para prácticamente ningún archivo

Version 2.770.123

Fixed

  • SetLoadedOpenActionPage ahora escribe un destino que nombra la página solicitada; la referencia de página se escribía como 0 0 R, así que los visores no podían abrir el documento en esa página
  • El destino conserva la posición de vista actual (left y top nulos) en lugar de forzar 0 0, que saltaba a la esquina inferior izquierda de la página

Version 2.770.122

Fixed

  • SetLoadedViewerPreferences ahora escribe HideToolbar, HideMenubar, FitWindow y DisplayDocTitle como valores booleanos; se escribían como los nombres /true y /false, que los visores no tratan como booleanos, así que las preferencias no tenían efecto

Version 2.770.121

Fixed

  • CheckLoadedSignatureSeedValue ahora hace cumplir el valor seed /Reasons de un campo de firma cuando los flags /Ff del campo lo marcan como requerido (bit 4, valor 8); una razón no listada pasaba antes
  • Las razones se comparan de forma exacta, como las cadenas de texto en PDF; "approved" ya no satisface un valor seed que lista "Approved"

Version 2.770.120

Fixed

  • Estampar una página cargada más de una vez con StampLoadedPageText o StampLoadedPageShape ahora da a cada stamp su propia opacidad, y a cada stamp de texto su propia fuente estándar; el segundo stamp y los siguientes reutilizaban la transparencia y la fuente del primer stamp de la página
  • Un stamp con la misma opacidad y fuente que uno anterior sigue compartiendo sus recursos, así que los stamps idénticos repetidos no hacen crecer los recursos de la página

Version 2.770.119

Fixed

  • ExtractLoadedPageStructureText ahora sigue los elementos de estructura cuya entrada /K es un número de marked-content plano (por ejemplo /K 3 o /K [0 1]), la forma más común en PDFs etiquetados; esos elementos se ignoraban, así que el método no reportaba orden de estructura para muchos documentos etiquetados o devolvía su texto en orden de dibujo
  • El método ya no lee una entrada de catálogo inválida cuando un documento no tiene objeto raíz utilizable

Version 2.770.118

Fixed

  • StampLoadedPageText, StampLoadedPageImage, StampLoadedPageShape, StitchLoadedPage y FlattenLoadedAnnotations ya no rompen las páginas que heredan sus recursos del nodo /Pages padre; le daban a tal página un diccionario /Resources nuevo y vacío, lo que ocultaba las fuentes e imágenes heredadas y hacía que el texto y las imágenes originales de la página ya no se mostraran
  • La página ahora recibe su propia copia de los recursos heredados antes de agregar la nueva fuente, imagen o form

Version 2.770.117

Fixed

  • ComposeLoadedPagesNUp, ImposeLoadedPagesNUp, ImposeLoadedPagesBooklet y los métodos de stitching de páginas ahora arrastran consigo los recursos que una página de origen hereda de su nodo /Pages padre; esas páginas se colocaban sin sus fuentes e imágenes, así que su texto y sus imágenes faltaban o salían mal en la hoja compuesta

Version 2.770.116

Fixed

  • SaveIncrementalUpdateAuthenticated ahora puede escribir de vuelta al archivo desde el que se inició la actualización incremental; la actualización aceptada no podía reemplazar el objetivo porque el documento seguía teniendo la fuente abierta, y la llamada siempre fallaba con un error de commit por acceso denegado
  • Igual que con un SaveIncrementalUpdate en el mismo archivo, la fuente se libera antes del reemplazo, se reabre si el reemplazo falla, y hay que llamar de nuevo a BeginIncrementalUpdate antes de otro guardado incremental

Version 2.770.115

Fixed

  • RepairPDFUA2Structure ya no tarda tiempo exponencial en árboles de estructura cuyos elementos están listados por más de un padre (o forman un ciclo); la reparación de herencia de idioma, la reparación del orden de encabezados y el escaneo de marked-content detrás de la reparación de texto alternativo ahora recorren cada elemento de estructura una sola vez. Un árbol armado a propósito con 24 elementos donde cada uno lista dos veces al siguiente tardaba antes unos 40 segundos

Version 2.770.114

Fixed

  • HPDFPaginateTable ya no agrega páginas hasta agotar la memoria cuando una fila indivisible no cabe debajo de las filas de encabezado repetidas; en una página que contiene solo encabezados repetidos, la fila ahora se divide (o, cuando los encabezados llenan la página, se coloca y se le permite desbordar)
  • HPDFLayoutFootnotes y HPDFLayoutEndnotes ya no entran en bucle infinito cuando el separador no deja espacio en una página o la altura mínima de fragmento de una nota no puede cumplirse en una página vacía; la nota se coloca en esa página en su lugar

Version 2.770.113

Fixed

  • HPDFBalanceColumns ya no se cuelga cuando un elemento divisible tiene una línea más alta que la altura de la columna; pasaba a la siguiente columna para siempre. Esa línea ahora se coloca sola en la parte superior de una columna vacía, desbordándola, y el layout continúa

Version 2.770.112

Fixed

  • Los documentos cifrados con el standard security handler revisión 4 (filtros de cifrado RC4 o AES-128) vuelven a abrirse cuando su diccionario de cifrado omite la entrada /Length opcional de nivel superior; la carga fallaba con "Unsupported legacy Standard security handler V=4 R=4 Length=40"
  • Cualquier valor /Length de nivel superior se acepta para esos documentos, ya que la clave del archivo siempre es de 128 bits

Version 2.770.111

Fixed

  • ProcessObjectStreamsForDecompression y ExtractRawObjectFromStream ya no confían en el conteo /N declarado de un object stream: un conteo superior a diez millones se rechaza y el conteo se limita a los pares de números de objeto que el encabezado del stream puede realmente contener, así que un archivo armado a propósito ya no puede hacerlos asignar ni recorrer millones de entradas vacías

Version 2.770.110

Fixed

  • La Direct File API (DADirectEncryptFileAES256, DADirectDecryptFileAES256 y métodos relacionados) ahora lee /Root, /Info, /Encrypt, /Prev y /XRefStm de una sección de cross-reference clásica solo desde el diccionario trailer de esa misma sección; en archivos con actualizaciones incrementales podía tomar un /Prev de objetos de una revisión posterior (por ejemplo un outline item) o de su trailer, y fallar o leer la revisión equivocada
  • Una cadena de /Prev que regresa a una sección ya leída ahora se detiene en lugar de leer las mismas secciones otra vez

Version 2.770.109

Security

  • ApplyLoadedRedactions ahora elimina el texto bajo un área de redacción en páginas cuyo contenido está dividido en varios streams; cuando un stream terminaba con un operador y el siguiente empezaba con uno (por ejemplo ET seguido de BT), el texto después de la unión se emparejaba con los operandos equivocados y seguía legible en el archivo guardado aunque el área estaba pintada encima
  • Los content streams sin datos se omiten de forma consistente, así que los streams restantes se alinean con el texto que fue localizado en la página

Version 2.770.108

Changed

  • GetLoadedOCGCount, GetLoadedOCGName, GetLoadedOCGVisibility y SetLoadedOCGVisibility ahora usan todos el mismo índice: la posición del optional content group en el array /OCGs de /OCProperties del documento. Count y name usaban la posición en el array /ON de la configuración por defecto, visibility usaba la posición en /OFF y el setter usaba /OCGs, así que un mismo índice podía nombrar tres grupos distintos; los documentos sin /OCGs siguen recurriendo al array /ON
  • GetLoadedOCGVisibility ahora reporta un grupo como oculto cuando está listado en /OFF, o cuando no está en ningún array y el /BaseState de la configuración por defecto es /OFF

Fixed

  • SetLoadedOCGVisibility ya no pone el mismo objeto de referencia en /OCGs y en /ON o /OFF (se liberaba dos veces al liberar el documento) y ya no fuga las entradas que elimina

Version 2.770.107

Fixed

  • CopyLoadedPage ya no hace que los diccionarios de las páginas de origen y destino compartan los mismos objetos de entrada /Contents y /Resources; los objetos compartidos se liberaban dos veces al liberar el documento o al reemplazar la entrada de destino, lo que podía corromper la memoria
  • La página de destino ahora obtiene su propia referencia al contenido y recursos de origen (los valores directos se copian), y su entrada del caché de páginas renderizadas se refresca

Version 2.770.106

Fixed

  • Cargar un PDF dañado ya no fuga memoria por cada objeto stream que no se puede leer, por ejemplo un stream sin entrada /Length ni keyword endstream, o uno cuyo diccionario o datos no se pueden cargar; abrir esos archivos repetidamente hacía que el proceso creciera sin límite

Version 2.770.105

Fixed

  • Los números escritos con una fracción vacía como "21." (permitidos por la especificación PDF) ya no hacen fallar la carga; un /Length de stream indirecto escrito así solía descartar el stream completo, dejando la página en blanco
  • Los números con signo más inicial, una parte entera vacía como ".5", o una parte entera fuera del rango de 32 bits también se leen correctamente

Version 2.770.104

Fixed

  • Demo PDFmerge: con bookmarks habilitados, cada bookmark por fuente ahora abre la primera página fusionada de esa fuente; antes cada bookmark apuntaba a la primera página del archivo fusionado
  • Demo PDFmerge: las fuentes de ejemplo por defecto y el nombre de salida, y cualquier nombre relativo escrito en el formulario, se resuelven contra la carpeta del demo; agregar archivos o elegir la salida en un diálogo ya no cambia el directorio actual ni rompe las entradas relativas

Version 2.770.103

Fixed

  • Demo TextOut: el TextOut.pdf generado ahora realmente usa content streams comprimidos, como prometen los comentarios del demo; asigna Compression a cmFlateDecode en lugar de depender del argumento de BeginDoc, que no controla la compresión

Version 2.770.102

Fixed

  • Las imágenes dibujadas con AlphaBlend en un enhanced metafile ahora conservan su opacidad registrada cuando el metafile se convierte con THPDFEmfPatcher.RenderEmfDirect; se mezclaban con opacidad cero y desaparecían
  • El formato alpha registrado también se respeta, así que las imágenes sin canal alpha se mezclan con su opacidad constante en lugar de fallar
  • Los records de bitmap cuyo encabezado o datos de píxel apuntan fuera del record, o cuyos datos de píxel son más cortos que el bitmap declarado, ahora se omiten en lugar de leerse más allá del record
  • Los bitmaps de más de 32768 píxeles por lado o 64 megapíxeles en total se omiten en lugar de asignarse completos

Version 2.770.101

Fixed

  • StitchLoadedPage, StitchLoadedPageSideBySide y StitchLoadedPageSideBySideEx ahora dibujan la página de origen a través de un Form XObject que lleva el contenido, el page box y los recursos de la página; el diccionario de la página misma se registraba como XObject, que los visores no pueden pintar, así que la página unida no se veía
  • Unir más de una página sobre el mismo destino conserva cada página unida: cada una obtiene su propio nombre de XObject en lugar de compartir todas un nombre que reemplazaba a la página anterior

Version 2.770.100

Fixed

  • Los Form XObjects ahora se recortan a su /BBox al renderizarse, como exige ISO 32000-1; el contenido que un form dibuja fuera de su bounding box ya no se muestra en la página
  • Los Form XObjects anidados a más de cuatro niveles de profundidad ahora se dibujan; se descartaban como si fueran recursivos. El anidamiento se permite hasta 32 niveles
  • Un form XObject que se dibuja a sí mismo, directamente o a través de otros forms, se detecta y la llamada repetida se omite, con una entrada de recursión en los diagnósticos de render

Version 2.770.99

Fixed

  • Demo PDFOptimize: la fila de rectángulos pequeños en cada página de texto ahora se traza con stroke, así que las barras son visibles y el content stream termina cada path con un operador de pintado como exige ISO 32000-1 8.5.2; los tamaños reportados del PDF de texto cambian ligeramente como resultado

Version 2.770.98

Fixed

  • Las cadenas literales que contienen paréntesis balanceados sin backslashes, como /Title (Report (draft) v2), ahora se leen completas al cargar un documento; la cadena solía terminar en el primer paréntesis de cierre y el resto del diccionario se leía mal
  • Los paréntesis escapados siguen funcionando como antes

Version 2.770.97

Fixed

  • La carga ya no confunde un objeto diccionario con un stream cuando uno de sus valores string o name contiene las letras "stream" al final de una línea, como un diccionario Info con /Title (Livestream); el objeto se leía como stream y se perdían sus entradas
  • La keyword stream ahora se reconoce solo como su propio token después del >> de cierre del diccionario y al final de una línea, como la especificación PDF define los objetos stream

Version 2.770.96

Fixed

  • Demo Stamp: los archivos PNG y BMP ofrecidos por el selector de imágenes ahora pueden usarse como el stamp de imagen; antes solo funcionaba JPEG y los demás archivos fallaban con un error de bitmap inválido
  • Demo Stamp: la anotación de sello de goma se coloca en el área superior derecha de cada página como se pretendía, debajo de un stamp de imagen en la esquina superior, en lugar de la esquina inferior derecha donde se superponía con un stamp de imagen de esa esquina
  • Demo Stamp: las rutas por defecto de entrada, salida e imagen se resuelven contra la carpeta del demo, y elegir un archivo en un diálogo ya no cambia el directorio actual, así que los nombres relativos siguen apuntando a los mismos archivos

Version 2.770.95

Fixed

  • Las solicitudes de timestamp construidas con un OID de política (HPDFRFC3161BuildRequest, y la firma con una política de time stamp authority) ahora codifican la política solicitada como el object identifier plano que especifica RFC 3161
  • La política antes se envolvía en un context tag que RFC 3161 reserva para extensiones de solicitud, así que una time stamp authority estricta rechazaba la solicitud o ignoraba la política
  • Las solicitudes sin OID de política quedan sin cambios

Version 2.770.94

Fixed

  • Demo ViewerPref: dejar Initial Zoom sin marcar ahora significa de verdad "None (Default)"; el PDF generado ya no se abre ajustado a la altura, que era el default del componente que el demo no restablecía

Version 2.770.93

Fixed

  • Demo FileAttach: las anotaciones de adjunto a nivel de página ahora se crean cuando el demo corre desde una carpeta cuyo nombre tiene caracteres fuera de la code page ANSI del sistema; el archivo adjunto se pasa por su nombre de archivo plano en lugar de una ruta absoluta

Version 2.770.92

Fixed

  • Demo HTMLText: una ruta de salida que contiene caracteres fuera de la code page ANSI del sistema (por ejemplo un nombre de carpeta griego o cirílico) ahora se escribe correctamente en lugar de fallar
  • Demo HTMLText: el PDF generado ya no se abre automáticamente en un lector externo, igual que los demás demos de consola

Version 2.770.91

Fixed

  • La importación de rutas SVG y XPS ya no lanza EOverflow con números de cientos de dígitos, o con números largos combinados con un exponente grande; esos valores se rechazan como cualquier otro número fuera de rango
  • Afecta a las imágenes SVG colocadas mediante las APIs de importación SVG y a la geometría de rutas XPS, en compiladores cuyas excepciones de punto flotante no están enmascaradas
  • Los números ordinarios, incluyendo mantisas largas con exponentes negativos, se leen como antes

Version 2.770.90

Fixed

  • Demo EmfDraw: una conversión fallida (por ejemplo un metafile de entrada faltante) ahora termina con código de salida 1 en lugar de 0, así que los scripts y pasos de build que corren el demo detectan el fallo

Version 2.770.89

Fixed

  • Demo CJKAnnotations: cuando Arial Unicode MS no está instalada, el demo ahora realmente hace fallback a Microsoft YaHei; verifica las fuentes instaladas en lugar de esperar una excepción que una fuente faltante nunca lanzaba, así que el texto CJK ya no acaba en una fuente sustituta sin cobertura CJK

Version 2.770.88

Fixed

  • Los content streams que anidan más de 32 operadores q ya no pierden el estado de gráficos que los envuelve: los saves más profundos se ignoraban mientras su Q correspondiente seguía restaurando, así que el texto y los gráficos después del bloque anidado usaban el estado de antes de un q exterior
  • Afecta a la extracción de texto a través de la interfaz content device y a la exportación SVG de esas páginas
  • Los estados guardados ahora crecen con la profundidad de anidamiento; el anidamiento muy profundo sigue emparejándose correctamente

Version 2.770.87

Fixed

  • ImageDemo: el bookmark "Image zoom" ahora salta al encabezado IMAGE ZOOM en lugar de un punto cerca del pie de la primera página

Version 2.770.86

Security

  • Abrir un PDF cifrado para un certificado de destinatario con clave de curva elíptica (acuerdo de claves ECDH) ahora borra el secreto compartido en crudo y los búferes intermedios de derivación de claves tan pronto como ya no se necesitan, inclusive en el reintento con el orden de bytes alternativo y en cada ruta de fallo temprano
  • Firmar con un certificado del almacén de certificados de Windows ya no deja crypt32.dll y advapi32.dll cargadas cuando no se encuentra una función de CryptoAPI requerida

Version 2.770.85

Security

  • Trazar el contorno de un glifo Type 1 cuyo charstring usa sbw con muy pocos operandos ya no lee antes de la pila de operandos; el operador mal formado se ignora
  • Un charstring Type 1 que termina con el byte de escape de un operador de dos bytes ya no lee más allá del final del charstring

Version 2.770.84

Fixed

  • La longitud en bytes de los códigos de carácter en un rango de codespace de un CMap ahora sale de la longitud de sus cadenas hexadecimales, como especifica ISO 32000-1 9.7.6.2; un rango como <0000> <00FF> se trataba como de un byte porque su cota superior cabe en un byte, lo que partía códigos de dos bytes al renderizar y extraer texto
  • Los rangos de codespace cargados de CMaps incorporados también llevan su longitud de código

Version 2.770.83

Fixed

  • Embeber un subconjunto de una fuente TrueType instalada conserva cada componente de los glifos compuestos (letras acentuadas y similares) cuyos componentes llevan una escala o una transformación 2x2; el componente tras una transformación así se leía mal, así que podía desaparecer del subconjunto o quedarse su referencia de glifo escrita encima de los bytes de la transformación
  • Los glifos compuestos cuyos componentes se referencian entre sí en un ciclo, refieren más allá del conteo de glifos de la fuente o apuntan a un glifo vacío ya no hacen que el subsetting de fuentes crashee o se cuelgue
  • En un subconjunto, un glifo compuesto anidado dentro de otro compuesto tiene sus referencias de componente renumeradas una vez en lugar de dos

Version 2.770.82

Fixed

  • Los números reales en diccionarios de fuentes CFF (FontMatrix, FontBBox, blue values y similares) se leen correctamente cuando un byte guarda un signo, punto decimal o exponente junto a un dígito; antes se perdía el dígito del mismo byte, así que -2.25 se convertía en -0.5
  • Estos valores se parsean con punto como separador decimal sin importar la configuración regional de Windows; en sistemas que usan coma decimal fallaban con un error de conversión

Version 2.770.81

Fixed

  • La extracción de texto y las búsquedas en ToUnicode ya no devuelven una cadena multi-carácter vieja para códigos de una entrada array de beginbfrange que sigue a otra entrada array con destinos multi-carácter; tales códigos ahora se mapean a su propio carácter único

Version 2.770.80

Fixed

  • Instanciar una fuente variable TrueType con valores de eje elegidos (por ejemplo vía SetVariableFontAxis) ya no distorsiona los glifos cuyo dato gvar tiene una tupla sparse después de otra tupla; la tupla sparse partía de los deltas de la tupla anterior y movía esos puntos dos veces
  • Los puntos que una tupla sparse omite ahora se interpolan solo a partir de los puntos que esa tupla lista, como exigen las reglas gvar de OpenType

Version 2.770.79

Security

  • AddTiffFromFile ahora rechaza una página TIFF cuyo ancho por alto necesita un raster de más de 2 GB, lanzando una excepción en lugar de asignar un búfer cuyo tamaño había dado la vuelta y dejar que el decoder escribiera más allá de su final (heap overflow)
  • Una página TIFF con ancho o alto cero se rechaza igual
  • Las páginas TIFF altas (1200 filas o más) ahora reportan un fallo de asignación en lugar de decodificar hacia un búfer nil

Version 2.770.78

Fixed

  • Los glifos de fuentes Type 3 ahora siguen el escalado horizontal (Tz): una serie dibujada al 200% de escala horizontal se dibuja el doble de ancha en lugar de su ancho natural
  • Los glifos de fuentes Type 3 ahora siguen el text rise (Ts), así los superíndices y subíndices puestos con fuentes Type 3 se elevan o bajan en lugar de quedarse en la línea base
  • Los avances de glifo ya estaban escalados; ahora las formas de los glifos se alinean con ellos

Version 2.770.77

Fixed

  • Las peticiones de timestamp RFC 3161 que construye HPDFRFC3161BuildRequest siempre codifican el nonce como un DER INTEGER mínimo; cuando el nonce aleatorio empezaba con un byte en cero, la petición llevaba un cero inicial redundante, que los servidores de timestamp estrictos rechazan como mal formada
  • El nonce devuelto conserva la longitud pedida, así que quienes lo comparan con la respuesta de timestamp no se ven afectados
  • Los archivos PDF 2.0 cifrados (AES-256-GCM) cuyos object streams se descifran a contenido vacío ya no fallan al cargar con un error de autenticación GCM; un object stream vacío con tag de autenticación válido ahora se acepta, mientras que un tag alterado sigue rechazándose

Version 2.770.76

Fixed

  • Demo Hyperlink: los textos de los enlaces y las URLs con caracteres fuera de la code page ANSI del sistema (por ejemplo griego, cirílico o texto acentuado) ya no se convierten en signos de interrogación; los textos se dibujan como texto Unicode con un enlace URI puesto encima
  • Demo Hyperlink: los caracteres no ASCII de una URL se codifican percent-encoded como UTF-8 antes de guardarse en la acción del enlace, así los visores abren la dirección correcta

Version 2.770.75

Fixed

  • Los colores CalRGB con componentes fuera de 0..1 ya no lanzan una excepción de punto flotante (EInvalidOp) al renderizar; los componentes se recortan a su rango válido antes de aplicar la gamma
  • Esos colores ahora se renderizan como el color válido más cercano en lugar de uno indefinido en los compiladores cuyas excepciones de punto flotante están enmascaradas

Version 2.770.74

Fixed

  • Las reescrituras directas del File API (por ejemplo DADirectEncryptFileAES256 y DADirectDecryptFileAES256) que corren en varios threads a la vez ya no corrompen la salida de las demás; la copia por rangos de bytes que comparten usaba un búfer único para todo el proceso

Version 2.770.73

Fixed

  • El caché de revocación compartido de THPDFSignatureValidationBatch ahora encuentra respuestas OCSP para certificados de firmante cuyo número de serie tiene el bit superior encendido; esas respuestas se guardaban bajo un número de serie sin el byte cero inicial y se buscaban con él, así que cada firma posterior perdía el caché
  • Las respuestas OCSP firmadas por un responder delegado, o que identifican al responder por clave, ahora se guardan bajo el emisor del certificado y las firmas posteriores del lote pueden reutilizarlas; antes se guardaban bajo el nombre del responder o directamente no se guardaban
  • Las firmas que se apoyan en evidencia guardada en caché por una firma anterior del mismo lote ahora llegan a un veredicto de confianza en lugar de un estado de revocación desconocido en estos casos

Version 2.770.72

Fixed

  • Buscar un archivo embebido por nombre (GetLoadedEmbeddedFileSpec, ExtractEmbeddedFileBytes, SaveLoadedEmbeddedFileToDisk y métodos relacionados) ya no desborda la pila cuando el name tree /EmbeddedFiles del documento tiene nodos que se listan entre sí o a sí mismos como /Kids
  • Cada nodo del name tree se busca una vez, así que los nombres alcanzables por un nodo compartido siguen encontrándose

Version 2.770.71

Fixed

  • Demo PageSizes: las páginas de los formatos chinos 8K y 16K ahora imprimen su descripción completa en todos los sistemas; los nombres de los formatos chinos se dan en pinyin porque las descripciones se dibujan en Arial, que no tiene glifos CJK, y el texto no ASCII se convertía en signos de interrogación en code pages no CJK

Version 2.770.70

Fixed

  • Los shadings axiales (Type 2) ahora cubren toda el área pintada cuando el eje del shading queda lejos de ella, por ejemplo un gradiente definido fuera del borde de la página con /Extend [true true]; esas áreas quedaban sin pintar
  • Aplica al operador sh y a los shading patterns usados como color de relleno o de trazo

Version 2.770.69

Fixed

  • Demo Navigation: los destinos con nombre chapter-1 y chapter-2 ahora abren sus páginas arriba, 60 puntos debajo del borde superior, en lugar de desplazarse al pie de la página; las coordenadas de destino están en el PDF default user space con el origen en la esquina inferior izquierda

Version 2.770.68

Fixed

  • La extracción de texto de un PDF con una fuente TrueType embebida ya no se atasca por minutos cuando el cmap de la fuente está truncado pero declara miles de segmentos o grupos; ahora la longitud de la tabla se valida antes de leer los segmentos y grupos
  • Construir el mapa de glifo a Unicode de una fuente TrueType embebida recorre cada subtabla cmap una vez por segmento o grupo en lugar de buscar los 65,535 code points BMP uno por uno, lo que además acelera la extracción con fuentes CJK grandes
  • Las búsquedas de glifos por una subtabla cmap format 4 o format 12 truncada se detienen al final de los datos de la fuente en lugar de escanear segmentos que no existen

Version 2.770.67

Fixed

  • Las funciones exponenciales (Type 2) y stitching (Type 3) ahora respetan un /Domain de una sola entrada como [0 0.5]; antes se ignoraba y se reemplazaba por [0 1], así que las entradas se recortaban al intervalo equivocado
  • Una función exponencial sin /C1 ahora usa el valor por defecto [1.0]; los colores Separation y los shadings definidos así se renderizaban en negro
  • Las funciones exponenciales ahora evalúan C0 + x^N (C1 - C0) con la entrada misma en lugar de reescalarla a 0..1, como marca ISO 32000-1 para dominios distintos de [0 1]
  • Las salidas de las funciones exponenciales se recortan a /Range solo cuando está presente; los spot colours con espacio alternativo Lab (L* hasta 100) se recortaban a 0..1 y se renderizaban casi en negro
  • Una función exponencial cuya entrada cae fuera de los valores para los que está definida se rechaza en lugar de lanzar una excepción de punto flotante

Version 2.770.66

Fixed

  • Los archivos PKCS#12 / PFX exportados sin contraseña por herramientas que derivan sus claves de una contraseña de longitud cero ahora abren con contraseña vacía en HPDFParsePFX, HPDFParsePFXByLocalKeyID, HPDFEnumeratePFXIdentities y los métodos de firma PFX; antes fallaban con un error de autenticación
  • Con contraseña vacía se prueba primero la codificación estándar de RFC 7292 y después la forma de longitud cero, tanto en la verificación de integridad como en el descifrado de claves, así que los archivos que ya abrían siguen abriendo igual

Version 2.770.65

Fixed

  • El encabezado de página del demo DBTable de C++Builder ahora dice "Page 1" en lugar de "Page1"
  • Un error mientras el demo DBTable de C++Builder escribe su tabla ahora cierra el documento a medio construir, así que el siguiente clic parte de un estado limpio

Version 2.770.64

Fixed

  • Los demos de consola de C++Builder AnnotationInteraction, FormFields, CanvasDraw, EmfDraw, FormXObject, GraphicDraw, ImageDemo, ImageMask, LineGraphicsState y RtLTextOut se cambian a la carpeta del ejecutable cuando arrancan sin argumentos, como los demos de Delphi, así encuentran sus archivos de entrada y escriben sus PDFs ahí aunque se ejecuten desde otro directorio
  • Los demos Graphic de C++Builder ya no envían un mensaje de cierre a toda ventana cuyo título contenga el nombre de su PDF de salida, lo que podía cerrar ventanas ajenas
  • El demo ImageMask de C++Builder ahora funciona como la versión de Delphi: verifica que Mask.bmp y Image.jpg existan, comprime su salida, no abre visor y reporta errores en lugar de terminar con una excepción no manejada
  • El demo EmfDraw de C++Builder reporta un error, por ejemplo un Sample.emf faltante, y devuelve un código de salida distinto de cero en lugar de terminar con una excepción no manejada
  • El demo AddDelPages de C++Builder resuelve los nombres de archivo de entrada y salida relativos contra la carpeta del ejecutable, como la versión de Delphi

Version 2.770.63

Fixed

  • El demo FileAttach de C++Builder escribe FileAttach.pdf junto al ejecutable, el nombre que usan la versión de Delphi y el readme, en lugar de Output.pdf en el directorio de trabajo, y deja su adjunto FileAttach.txt en la misma carpeta

Version 2.770.62

Fixed

  • El Direct File API (DADirectEncryptFileAES256, DADirectDecryptFileAES256 y los demás métodos de reescritura directa) ahora lee offsets de streams de referencias cruzadas más allá de 2 GiB correctamente; esos offsets se truncaban y volvían negativos, así que los objetos de la parte alta de un archivo grande no se podían encontrar
  • Los offsets /Prev y /XRefStm mayores de 2 GiB en el trailer o en el stream de referencias cruzadas ahora se siguen en lugar de leerse como 0, así que las revisiones viejas y las secciones de referencias cruzadas híbridas de archivos grandes ya no se saltan
  • Lo mismo aplica al cargar un archivo grande y al inspeccionar sus revisiones
  • Los nuevos helpers HPDFDirectReadUIntBE64 y HPDFFindNameInt64 devuelven el valor completo de 64 bits

Version 2.770.61

Fixed

  • Un stream de referencias cruzadas cuyos anchos de campo /W son negativos o mayores de 8 bytes ahora se rechaza en lugar de decodificarse; la carga retrocede a escanear el archivo en busca de sus objetos
  • Los métodos del Direct File API (por ejemplo DADirectEncryptFileAES256) ya no leen memoria fuera de la tabla decodificada ni pueden crashear con ese archivo; en su lugar lo rechazan

Version 2.770.60

Fixed

  • La extracción de texto, la búsqueda y las posiciones de glifo ahora leen bien el operador de texto ": su primer operando es el word spacing y el segundo el character spacing; antes estaban intercambiados
  • Las líneas escritas con " y un word spacing o character spacing distinto de cero ya no reportan posiciones de glifo desplazadas, lo que podía unir o partir palabras en el texto extraído de la página y colocar mal los resultados de búsqueda
  • El renderizado de páginas no estaba afectado

Version 2.770.59

Fixed

  • Demo Table: las filas cubiertas por el rowspan "Group A" ahora muestran su ítem y su nota en las columnas Item y Notes; antes el texto de la nota quedaba corrido una columna y se perdía
  • Demo Table: el PDF generado ya no se abre automáticamente en un lector externo, en línea con los demás demos de consola, y las rutas de salida con caracteres fuera de la code page ANSI del sistema se conservan intactas

Version 2.770.58

Fixed

  • Descomprimir datos Flate hacia un stream ya no fuga el estado del decoder (unos 40 KB cada vez) cuando el stream de origen o destino lanza una excepción a mitad de camino, por ejemplo cuando falla una escritura o un stream alcanza su límite de tamaño
  • Comprimir una cadena ya no fuga su búfer temporal si la compresión lanza una excepción
  • La compresión y descompresión exitosas se comportan exactamente igual que antes

Version 2.770.57

Fixed

  • Los certificados cuya extensión de name constraints no está marcada como crítica ya no se rechazan como ilegibles durante la validación de certificados de firma; un certificado de CA de ese tipo hacía que toda cadena que pasara por él fallara al construirse
  • Las restricciones de un certificado así ahora se aplican al resto de la cadena como si fueran críticas, así que los nombres de firmante fuera de los subárboles permitidos siguen reportándose como violación de name constraint

Version 2.770.56

Fixed

  • Las funciones de calculadora PostScript (Type 4) con procedimientos if o ifelse profundamente anidados ya no desbordan la pila al renderizar; una función así se trata como inutilizable y el color retrocede como ante cualquier otra función inválida
  • El anidado se limita a 64 niveles, muy por encima de lo que usan los programas de calculadora reales; las tint transforms Type 4 y los shadings corrientes se renderizan como antes
  • Evaluar funciones de calculadora necesita menos pila por nivel de anidado

Version 2.770.55

Fixed

  • Demo E-Invoice: el XML de Factur-X / ZUGFeRD extraído se decodifica como UTF-8, así que los caracteres acentuados y demás no ASCII en nombres y direcciones ya no salen corruptos en el panel XML
  • Demo E-Invoice: en Delphi XE2 y posteriores el veredicto combinado de e-invoice ahora decide el paso de reglas de negocio, así que un fallo del archivo de reglas o del motor invalida la validación en lugar de pasar en silencio
  • Demo E-Invoice: un desfase entre el texto visible y el XML detectado por la verificación heurística de consistencia se reporta como advertencia y ya no hace fallar por sí solo la validación general

Version 2.770.54

Security

  • La verificación de firmas CMS (HPDFVerifyCMSSignature, HPDFVerifyCMSSignatureEx y las firmas PDF cargadas) ahora reporta una firma mal formada cuando los atributos firmados carecen del atributo content-type o nombran un tipo de contenido distinto al contenido firmado, como exige RFC 5652; esas firmas antes verificaban como válidas, lo que permitía presentar atributos firmados hechos para un tipo de contenido como si firmaran otro
  • Las firmas con el atributo content-type repetido se rechazan como antes
  • Las contrafirmas, que por definición no llevan atributo content-type, y los tokens de timestamp RFC 3161 siguen verificando como antes

Version 2.770.53

Fixed

  • Hacer clic por segunda vez en el botón del demo Annotations de C++Builder ya no escribe de nuevo el documento anterior antes de que empiece el nuevo
  • Un error mientras el demo Annotations de C++Builder construye su PDF ahora cierra el documento a medio construir, así que el siguiente clic parte de un estado limpio

Version 2.770.52

Fixed

  • Varios documentos o instancias de THotPDF en un proceso que usan la misma carpeta de caché de renderizado en disco ahora comparten un único índice de caché; antes cada instancia mantenía su propio índice y sobrescribía el de las demás en cada guardado, perdiendo el orden de uso reciente
  • Los límites de cantidad de documentos y tamaño total del caché de renderizado en disco se aplican sobre todas las instancias que comparten carpeta, así que la carpeta ya no crece más allá de su presupuesto cuando varios visores o threads de renderizado la usan a la vez
  • La misma carpeta se reconoce sin importar mayúsculas ni un delimitador de ruta final

Version 2.770.51

Fixed

  • Remuestrear un bitmap con el kernel bicubic o Lanczos3 ahora funciona con todo formato de píxeles de origen; un origen de 32 bits, 8 bits o 1 bit se leía como si tuviera píxeles de 3 bytes, lo que mezclaba sus canales de color o leía más allá del final de sus filas
  • Esos orígenes se convierten primero a 24 bits, así que la imagen remuestreada tiene los mismos colores que el origen; el resultado sigue siendo un bitmap de 24 bits como antes
  • Los orígenes de 24 bits y el kernel halftone no se ven afectados

Version 2.770.50

Fixed

  • Demo PreflightCLI: -d sobre un solo PDF ahora escribe el índice del dashboard incluso cuando el archivo falla el preflight
  • Demo PreflightCLI: los archivos que levantan un error durante el preflight se listan como fallidos en el índice del dashboard, y el código de salida refleja cada archivo fallido
  • Demo PreflightCLI: con -r, los reportes de PDFs con el mismo nombre en subdirectorios distintos se escriben en subcarpetas correspondientes en lugar de sobrescribirse, tanto con -o como en el dashboard
  • Demo PreflightCLI: -f json y -f csv ahora producen el mismo esquema con o sin --profile / --preset / --aggregate, incluida la columna spec del CSV
  • Demo PreflightReport: los reportes CSV generados con un perfil ahora llenan la columna spec como los reportes sin perfil

Version 2.770.49

Fixed

  • El demo LargeFile de C++Builder ahora genera el set de entradas de benchmark que describe su readme, como la versión de Delphi: LargeFile-Text.pdf, LargeFile-Image.pdf, LargeFile-Mixed.pdf y el LargeFile-Encrypted.pdf cifrado con AES-256 en una carpeta BenchmarkInputs junto al ejecutable; antes solo escribía un único LargeFile.pdf de 200 páginas
  • El demo LargeFile de C++Builder acepta las opciones --output-dir, --scale (small, default, large, huge) y --pages, e imprime el comando de HugeFileBenchmark para la carpeta generada

Version 2.770.48

Fixed

  • El demo Outlines de C++Builder ahora escribe Outlines.pdf junto al ejecutable, el archivo que nombra el readme, en lugar de Output.pdf en el directorio de trabajo, y reporta dónde se guardó en lugar de abrir un visor
  • El demo Outlines de C++Builder ahora construye el mismo documento de 10 páginas con etiquetas de página Arial que la versión de Delphi; las etiquetas al pie de página en y = 830 se cortaban en el borde de la página y los bookmarks "Bottom" de la última página apuntaban más abajo
  • Un error mientras el demo Outlines de C++Builder escribe el PDF ya no deja al demo imposibilitado de crear otro documento

Version 2.770.47

Fixed

  • El caché de renderizado persistente en disco ahora funciona en carpetas cuyos nombres tienen caracteres fuera de la code page ANSI del sistema (por ejemplo una carpeta de perfil de usuario con caracteres no latinos); antes toda escritura de página fallaba ahí y el caché nunca daba un hit
  • THPDFDiskPageCache toma su carpeta raíz como una cadena Unicode y mantiene todas las rutas del caché en Unicode, incluido el reemplazo atómico de los archivos de página y del índice del caché

Version 2.770.46

Fixed

  • El renderizado por regiones y tiles (RenderLoadedPageRegionToBitmap, RenderLoadedPageTiles, renderizado progresivo de regiones) ya no deja un tile en blanco cuando su único contenido viene de un form XObject colocado lejos del origen; ahora se considera que un form cubre su /BBox tal como lo colocan su /Matrix y la transformación actual
  • El texto colocado con TD, T*, ' o " ahora cae en la línea correcta al decidir qué tiles lo contienen, así que las líneas siguientes de un párrafo ya no se descartan de los tiles donde aparecen
  • Los offsets de Td se escalan por la matriz de texto y se miden desde el inicio de la línea, igual que se dibuja el texto realmente
  • El character spacing, el word spacing, el escalado horizontal y el text rise se toman en cuenta al estimar dónde termina una serie de texto, y ya no se asume que los glifos son más angostos que un em

Version 2.770.45

Fixed

  • El demo MemStream de C++Builder escribe MemStream.pdf junto al ejecutable, el nombre que usa la versión de Delphi, en lugar de Memory.pdf en el directorio de trabajo
  • El demo MemStream de C++Builder ahora recarga el PDF en memoria con LoadFromStream y verifica que tenga una página antes de guardarlo
  • Un error mientras el demo MemStream de C++Builder escribe el PDF ya no deja al demo imposibilitado de crear otro documento

Version 2.770.44

Fixed

  • El demo HelloWorld de C++Builder ya no envía un mensaje de cierre a toda ventana cuyo título contenga HelloWorld.pdf cuando arranca, lo que podía cerrar ventanas ajenas como un editor o un administrador de archivos
  • El demo HelloWorld de C++Builder escribe HelloWorld.pdf junto al ejecutable y solo lo abre cuando se le da --open; como la versión de Delphi acepta un nombre de archivo de salida o --output <file>

Version 2.770.43

Fixed

  • Cargar un PDF cuyo árbol de páginas tiene nodos /Pages intermedios ya no pierde las páginas debajo de esos nodos; antes esos documentos solo reportaban las páginas listadas directamente bajo la raíz del árbol
  • Las páginas conservan el orden del árbol de páginas, así que los índices de página, los page boxes y el contenido coinciden con lo que muestran otros visores
  • Una página cuyo /Type está guardado como objeto indirecto se reconoce como página durante este paso de ordenamiento

Version 2.770.42

Fixed

  • Cargar un PDF cuyo árbol de páginas se referencia a sí mismo (un nodo /Pages listado entre sus propios /Kids, o dos nodos que se listan mutuamente) ya no crashea con un stack overflow; cada nodo del árbol de páginas se recorre una vez y los árboles absurdamente profundos se cortan
  • Un nodo del árbol de páginas cuyo array /Kids o nombre /Type está guardado como objeto indirecto ahora carga sus páginas en lugar de fallar o leer memoria inválida

Version 2.770.41

Fixed

  • THPDFPage.LastAnnotation ahora devuelve el enlace creado por AddGoToLink, AddURILink, AddNamedDestinationLink, AddGoToRLink, AddLaunchLink, AddStructureDestinationLink y AddGoToRStructureDestinationLink
  • Llamar SetAnnotationFlags, SetAnnotationBorderStyle o AddPopupAnnotationFor con LastAnnotation justo después de agregar un enlace ya no se queda sin hacer nada en silencio ni cambia la anotación creada anteriormente

Version 2.770.40

Fixed

  • El JSON de job pasado a THPDFJobProcessor.Execute, HPDFDocRunJob y HPDFDocRunJobWithCallbacks ahora se lee como UTF-8 de punta a punta: los escapes \uXXXX ya no se colapsan a la code page ANSI, y los surrogate pairs escapados como 😀 producen el carácter previsto en lugar de dos rotos
  • Los nombres de archivos de entrada y salida en los jobs de merge, split, optimización, cifrado y validación conservan los caracteres fuera de la code page del sistema, ya sea escritos como UTF-8 crudo o como escapes \u, así que esos archivos se encuentran y se escriben bajo sus nombres reales
  • Un escape \u mal formado con menos de cuatro dígitos hexadecimales se descarta sin tragarse los caracteres siguientes ni la comilla de cierre
  • Un byte order mark UTF-8 al inicio del texto del job se ignora

Version 2.770.39

Fixed

  • Los identificadores de objeto que aporta el llamador al construir firmas y peticiones de timestamp (signature policy, commitment type, claimed role, timestamp policy y OIDs similares) ahora se codifican correctamente cuando el primer arco es 2 y el segundo es 48 o mayor; antes el primer valor combinado se cortaba a un solo byte, produciendo un identificador distinto y equivocado
  • Un arco de identificador de objeto demasiado grande para representarse ahora se rechaza con un error en lugar de dar la vuelta en silencio a otro valor

Version 2.770.38

Fixed

  • Demo HugeFileBenchmark: con --recursive --keep-output, los PDFs que comparten nombre de archivo en subdirectorios distintos ya no se sobrescriben los archivos generados entre sí; el directorio de trabajo ahora replica el árbol de carpetas de entrada

Version 2.770.37

Security

  • Renderizar un PDF con una fuente TrueType embebida cuyos glifos compuestos listan muchos componentes, cada uno a su vez compuesto, ya no puede colgar el renderer ni la exportación de texto a path; un glifo ahora se expande a lo sumo a 1024 componentes en todos los niveles de anidado
  • Un componente de glifo compuesto que referencia a su propio glifo se salta en lugar de expandirse hasta el límite de anidado

Version 2.770.36

Fixed

  • Una función stitching (Type 3) que se referencia a sí misma, directa o a través de otras funciones, ya no recursa hasta desbordar la pila; se trata como una función inutilizable
  • Afecta a las tint transforms Separation y DeviceN, a las funciones de shading y a las transfer functions en PDFs mal formados u hostiles renderizados con RenderLoadedPageToBitmap y las demás rutas de render
  • El anidado de funciones se limita a 16 niveles; los documentos legítimos anidan mucho menos profundo

Version 2.770.35

Fixed

  • El demo PageOperations de C++Builder ahora corre el mismo flujo de trabajo que la versión de Delphi: también inserta una página en blanco de tamaño personalizado con InsertLoadedBlankPage e imprime el texto de las páginas 1-3 con ExtractLoadedPagesText
  • Los archivos reordenados y extraídos del demo PageOperations de C++Builder ahora contienen las mismas páginas que los de la versión de Delphi, moviendo la última página a la página 2 y extrayendo las páginas 2 y 5

Version 2.770.34

Fixed

  • El demo Hyperlink de C++Builder continúa en una página nueva cuando la lista de enlaces no cabe en una página; los enlaces más abajo del pie de la primera página se escribían fuera de la página
  • Add, Remove y Make PDF en el demo Hyperlink de C++Builder se deshabilitan mientras se escribe el PDF, así que la lista de enlaces ya no puede cambiar ni el documento puede arrancarse una segunda vez en medio de la generación

Version 2.770.33

Fixed

  • El demo Stamp de C++Builder ahora coloca la marca de agua de texto y la anotación de sello de goma relativas al tamaño de cada página; en páginas landscape y demás no A4, la anotación de sello caía fuera de la página y la marca de agua se desviaba del centro

Version 2.770.32

Fixed

  • Cada botón del demo ViewerPref de C++Builder ahora parte de un documento fresco; la dirección de lectura, el zoom inicial y demás preferencias de visor de un clic anterior seguían vigentes, así que por ejemplo Create PDF después de Test Direction seguía escribiendo texto de derecha a izquierda y preferencias que ya no estaban seleccionadas
  • El demo PDF_INFO de C++Builder ahora escribe PDFInfo.pdf junto al ejecutable, el nombre de archivo que usan la versión de Delphi y el readme

Version 2.770.30

Security

  • La validación de rutas de certificados (HPDFValidateCMSCertificatePath, la variante online y los lotes de firmas) ya no puede quedar atascada por una firma que embebe muchos certificados que comparten un nombre y una clave; ese conjunto hacía que la búsqueda de rutas probara cada orden posible, lo que crece factorialmente y podía tener una validación ocupada por horas
  • Cada firma de emisor en una cadena candidata ahora se verifica una vez por validación y su resultado se reutiliza, en lugar de verificarse de nuevo por cada ruta que pasa por ella
  • La búsqueda de rutas se topa con una cantidad fija de trabajo; al alcanzar el tope la validación reporta que ninguna ruta válida llega a un trust anchor, y las cadenas corrientes se quedan muy por debajo

Version 2.770.29

Fixed

  • ImportLoadedInterchangeFromFDF ahora compara nombres de clave completos cuando lee anotaciones y el estado FDF: /T ya no se detiene en /Type o /Text, /F ya no en /FreeText, y /Status ya no en una clave más larga que empieza igual, así que las anotaciones importadas conservan su autor y sus flags
  • Las claves de diccionarios anidados dentro de una anotación importada, y el texto parecido a claves dentro de cadenas, ya no se toman por entradas de la propia anotación
  • Las cadenas literales en anotaciones FDF importadas y en el estado decodifican todos los escapes definidos por ISO 32000-1: \t, \b, \f, octal \ddd y las continuaciones de línea con barra invertida, además de \n, \r y los paréntesis escapados

Version 2.770.28

Fixed

  • En builds hechos con versiones de Delphi anteriores a XE2, que usan el lector PNG incluido, cargar un archivo PNG con un chunk de texto comprimido (zTXt) ya no lee más allá de un búfer interno; el texto de más de 256 bytes salía corrupto y demasiado largo, y los chunks grandes podían crashear
  • El método de compresión de un chunk de texto comprimido ahora se lee del byte correcto, así que los chunks con un método no soportado se ignoran en lugar de decodificarse como si fueran datos deflate
  • El texto comprimido truncado o mal formado ya no arriesga un loop de decodificación infinito
  • Los builds con Delphi XE2 y posteriores usan el lector PNG del sistema y no se ven afectados

Version 2.770.27

Changed

  • El demo SearchAndSelect de C++Builder ahora funciona como la versión de Delphi: crea un PDF de muestra, lo carga, encuentra el término de búsqueda con SearchLoadedDocumentText y agrega una anotación de resaltado sobre cada coincidencia con AddLoadedHighlightAnnotation
  • El demo SearchAndSelect de C++Builder acepta un PDF de entrada, un término de búsqueda, un archivo de salida y las opciones --case-sensitive y --whole-word, y verifica que la copia guardada tenga las anotaciones nuevas

Fixed

  • Los resaltados del demo SearchAndSelect de C++Builder ahora cubren las palabras encontradas; antes se colocaban una línea más arriba porque la posición del texto se tomaba como la línea base en lugar de la parte alta del texto

Version 2.770.26

Fixed

  • El demo DigiPrint de C++Builder ahora arranca en sistemas cuyo separador decimal es el punto; los decimales con coma de demo.xml se parseaban con el locale del sistema y levantaban un error al crear el form
  • El demo DigiPrint lee demo.xml y sus dos íconos JPEG de la carpeta del ejecutable y escribe demo.pdf ahí, y el proyecto ahora coloca el ejecutable en la carpeta del demo junto a esos archivos
  • Los íconos de página del pie del demo DigiPrint se dibujan dentro de la fila del pie en lugar de debajo de la línea inferior de la página, y el título, el año y el texto del pie usan los tamaños de fuente del estilo del reporte
  • Hacer clic en el botón DigiPrint más de una vez ya no corre el margen izquierdo más a la derecha con cada clic
  • Un error mientras el demo DigiPrint construye el PDF, como un archivo de imagen faltante, ya no deja al demo imposibilitado de crear otro documento

Version 2.770.25

Fixed

  • Demo Showcase: las bandas de encabezado, el fondo de la portada, las muestras de gradiente y el acento de la contraportada ahora se alinean con las formas que rellenan; las coordenadas de gradiente se dan en el PDF default user space (origen abajo a la izquierda), así que los colores ya no salen corridos ni volteados
  • Demo Showcase: Save Copy ya no cambia el archivo de trabajo, así que Regenerate y Open External siguen usando la galería principal en lugar de la última copia escrita
  • Demo Showcase: cuando falla la generación de la galería, el visor se reenlaza y sigue mostrando la última galería que cargó en lugar de quedarse en blanco
  • Demo Showcase: las rutas de salida con caracteres fuera de la code page ANSI del sistema pasan intactas

Version 2.770.24

Fixed

  • Cargar una imagen JPEG 2000 de cuatro componentes (RGB más alfa, o YCC más alfa) en un TJpeg2000Bitmap ahora pone rojo, verde, azul y alfa en los bytes correctos del bitmap de 32 bits; antes los canales de color quedaban corridos un byte y el canal alfa sobrescribía uno de ellos
  • Esto también arregla el round trip de un TJpeg2000Bitmap de 32 bits por SaveToStream y LoadFromStream, que volvía con los colores mezclados
  • Las imágenes de color de tres componentes, las imágenes en escala de grises y las imágenes CMYK de cuatro componentes cargan como antes

Version 2.770.23

Security

  • Una cadena de texto cuyo valor empieza con << y termina con >> (por ejemplo un título, autor, valor de campo de form o texto de anotación como "<<URGENT>>") ahora siempre se guarda como cadena; antes se escribía textualmente, lo que rompía la sintaxis del archivo y permitía que texto armado inyectara un diccionario, como una acción, en el documento guardado
  • Aplica a los documentos nuevos y a los documentos cargados guardados con SaveLoadedDocument y métodos relacionados

Version 2.770.22

Fixed

  • El demo Barcodes de C++Builder escribe Barcodes.pdf junto al ejecutable en lugar del directorio de trabajo actual, y acepta un nombre de archivo de salida opcional como único argumento
  • El demo Barcodes de C++Builder ya no abre un visor de PDF al terminar, y como la versión de Delphi comprime el contenido de su página y abre con zoom de ajuste a la altura
  • Los errores del demo Barcodes de C++Builder se reportan con el texto de su mensaje; antes la consola mostraba una dirección de memoria

Version 2.770.21

Fixed

  • En el C ABI estable, llamar hpdf_document_destroy mientras otra llamada sobre el mismo handle sigue corriendo (desde otro thread, o desde dentro de un callback de lectura, escritura, progreso o cancelación) ya no libera el documento debajo de esa llamada
  • El handle queda inválido tan pronto como hpdf_document_destroy devuelve; el documento mismo se libera cuando termina la última llamada en curso sobre él
  • Las llamadas que buscan un handle concurrentemente con su destrucción reciben HPDF_STATUS_INVALID_HANDLE en lugar de tocar memoria liberada

Version 2.770.20

Security

  • Dar forma al texto con una fuente TrueType/OpenType cuyos contextual lookups de GSUB se referencian a sí mismos ya no desborda la pila ni crashea; la profundidad de anidado ahora sí se acumula entre niveles
  • Una regla contextual que dispara muchos lookups anidados ya no puede multiplicarlos en un loop casi infinito: cada coincidencia de nivel superior corre cuando mucho 1024 lookups anidados

Fixed

  • Una sustitución contextual encadenada (GSUB lookup type 6) alcanzada desde otro lookup contextual ahora se aplica; antes se leía con el layout contextual simple y nunca coincidía, así que algunas ligaduras y formas contextuales faltaban
  • Una sustitución encadenada inversa (GSUB lookup type 8) referenciada desde una regla contextual se salta como exige la especificación OpenType, en lugar de leerse mal como una subtabla contextual

Version 2.770.19

Fixed

  • RenderLoadedPageToDC ya no lanza un access violation cuando la página contiene un image XObject o una imagen inline; las imágenes se dibujan en el device context del llamador
  • GetLoadedPageMetafile ya no falla en páginas con imágenes, y las imágenes quedan registradas en el metafile devuelto
  • El recorte de imágenes contra la superficie visible ahora usa el tamaño pasado a RenderLoadedPageToDC cuando el device context no tiene región de clip

Version 2.770.18

Fixed

  • Las regiones halftone JBIG2 con grid skipping habilitado ya no descartan celdas de la grilla que empiezan a la izquierda o arriba de la región pero aún la traslapan; esas celdas se trataban como muy afuera, sus valores de gris se saltaban, y las celdas restantes de la región se decodificaban desfasadas
  • Las coordenadas de grilla negativas que no son píxeles enteros ahora se redondean hacia menos infinito como exige la especificación JBIG2, así que las celdas parcialmente visibles caen en el píxel correcto
  • Las regiones halftone cuya grilla queda totalmente en coordenadas no negativas no se ven afectadas

Version 2.770.17

Fixed

  • Las respuestas OCSP cuyo responder se identifica por key hash en la forma estándar de RFC 6960 (un tag [2] explícito alrededor del key hash) se aceptan de nuevo; la validación de rutas de certificados las descartaba, así que la revocación quedaba desconocida para todo responder que se nombra por clave
  • Tanto los responders directos (la CA emisora) como los certificados de firma OCSP delegados identificados por clave se emparejan, y la forma más vieja con tag implícito sigue funcionando
  • HPDFDescribeValidationEvidence ahora indexa los descriptores OCSP por el DN del emisor del certificado nombrado en cada respuesta, resuelto desde el issuer name hash de la respuesta, en lugar de por el DN del responder; las respuestas de responders delegados y las identificadas por clave ahora producen descriptores que una búsqueda por emisor del certificado puede encontrar
  • Se agregó un overload de HPDFDescribeValidationEvidence que toma la firma CMS y certificados de emisor extra, para respuestas que identifican al responder por clave y no embeben certificado

Version 2.770.16

Fixed

  • Demo Viewer: el form ya no lanza un access violation al arrancar; la barra de estado ahora existe antes de que el visor se enlace al documento y empieza a reportar cambios de página
  • Demo Viewer: presionar Enter en el cuadro de búsqueda ahora activa la primera coincidencia en lugar de saltarse directo a la segunda
  • Demo Viewer: los bookmarks sin página de destino resoluble se listan sin un sufijo "(p0)" falso, y hacer clic en ellos ya no lanza un error de rango

Version 2.770.15

Fixed

  • El paso de descifrado del demo Security de C++Builder ahora sí abre la muestra cifrada con la contraseña de usuario "user"; el argumento de contraseña se tomaba como el flag de descifrado automático, así que la muestra se cargaba sin su contraseña y Security-Decrypted.pdf no era una copia descifrada

Version 2.770.14

Fixed

  • Un clipping path fijado con W o W* ahora toma efecto después de que el path se pinta, como exige ISO 32000-1, en lugar de antes
  • Trazar el contorno de un path que también fija el clip (re W S) ahora pinta todo el ancho de línea; la mitad exterior del trazo se recortaba por el propio clip del path
  • Rellenar y trazar con un clip even-odd (W* B) ahora rellena con la regla de winding del propio operador de pintado; el clip even-odd solía agujerear el relleno
  • B* y b* ahora siempre rellenan con la regla even-odd, independiente de la regla de relleno que dejara una operación anterior

Version 2.770.13

Fixed

  • Las regiones halftone JBIG2 cuyos planos de escala de gris están codificados con MMR ahora se decodifican; antes los planos salían invertidos, solo se leía cada octava columna, y el final de cada plano se ubicaba en el byte equivocado, así que los planos siguientes se decodificaban desde la posición incorrecta
  • El marcador de fin de bloque tras cada plano MMR se reconoce tanto si sigue directamente a la última fila como si viene después de padding de bytes, y cada plano ahora empieza en el límite de byte que le sigue
  • Las regiones halftone codificadas aritméticamente no se ven afectadas
  • Aplica a las imágenes PDF con el filtro JBIG2Decode que se cargan, extraen o renderizan con el decoder incorporado

Version 2.770.12

Fixed

  • El JSON que producen el procesador de jobs (THPDFJobProcessor.Execute, HPDFDocRunJob, HPDFDocRunJobWithCallbacks) y la comparación de documentos ahora escapa comillas y barras invertidas como \" y \; las formas anteriores \x22 / \x5C no son JSON válido y hacían que los parsers estándar rechazaran resultados que contenían una comilla o una ruta de Windows
  • Los caracteres de control se escriben como escapes \uXXXX y la salida siempre es UTF-8 bien formado: los bytes que no son UTF-8 válido se reemplazan con U+FFFD en lugar de copiarse al resultado
  • Los mensajes de error en los resultados de jobs y en el objeto de error de la comparación se codifican como UTF-8, así que el texto de excepciones no en inglés y los nombres de archivo ya no llegan en la code page ANSI

Version 2.770.11

Fixed

  • RedactLoadedRect, StampLoadedPageText, StampLoadedPageImage, StampLoadedPageShape, StitchLoadedPage y FlattenLoadedAnnotations ya no tiran el contenido existente de una página cuando su /Contents es un array de streams; los operadores nuevos se agregan como un stream extra al final del array, o al frente para un underlay
  • Los sellos underlay en una página cuyo contenido está partido en varios streams conservan cada stream original
  • Las páginas cuyo único stream de contenido usa un filtro distinto de FlateDecode plano (ASCIIHex, ASCII85, LZW, RunLength, cadenas de filtros o Flate con predictor) ahora se decodifican antes de agregar los operadores nuevos, así que el sello, el cuadro de redacción o la apariencia aplanada sí se pintan y el contenido original sigue siendo legible
  • Cuando el stream de contenido de una página no se puede decodificar en absoluto, se deja intacto y los operadores nuevos se escriben en un stream separado en lugar de agregarse a los bytes codificados

Version 2.770.10

Security

  • Renderizar un PDF cuya fuente CFF embebida (FontFile3, Type1C o CIDFontType0C) guarda un offset de INDEX de 0x80000000 o más ya no lee memoria fuera de los datos de la fuente; esos offsets se trataban como negativos y pasaban las verificaciones de límites
  • Las fuentes TrueType embebidas reciben el mismo tratamiento para posiciones de glifo y longitudes de tabla de 0x80000000 o más: el glifo o la fuente se salta en lugar de leerse del lugar equivocado
  • Un glifo CFF cuyas subrutinas se llaman entre sí muchas veces ya no puede colgar el renderizado ni la exportación de texto a path; cada glifo ahora tiene un presupuesto fijo de operaciones de charstring, muy por encima de lo que usan las fuentes reales

Version 2.770.9

Fixed

  • Las imágenes JBIG2 cuyas regiones de texto usan codificación Huffman junto con refinement de símbolos en la plantilla de 13 píxeles ahora se decodifican; los bytes de píxeles adaptativos del refinement en el encabezado de la región se saltaban, así que el conteo de instancias y todos los campos siguientes se leían desde el offset equivocado y la imagen se rechazaba
  • Las regiones de texto con codificación aritmética, o con la plantilla de refinement de 10 píxeles, no se ven afectadas y se decodifican exactamente como antes
  • Aplica a las imágenes PDF con el filtro JBIG2Decode que se cargan, extraen o renderizan con el decoder incorporado

Version 2.770.8

Security

  • Con el aislamiento de codecs habilitado, el tamaño de una imagen decodificada devuelta por el worker de codecs aislado ahora se verifica contra el límite de salida configurado y la memoria compartida que asignó el proceso anfitrión, en lugar de un campo de capacidad que el propio worker puede sobrescribir
  • Un worker comprometido o defectuoso ya no puede hacer que el anfitrión copie más allá del final del bloque de memoria compartida; esa respuesta se rechaza como error de protocolo y la imagen no se dibuja desde ella
  • La respuesta del worker se copia una vez y se valida desde esa copia, así que su encabezado no puede cambiar entre las verificaciones y la copia de píxeles

Version 2.770.7

Fixed

  • Las peticiones OCSP construidas para verificación de revocación en vivo (HPDFCollectCMSRevocationRequests y la validación de rutas de certificados online) ahora codifican correctamente el identificador de algoritmo SHA-256 del CertID; antes, los dos primeros arcos del identificador de objeto se escribían como bytes separados, así que el algoritmo de hash era inválido
  • Los responders OCSP que rechazan peticiones mal formadas ahora responden a estas peticiones con un estado normal en lugar de un error, así que las verificaciones de revocación online ya no retroceden a evidencia offline por la codificación de la petición

Version 2.770.6

Fixed

  • Renderizar una fuente Type 3 ahora pinta cada aparición de un glifo; antes un glifo repetido en la misma serie de texto, o en cualquier otro lugar de la página con el mismo tamaño y orientación, se pintaba solo la primera vez y quedaba en blanco después
  • Afecta a RenderLoadedPageToBitmap, RenderLoadedPageToDC, los metafiles de página y las rutas de exportación de imagen, con o sin el caché de renderizado compartido
  • Los glifos Type 3 repetidos siguen usando el caché de glifos, así que el arreglo no relee el procedimiento del glifo por cada aparición

Version 2.770.5

Fixed

  • El C ABI estable ya no libera dos veces la fuente de entrada cuando hpdf_document_load_from_io falla mientras el documento se parsea, por ejemplo cuando el callback de lectura reporta un error o la operación se cancela a mitad de camino; una carga así podía corromper el heap o crashear el proceso anfitrión
  • Una carga fallida ahora devuelve el estado del callback o de cancelación en lugar de un error interno, y el mismo handle de documento puede cargarse de nuevo después
  • Cargar un documento nuevo en un handle existente libera la fuente de entrada anterior solo cuando la nueva carga ha tomado el control

Version 2.770.4

Fixed

  • Los resultados de códigos de barras de DecodeLoadedPageBarcodes en páginas con /Rotate 90 o /Rotate 270 ahora reportan los límites en la posición real del símbolo en lugar de una posición espejada en la página
  • La orientación de código de barras reportada en esas páginas ahora coincide con la dirección en la que el símbolo realmente se lee en el espacio de página
  • El texto invisible colocado por ApplyLoadedOCRTextLayer en páginas giradas un cuarto de vuelta ahora cae sobre las palabras reconocidas, así que la selección y la búsqueda resaltan el lugar correcto
  • Los hallazgos de rostros de la detección de redacción en páginas giradas un cuarto de vuelta también se mapean de vuelta al área correcta de la página
  • Las páginas sin rotación y boca abajo no se ven afectadas

Version 2.770.3

Fixed

  • En builds de 32 bits, cargar o escribir una imagen TIFF comprimida con PixarLog ya no crashea con un stack overflow; seleccionar el codec construye sus tablas de companding, que topaban con un helper de exponente recursivo sin fin
  • Las imágenes TIFF SGILog (LogLuv) en builds de 32 bits pasan por los mismos helpers de matemática corregidos
  • El helper de redondeo hacia abajo de 32 bits que usan los codecs TIFF ahora redondea los valores negativos hacia menos infinito y acepta magnitudes grandes sin error de overflow, igual que los builds de 64 bits

Version 2.770.2

Changed

  • Al renderizar, una imagen dibujada a la mitad de su tamaño en píxeles o menos se encoge exactamente al tamaño dibujado por promedio de áreas justo después de decodificar, en lugar de conservarse a tamaño completo y estirarse al dibujar
  • La imagen encogida cabe en el caché de imágenes decodificadas: un grupo de transparencia que se dibuja dos veces, sobre negro y sobre blanco, para recuperar su alfa ahora decodifica esa imagen una vez en lugar de una por pasada, y lo mismo renderizar de nuevo la misma página
  • Una imagen con soft mask se combina con su máscara píxel a píxel al tamaño dibujado, donde la máscara también se encoge; esto evita construir y premultiplicar una copia a tamaño completo de una imagen grande y su máscara, y el borde de la máscara ya no se muestrea por vecino más cercano
  • En una página de muestra con una imagen enmascarada de 4229 x 4629 dibujada a cerca de un cuarto de su tamaño dentro de ese grupo, el renderizado tardó unos 1.8 segundos en lugar de 4.5
  • Las máscaras de imagen stencil conservan su resolución completa, y los métodos públicos de decodificación por región siguen devolviendo los tamaños que documentan

Version 2.770.1

Fixed

  • En builds de 64 bits, renderizar una página con un grupo de transparencia fallaba con un error de índice de lista siempre que el grupo no fijara una soft mask propia, una regresión de la versión 2.769.3; esas páginas ahora vuelven a renderizar

Version 2.770.0

Added

  • La nueva propiedad RenderColorimetricLuminosityMasks elige cómo una soft mask de luminosidad convierte el color en valores de máscara cuando su grupo tiene un espacio de mezclado basado en CIE (CalGray, CalRGB, Lab o ICCBased)
  • Ponerla en true toma el CIE Y como lo describe ISO 32000-1 11.5.3; los bitmaps renderizados bajo ambas configuraciones se guardan en caché por separado

Changed

  • Por defecto una máscara de luminosidad ahora pondera el color resuelto de su grupo como DeviceRGB sin importar el espacio de mezclado, como hacen los visores de PDF corrientes; el CIE Y se mide en escala lineal, así que un gris medio en un grupo ICC o calibrado se enmascaraba apenas un quinto, y las sombras proyectadas y los fundidos salían mucho más claros que en otros visores
  • El color de fondo /BC de una máscara sigue la misma configuración que la pintura dentro del grupo de la máscara
  • Las máscaras cuyo grupo usa un espacio de color de dispositivo se renderizan como antes

Version 2.769.3

Fixed

  • Un grupo de transparencia pintado con un blend mode distinto de Normal, como las sombras Multiply que exportan las herramientas de diseño, ahora mezcla su propio color y alfa con el fondo (ISO 32000-1 11.3.6 y 11.4.8); donde el grupo era parcialmente transparente, sus píxeles ya contenían el fondo, que luego se mezclaba consigo mismo: una sombra Multiply salía demasiado oscura y con el tono del fondo
  • El contenido de un grupo de transparencia parte del blend mode Normal, pues el blend mode aplica al grupo como un todo (11.6.6); antes conservaba el modo con el que se pintó el grupo, así que un grupo aislado multiplicaba su contenido con su inicio vacío y pintaba negro
  • Una soft mask fijada en el mismo graphics state que un blend mode dibuja su grupo de máscara con mezclado Normal (11.6.5.2); el blend mode volvía negro un grupo de máscara blanco y ocultaba lo que la máscara debía mostrar
  • Para hallar el alfa de un grupo que no es aislado, el grupo se dibuja dos veces, sobre negro y sobre blanco, cuando sus propios graphics states se mezclan de forma normal; esas páginas renderizan algo más lento

Version 2.769.2

Changed

  • Una imagen con soft mask se decodifica al tamaño en que se dibuja, como ya pasaba con una imagen sin ella, y su máscara se decodifica a ese tamaño también; una máscara JPEG pasa por el decoder JPEG de tamaño reducido en lugar de decodificarse completa
  • La imagen y su máscara siempre se decodifican enteras, así que la máscara no puede correrse respecto de la imagen, y el recorte conserva lo dibujado en la parte visible
  • En una página con una imagen de sombra de 4229 x 4629 y una máscara JPEG de 2114 x 2314 dibujada a unos 1000 píxeles de ancho, renderizar a 72 dpi tardó 1.6 en lugar de 3.7 segundos
  • DecodeLoadedImageRegionAtResolution devuelve una imagen entera de un formato sin decoder de región tal cual decodificada, sin copiarla una vez más

Version 2.769.1

Changed

  • Las soft masks se construyen más rápido: construir una máscara ya no conserva una segunda copia de la página completa para comparar, lo que las páginas con muchas máscaras, como los gradientes y sombras proyectadas que exportan las herramientas de diseño, pagaban una vez por máscara
  • Las máscaras de luminosidad sobre un espacio de mezclado calibrado o basado en ICC buscan la curva sRGB en una tabla en lugar de calcularla para cada canal de cada píxel, y el contenido de máscara en gris, el caso común, se convierte por una única tabla
  • Una página de 1125 x 1600 con unas veinte soft masks renderiza aproximadamente un quinto más rápido; los píxeles renderizados no cambian

Version 2.769.0

Changed

  • Fijar el Width o el Height de una página ya no esconde errores: un fallo ahora lanza una excepción en lugar de dejar el tamaño silenciosamente sin aplicar, y fijar el tamaño de una página cuyo canvas ya se cerró lanza el nuevo EHPDFPageClosedError con un mensaje que dice por qué
  • Después de tal fallo la página ya no queda en un estado donde cambios de tamaño posteriores solo actualizan su MediaBox y no el tamaño de página usado para dibujar

Fixed

  • Redimensionar una página de un PDF cargado ya no sobrescribe otros objetos: un MediaBox cuyos números son objetos separados, o un array MediaBox compartido por varias páginas, se copia para la página que se redimensiona, así que las demás páginas conservan su tamaño
  • Redimensionar una página cargada cuyo MediaBox tiene menos de cuatro números ahora escribe un MediaBox completo con el nuevo tamaño; antes el nuevo tamaño se ignoraba

Version 2.768.20

Fixed

  • La extracción de texto ya no entra a un Form XObject que se pinta a sí mismo, directamente o a través de otros forms; un form así se releía en cada nivel de anidado, repitiendo su texto hasta doce veces, y uno que se pintaba dos veces a sí mismo tomaba 4,096 pasadas
  • El texto de un Form XObject que cae fuera del bounding box del form, que lo recorta, ya no es parte del texto de la página

Version 2.768.19

Changed

  • Los documentos grandes vuelven a cargar más rápido: recorrer el árbol de páginas ya no busca entre todos los objetos cargados por cada página, y la verificación de cifrado de LoadFromFile con AutoDecrypt lee el archivo por el mismo búfer que la carga; el PDF Reference 1.7 de 56 MB ahora carga en unos 8 segundos en lugar de 22

Version 2.768.18

Fixed

  • El renderizado de páginas ahora encuentra fuentes instaladas que Windows reporta bajo un nombre localizado, como Microsoft YaHei en Windows chino o Yu Mincho en Windows japonés; el texto en tales fuentes se dibujaba con una fuente sustituta cuando el PDF no las embebía
  • Los nombres de fuente escritos sin espacios ahora coinciden con familias de Windows que mantienen algunas palabras unidas, como MicrosoftYaHei por Microsoft YaHei, MicrosoftJhengHei por Microsoft JhengHei y MSPGothic por MS PGothic; antes se buscaban con un espacio antes de cada mayúscula y nunca se encontraban
  • El renderer recuerda qué nombres de fuente están instalados, así que los documentos con muchas fuentes no instaladas ya no le preguntan a Windows por cada nombre en cada página

Version 2.768.17

Changed

  • Los documentos grandes cargan mucho más rápido: la telemetría de operaciones ahora muestrea la memoria cuando mucho una vez cada 10 ms dentro de una operación, en lugar de en cada objeto que lee el parser, un muestreo que recorría cada bloque del administrador de memoria; el PDF Reference 1.6 de 1,236 páginas carga en unos 2.5 segundos en lugar de 30, y el PDF Reference 1.7 de 56 MB en unos 22 segundos en lugar de más de cuatro minutos
  • La lentitud crecía con el tamaño del heap de la propia aplicación, así que las aplicaciones que retienen mucha memoria son las que más se benefician
  • UpdateOperationTelemetrySample gana un parámetro Force opcional que toma una muestra sin importar el intervalo; el final de cada operación igual toma una

Version 2.768.16

Fixed

  • Cargar un archivo vacío ya no se cuelga; LoadFromFile antes loopeaba para siempre leyendo hacia atrás desde el inicio del archivo
  • Un archivo en el que no se encuentra ninguna página, como un archivo vacío, texto plano o bytes al azar, ya no carga como una o tres páginas en blanco adivinadas por su tamaño; LoadFromFile ahora devuelve 0 o lanza una excepción, como con los demás archivos ilegibles
  • Un archivo cifrado cuyas páginas están en object streams cifrados ahora lanza una excepción que dice que se necesita la contraseña cuando se carga sin ella, en lugar de cargar como página en blanco; cárguenlo con el overload que recibe la contraseña

Version 2.768.15

Fixed

  • El texto de página ya no repite caracteres que se pintan otra vez sobre sí mismos, como en logos sobreimpresos y en la negrita fingida dibujando el texto dos veces con un pequeño desfase; ese texto se extraía dos veces, por ejemplo "Bold wordsBold words", y las búsquedas sobre él podían fallar
  • La extracción de texto plain, column, layout y semantic lee tal carácter una sola vez; la lista de glifos sigue reportando cada glifo pintado

Version 2.768.14

Fixed

  • Los nombres de glifo de la Adobe Glyph List completa ahora se resuelven en la extracción de texto y el renderizado, entre ellos las ligaduras fi, fl, ff, ffi y ffl y los nombres afii que usan fuentes viejas de cirílico, hebreo y árabe; una codificación de fuente que nombraba tales glifos daba los caracteres equivocados, por ejemplo "defined" se extraía como "deÞned"

Version 2.768.13

Changed

  • LoadFromFile lee los archivos por debajo de LocalFileMappingThreshold (8 MB por defecto), y todos los archivos cuando el mapeo está desactivado o no está disponible, por un búfer de lectura de 64 KB; los archivos con muchos objetos y una tabla de referencias cruzadas clásica cargan mucho más rápido, por ejemplo el PostScript Language Reference Manual de 912 páginas en alrededor de 1 segundo en lugar de casi 3 minutos

Version 2.768.12

Fixed

  • La extracción de texto ahora coloca los glifos de fuentes CID-keyed (Type 0) cuyo array de anchos /W no está ordenado por CID; la mayoría de los glifos recibían el ancho por defecto de un em completo, así que las líneas se pasaban del borde de la página y sus finales se perdían del texto extraído y de la búsqueda

Version 2.768.11

Fixed

  • Las letras acentuadas de fuentes CFF (Type 1C) embebidas que se construyen de una letra base y un acento, como en muchas fuentes convertidas de Type 1, ahora se renderizan; letras como ü y é quedaban en blanco, así que palabras como "München" mostraban un hueco
  • Las mismas letras ahora salen completas en la exportación SVG con fuentes embebidas

Version 2.768.10

Fixed

  • Los glifos compuestos de fuentes TrueType embebidas ahora colocan cada parte en su propio offset: letras acentuadas como é y Å perdían su acento, y las comillas dobles curvas se veían como una comilla simple seguida de un hueco
  • Los mismos glifos ahora salen completos en la exportación SVG con fuentes embebidas

Version 2.768.9

Fixed

  • Las imágenes marcadas con /Interpolate false ahora se promedian cuando se dibujan más pequeñas que su propia resolución; antes se muestreaban un píxel de cada varios, así que las gráficas puestas como imágenes mostraban etiquetas de ejes dentadas y oscuras y líneas delgadas rotas donde otros visores las muestran suaves
  • Las imágenes agrandadas con /Interpolate false conservan sus bordes de píxel duros como antes

Version 2.768.8

Fixed

  • El texto dibujado con un trazo más angosto que un píxel, como usan los documentos para negrita fingida, ahora se renderiza a ese ancho; antes el trazo medía un píxel entero, así que tales títulos se veían emborronados y mucho más pesados que en otros visores
  • Los glifos pequeños de fuentes embebidas e instaladas se trazan con antialiasing en los modos de renderizado de texto 1 y 2, en el color del trazo, después del relleno

Version 2.768.7

Fixed

  • Llamar ProcessObjectStreamsForDecompression sobre un documento cargado ya no descarta los object streams que la carga había leído: los objetos comprimidos siguen disponibles para ExtractRawObjectFromStream y ExtractObjectFromStream después, donde antes no se podía leer ninguno
  • Cuando el método escanea el archivo por sí mismo, como con un documento con tabla de referencias cruzadas clásica, ahora encuentra un object stream que sigue directamente a otro stream y lee su conteo de objetos y offsets de su propio diccionario
  • ExtractRawObjectFromStream decodifica de nuevo un object stream cuando el caché de object streams lo ha liberado, en lugar de devolver un resultado vacío

Version 2.768.6

Fixed

  • El demo Stamp ahora compila correctamente para Win64

Version 2.768.5

Fixed

  • En las ediciones de Windows para chino, japonés y coreano, los documentos con streams de referencias cruzadas cuyos diccionarios llevan cadenas binarias, como los checksums de los archivos adjuntos, ahora cargan en una fracción de segundo; un portafolio de 4 MB con nueve archivos PDF adjuntos tardaba dos minutos en abrirse
  • El parser ahora busca sus keywords en los bytes crudos del archivo en lugar de en texto convertido a través de la code page de Windows, así los datos binarios junto a una keyword ya no pueden esconderla ni desplazar su posición

Version 2.768.4

Fixed

  • El contenido dentro de un Form XObject ahora se renderiza con la opacidad, la soft mask y el blend mode que el form establece para sí mismo; antes, todo lo que estaba dentro de un form se pintaba con opacidad total, así las marcas de agua translúcidas y los sellos salían sólidos
  • Un form pintado con una opacidad propia sigue componiéndose una sola vez como un todo, como antes

Version 2.768.3

Fixed

  • El texto de página ahora incluye el texto que la página pinta a través de Form XObjects, como encabezados y pies de página, marcas de agua y sellos; antes solo se devolvía el texto del contenido propio de la página
  • El texto de un form aparece donde se pinta el form, colocado a través de la matriz del form y leído en las fuentes del propio form, y los forms anidados dentro de otros forms también se siguen
  • Esto aplica al texto de página plain, layout, column y semantic; la extracción a nivel de glifos sigue devolviendo solo los glifos del contenido propio de la página, cuyas posiciones apuntan dentro de ese contenido

Version 2.768.2

Fixed

  • EncryptFile y DecryptFile con AES-256 ya no dañan archivos de fuentes embebidas cuyo diccionario lista /Length1 antes que /Length, como los escriben Ghostscript y otras herramientas; esas fuentes se cifraban como un solo byte, lo que dejaba la salida ilegible
  • Los streams cuya longitud se guarda en un object stream comprimido conservan todos sus datos al cifrarlos y descifrarlos con AES-256; antes, el último byte de un stream así podía perderse

Version 2.768.1

Fixed

  • Los documentos cuyas longitudes de stream se guardan dentro de object streams comprimidos, como los escribe Ghostscript, ahora cargan completos; antes, cada stream de contenido de página de tal archivo se descartaba, así las páginas se renderizaban en blanco y no daban texto
  • Un stream cuya longitud refiere a un objeto que no existe, o que directamente no tiene longitud, ahora se lee hasta su marcador de fin en lugar de descartarse

Version 2.768.0

Added

  • BuildLoadedPageSVG y SaveLoadedPageAsSVG reciben un parámetro opcional EmbedFonts; viene desactivado por defecto y las llamadas existentes exportan exactamente como antes
  • Con EmbedFonts en True, el texto en fuentes cuyo programa TrueType o CFF está embebido en el PDF se dibuja a partir de los glyph outlines de la propia fuente, así el SVG se ve igual en sistemas donde esas fuentes no están instaladas
  • Cada glyph outline se escribe una vez y se reutiliza donde sea que aparezca el carácter, lo que mantiene bajo el tamaño del archivo en páginas con mucho texto
  • El texto queda en el SVG como texto transparente sobre los outlines, así todavía se puede seleccionar, buscar y leer con screen readers
  • El texto fill, stroke y fill-and-stroke, los anchos de línea, el texto rotado o escalado y el texto usado como clipping path salen como salen en la página renderizada
  • Las fuentes no embebidas, los programas de fuente Type 1 y el texto CJK vertical quedan como texto SVG ordinario

Version 2.767.4

Fixed

  • El texto outlined y fill-and-outline (text render modes 1 y 2) en fuentes no embebidas ahora respeta el ancho de línea al renderizarse; antes, cada outline salía de un píxel de ancho sin importar cuál fuera el ancho de línea
  • Tales outlines ahora se dibujan a partir de las formas de glifo exactas de la fuente instalada y en sus posiciones exactas, como ya pasaba con el texto relleno
  • Los caracteres que le faltan a la fuente instalada, que Windows toma de una fuente de fallback, también conservan el ancho de línea cuando se dibujan como outline

Version 2.767.3

Fixed

  • El texto en fuentes no embebidas ahora se dibuja con los caracteres que su encoding nombra. Los códigos de carácter llegaban sin cambios a la fuente instalada, y la fuente instalada los lee en su propio conjunto de caracteres, así cada entrada /Differences y los códigos donde StandardEncoding o MacRomanEncoding difieren del conjunto de caracteres de Windows dibujaban los caracteres equivocados, por ejemplo comillas rectas en lugar de comillas curvas en fuentes Type 1 sin encoding
  • En las ediciones de Windows para chino, japonés y coreano, las letras acentuadas, las comillas curvas, el signo de copyright y otros caracteres por encima del código 127 en fuentes no embebidas se dibujaban como signos de interrogación desde la versión 2.766.83; vuelven a leerse en el conjunto de caracteres de la fuente instalada
  • Las fuentes Symbol conservan su propio mapeo de códigos

Version 2.767.2

Fixed

  • Los glifos grandes de las fuentes embebidas ahora también se renderizan con antialiasing. Los glifos de más de 64 píxeles, como encabezados y títulos en resoluciones de impresión, se rellenaban sin antialiasing y mostraban bordes dentados; ahora llevan antialiasing hasta 256 píxeles, mientras el texto más grande de fuentes instaladas conserva la salida de texto antialiased del sistema

Version 2.767.1

Fixed

  • La extracción de texto layout, column y semantic ahora mide la página en unidades de página. Comparaban posiciones con el tamaño de fuente dado a Tf y con los avances de text-space, que son una fracción de las distancias reales en los muchos documentos que dimensionan el texto a través de la matriz de texto, así el texto layout repartía cada letra entre varias columnas, el texto column perdía todos los espacios entre palabras y el texto semantic ponía casi cada palabra en su propia línea
  • Los tres ahora devuelven solo el texto dentro del recuadro visible y separan las palabras que un documento separa moviendo la posición del texto, igual que el texto de página plain
  • El texto layout mantiene juntas las letras de una palabra, donde letras anchas como m o W solían meter un espacio dentro de la palabra
  • El texto semantic ya no pone una línea en blanco después de cada línea de una página de una sola columna: una racha de líneas de ancho completo forma una zona, y un cambio de zona separa líneas solo cuando distan más de un interlineado
  • Las páginas de ayuda de estos métodos describen qué devuelven, y el método de columnas muestra su sintaxis completa

Version 2.767.0

Added

  • LoadFromFile y LoadFromStream tienen sobrecargas con un parámetro AutoDecrypt. Con AutoDecrypt en True, un documento cifrado con contraseña de usuario vacía, como son los documentos que solo restringen imprimir, copiar o editar, se abre descifrado en memoria de la forma en que lo abren los visores, así se puede extraer su texto y renderizar y exportar sus páginas sin suministrar una contraseña
  • Los documentos que necesitan contraseña y los documentos sin cifrar cargan exactamente como los cargan las sobrecargas simples, y si la contraseña vacía abre el documento se comprueba a partir de unos pocos rangos pequeños del archivo antes de cargarlo
  • Como con las sobrecargas con contraseña, un documento abierto de esta forma deja de estar cifrado en memoria, y guardarlo escribe una copia sin cifrar

Version 2.766.83

Changed

  • El texto pequeño en fuentes no embebidas, como las 14 fuentes estándar y las fuentes Office y chinas instaladas, ahora se renderiza a partir de los glyph outlines sin hinting en su posición exacta, con el mismo antialiasing que las fuentes embebidas. La salida de texto del sistema usada antes colocaba cada glifo en un píxel entero y ajustaba su forma a la rejilla de píxeles, así el texto pequeño quedaba espaciado de forma despareja y se veía manchado; las páginas renderizadas ahora coinciden mucho más con las formas y el espaciado de otros visores
  • Los glifos que le faltan a la fuente instalada y los glifos grandes siguen dibujándose con la salida de texto del sistema, que puede tomar los caracteres faltantes de fuentes vinculadas

Fixed

  • Los glifos pequeños de las fuentes embebidas se dibujan más rápido, porque los bitmaps detrás de su antialiasing se reutilizan en lugar de crearse para cada glifo

Version 2.766.82

Fixed

  • El texto dibujado con fuentes instaladas en páginas renderizadas ahora usa antialiasing en escala de grises. Seguía la configuración ClearType del sistema, así el texto negro en los bitmaps renderizados arrastraba franjas rojas y azules que dependían de la computadora y quedaban en las imágenes guardadas, impresas o escaladas

Version 2.766.81

Fixed

  • El texto pequeño en fuentes CFF y OpenType CFF embebidas ahora se renderiza con antialiasing, como ya pasaba con el texto TrueType. Estos glifos se rellenaban sin antialiasing, así en tamaños pequeños y resoluciones normales de pantalla las astas más angostas que un píxel desaparecían y el texto de cuerpo se partía en fragmentos; los formularios y documentos compuestos en fuentes como Helvetica Neue ahora son legibles a 72 DPI

Version 2.766.80

Changed

  • La extracción de texto de página devuelve solo el texto que la página muestra. Los glifos que quedan fuera del área visible, el crop box dentro del media box, se dejan afuera, así las marcas de imprenta, las líneas de corte y demás contenido fuera de una página recortada ya no aparecen en el texto extraído. La extracción a nivel de glifos sigue devolviendo cada glifo con su posición

Version 2.766.79

Fixed

  • La extracción de texto de página ya no parte una línea en un superíndice elevado o en una línea base levemente desplazada en texto dimensionado a través de la matriz de texto. Una línea nueva empezaba cada vez que el texto subía o bajaba la mitad del tamaño de fuente dado a Tf, que suele ser 1 en esos documentos, así un movimiento de medio punto bastaba
  • El texto rotado, como etiquetas que suben por el costado de una página o marcas de agua diagonales, ya no pone cada carácter en su propia línea. Las líneas ahora se distinguen por el movimiento a través de la dirección en que corre el texto, comparado con la mitad de la altura del texto en la página

Version 2.766.78

Fixed

  • Cuando la exportación SVG cae a una familia de fuentes genérica para una fuente que no está instalada, ahora nombra primero una cara común de ese tipo: Times New Roman antes que serif, Arial antes que sans-serif y Courier New antes que monospace. El navegador elige la cara para una familia genérica pura según su propia configuración de idioma, y los navegadores en chino o japonés elegían fuentes CJK cuyas letras latinas anchas se superponían en las posiciones tomadas del PDF

Version 2.766.77

Fixed

  • La exportación SVG ahora nombra familias de fuentes chinas instaladas para las fuentes conocidas por sus nombres GB2312 heredados, como KaiTi_GB2312 o su ortografía china. Las aplicaciones de Windows llegan a estas fuentes a través de los sustitutos de fuente del sistema, pero los navegadores no, así ese texto se mostraba en la fuente por defecto del navegador
  • Una fuente nombrada en un solo idioma también recibe el otro nombre de la familia instalada, por ejemplo SimHei junto con su nombre chino, y una familia genérica que coincida con su estilo

Version 2.766.76

Added

  • THPDFGlyphRecord tiene GlyphEndX y GlyphEndY, el fin en espacio de página del ancho del propio glifo a lo largo de la línea base, sin character spacing ni word spacing

Fixed

  • La extracción de texto de página ahora separa las palabras que un documento separa moviendo la posición del texto en lugar de mostrar un carácter de espacio. Muchos productores escriben [(PDF)-240(Reference)] o colocan cada palabra con su propio operador de posicionamiento, y esas palabras solían pegarse como PDFReference
  • Se agrega un espacio donde la brecha tras el ancho del propio glifo supera 0.15 de la altura del texto, medido en unidades de página para que el texto dimensionado por la matriz de texto se trate igual que el texto dimensionado por el tamaño de fuente
  • El kerning, el espaciado levemente ampliado, el character spacing reducido que los ajustes de posición devuelven, el texto sobreimpreso y los caracteres de espacio reales quedan como están, y no se agrega espacio entre dos caracteres chinos, japoneses o coreanos por más que la justificación los separe

Version 2.766.75

Fixed

  • La extracción de texto, la exportación SVG y el renderizado ahora reconocen los nombres de glifo de la fuente Symbol, como copyrightsans, registerserif, trademarksans y las piezas de corchetes y llaves grandes (parenlefttp, braceex, integralex, ...). Las fuentes Symbol de subconjunto suelen re-encodear estos nombres, y los caracteres salían como códigos de control crudos
  • También se reconocen todos los nombres de glifo de ITC Zapf Dingbats (a1 a a206), así los checks, cruces, flechas y números circulados que una fuente selecciona a través de estos nombres, como suelen hacer los campos de formulario y las listas con viñetas, se extraen como sus caracteres Unicode
  • Buscar el nombre de glifo de un carácter sigue prefiriendo el nombre común, como arrowright o spade, antes que un nombre ZapfDingbats

Version 2.766.74

Fixed

  • HPDFExtractGlyphsViaDevice ya no falla con una operación de puntero inválida. El dispositivo de extracción de texto que crea se maneja por conteo de referencias, y la función además lo liberaba explícitamente, así cada llamada terminaba liberando el dispositivo por segunda vez

Version 2.766.73

Fixed

  • La extracción de texto ahora restaura el estado de texto con Q como exige la especificación (ISO 32000-1 9.3.1). Antes solo se restauraba la transformación, así una fuente, un character spacing o un leading establecidos dentro de q ... Q seguían vigentes para el texto que venía después
  • Cuando la fuente seleccionada dentro de q ... Q usaba códigos de dos bytes y la fuente de afuera códigos de un byte, el texto posterior a Q se decodificaba como códigos de dos bytes y se perdía. Word y productores similares escriben páginas de esta forma, típicamente perdiendo los puntos de guía de los índices y las palabras en latín entre tramos chinos
  • La corrección cubre tanto la API de texto de página como la interfaz de extracción de texto basada en dispositivos

Version 2.766.72

Fixed

  • El texto dibujado después de RestoreState ahora siempre tiene su fuente seleccionada. La página se salta una selección de fuente que repite la última escrita, pero no tenía en cuenta que RestoreState (el operador Q) devuelve al lector a la fuente vigente antes de SaveState. El texto mostrado después de RestoreState en la fuente elegida dentro del par salía sin fuente o con la fuente equivocada, así los visores podían descartarlo y la extracción de texto no podía leerlo
  • El character spacing, el word spacing, el escalado horizontal y el leading siguen SaveState y RestoreState de la misma forma, así un valor que se vuelve a establecer después de RestoreState se escribe en lugar de saltarse mientras el lector ya volvió al valor anterior
  • Seleccionar una fuente Type 3 ya no provoca que se salte la siguiente selección de la fuente anterior
  • Los documentos XPS convertidos a PDF estaban afectados, porque cada run de glifos se dibuja dentro de su propio estado de gráficos guardado

Version 2.766.71

Fixed

  • La extracción de texto y la exportación SVG leen los códigos de una fuente simple (Type 1, TrueType o Type 3) como dos bytes cuando su CMap /ToUnicode declara un codespace de dos bytes, como escriben algunos productores para todas las fuentes. Los códigos de las fuentes simples son siempre de un byte (ISO 32000-1 9.6.6), así cada par de caracteres se tomaba como un código desconocido y la mayor parte del texto desaparecía, dejando solo cadenas de un solo carácter

Version 2.766.70

Fixed

  • La exportación SVG movía el texto por los operandos de Td, TD, T*, ' y " en unidades de página en lugar de en text space (ISO 32000-1 9.4.2). El texto cuyo tamaño viene de la matriz de texto, con 1 Tf y un Tm escalado como suelen escribirlo los procesadores de texto, tenía sus líneas apiladas una sobre otra cerca de la primera línea base; ahora se maqueta como en el PDF
  • La misma corrección aplica al extractor de texto basado en dispositivos THPDFTextExtractDevice

Version 2.766.69

Fixed

  • El renderizador de páginas pasaba a Windows los nombres de fuente que usan escapes #xx con los escapes incluidos, así las fuentes no embebidas nombradas de esa forma, común en fuentes CJK como KaiTi_GB2312 escrito en caracteres chinos, no coincidían con ninguna fuente instalada y se dibujaban en una cara sustituta. Los escapes ahora se decodifican; los nombres UTF-8 conservan sus caracteres y los demás bytes se leen en la code page del sistema

Version 2.766.68

Fixed

  • La exportación SVG escribía los nombres de fuente que usan escapes #xx como los escapes mismos, así los nombres de fuentes CJK guardados como bytes UTF-8 (como el nombre KaiTi_GB2312 en caracteres chinos) llegaban a font-family como #e6#a5#b7... y nunca coincidían con una fuente instalada. Los escapes ahora se decodifican; un nombre que es UTF-8 válido se conserva, y los bytes de otras codificaciones se descartan como antes

Version 2.766.67

Fixed

  • La exportación SVG no restauraba el estado de texto en Q: la fuente, el tamaño, el espaciado, el escalado, el leading, el rise y el render mode establecidos dentro de q ... Q se arrastraban al texto posterior. Las páginas que ponen en negrita un encabezado con 2 Tr dentro de un estado guardado dibujaban todo el texto de cuerpo siguiente con trazo y grueso. El estado de texto ahora se guarda y se restaura junto con el resto del estado de gráficos (ISO 32000-1 9.3.1)

Version 2.766.66

Fixed

  • La exportación SVG trazaba el texto en los render modes de trazo (1, 2, 5 y 6) sin ancho de trazo, así se aplicaba el default de SVG de una unidad de text-space; el texto que los productores PDF ponen en negrita con un trazo fino, como 2 Tr 0.25 w, salía mucho más grueso. El ancho de línea ahora se convierte del user space al espacio del elemento de texto, un ancho cero da una línea de un píxel y el line join se conserva

Version 2.766.65

Fixed

  • Los documentos cuyo trailer da /Encrypt como diccionario directo en lugar de referencia, como producen algunos escritores de PDF, se cargaban como sin cifrar: aun con la contraseña correcta sus páginas se renderizaban en blanco, la extracción de texto y la exportación SVG no devolvían nada, y SaveLoadedDocument escribía un archivo dañado que descartaba /Encrypt pero conservaba los streams cifrados. Ahora se abren, descifran y guardan como los documentos con un diccionario de cifrado indirecto
  • El cargador de referencias cruzadas cortaba el trailer en el primer >>, así las entradas después de un diccionario anidado en el trailer se perdían; ahora lee el trailer hasta su delimitador de cierre correspondiente

Version 2.766.64

Fixed

  • El renderizado, la exportación SVG, el visor y la impresión mostraban el /MediaBox completo de una página cargada. Una página se muestra y se imprime a través de su /CropBox, recortada al /MediaBox (ISO 32000-1 14.11.2), así las páginas con crop box salían demasiado grandes, desplazadas y con contenido pensado para estar oculto
  • RenderLoadedPageToBitmap, los renderizadores de tile, band, metafile y device context, BuildLoadedPageSVG, la geometría de página del visor, los highlights y las capturas de región, y la impresión ahora cubren el recuadro visible; las páginas sin /CropBox quedan sin cambios

Added

  • THotPDF.GetLoadedPageVisibleBox devuelve el recuadro visible de una página cargada, su /CropBox recortado a su /MediaBox
  • THPDFPageDisplayList.CropBox da el mismo recuadro para una lista de visualización compilada

Version 2.766.63

Fixed

  • La lista de glifos integrada se buscaba hasta un conteo 13 entradas menor que la tabla, así los nombres de glifo que ordenan al final (y, z, zero, zeta, yen, ydieresis, zcaron y otros) nunca se encontraban. La extracción de texto ignoraba las entradas /Differences de una fuente que los nombraban, y el renderizador de páginas dibujaba la y, la z y el 0 de fuentes CFF embebidas con WinAnsiEncoding o MacRomanEncoding en una fuente de sistema sustituta
  • Buscar el nombre de glifo de un acento como U+0060 devolvía el nombre de versalita de MacExpertEncoding (Gravesmall) en lugar de grave, así esos acentos también se perdían en fuentes CFF embebidas

Version 2.766.62

Fixed

  • El renderizador de páginas usaba el ancho de línea y las longitudes de dash como píxeles de dispositivo en lugar de unidades de user space (ISO 32000-1 8.4.3.2 y 8.4.3.6); las líneas mantenían el mismo ancho en píxeles en cada resolución e ignoraban cualquier escalado de cm. Las diapositivas exportadas vía macOS Quartz, que trazan las formas con un ancho en EMUs bajo una escala de 1/12700, quedaban cubiertas por completo con el color del trazo
  • El ancho de trazo y los dashes ahora siguen la escala del CTM vigente cuando se traza el path, también para el texto dibujado en un render mode de trazo

Version 2.766.61

Fixed

  • La exportación SVG dejaba afuera los shadings Type 1 basados en función (ISO 32000-1 8.7.4.5.2), ya se pintaran con sh o se usaran en un shading pattern; ahora muestrea la función del shading sobre su /Domain en una imagen PNG embebida colocada a través de la /Matrix del shading, recortada a su /BBox, con el color de fondo del pattern debajo

Version 2.766.60

Fixed

  • El renderizador de páginas pintaba el color /Background de un shading de malla mostrado con el operador sh, que el PDF ignora (ISO 32000-1 8.7.4.5.1), así toda el área de recorte alrededor de la malla tomaba ese color
  • El color de fondo de los shading patterns basados en función, axiales y radiales no lo pintaba el renderizador de páginas; ahora rellena el área del pattern antes del shading, así se ve donde el shading no alcanza
  • La exportación SVG ahora pinta el color de fondo de los shading patterns de la misma forma y, igual que el renderizador, lo ignora para sh

Version 2.766.59

Fixed

  • El renderizador de páginas ignoraba el /BBox de los shadings basados en función, axiales y radiales (ISO 32000-1 8.7.4.5.1); un shading extendido pintado con sh o usado en un shading pattern cubría toda el área de recorte en lugar de detenerse en su recuadro. Los shadings de malla ya lo respetaban

Version 2.766.58

Fixed

  • La exportación SVG escribía el texto en fuentes Type 3 como texto SVG en una fuente instalada, así las páginas que dibujan su texto o sus símbolos con procedimientos de glifo mostraban las formas equivocadas; ahora dibuja el procedimiento de cada glifo, colocado a través de la /FontMatrix de la fuente, el tamaño de fuente y la matriz de texto (ISO 32000-1 9.6.5)
  • Los glifos Type 3 que empiezan con d1 se pintan en el color de relleno actual, y los glifos que establecen sus propios colores los conservan

Version 2.766.57

Fixed

  • La extracción de texto y la exportación SVG tomaban los /Widths de una fuente Type 3 como milésimas de un em, aunque están en glyph space y se escalan por la /FontMatrix de la fuente (ISO 32000-1 9.6.5); los glifos de una fuente con matriz [0.01 0 0 0.01 0 0] se colocaban a un décimo de su avance, lo que además fusionaba palabras en el texto extraído

Version 2.766.56

Fixed

  • Renderizar una página cargada leía cada fuente Type 0 como si usara Identity-H, dos bytes por código y cada código como un CID propio. Las fuentes codificadas con los CMaps predefinidos UCS2 y UTF16 de las colecciones china, japonesa y coreana, como UniGB-UCS2-H, o con un CMap embebido ahora mapean sus códigos a CIDs, así los anchos /W y los glifos embebidos se buscan en los CIDs correctos; antes, por ejemplo, las letras latinas minúsculas en un texto STSong-Light quedaban espaciadas un em completo
  • Los códigos se leen por los rangos de codespace del CMap, así los códigos de un byte y de cuatro bytes (pares sustitutos) se leen completos, y los nombres que terminan en -V seleccionan la escritura vertical

Version 2.766.55

Fixed

  • Renderizar una página cargada dibujaba en una cara sustituta las fuentes no embebidas que llevan una parte de estilo o una ortografía PostScript en su nombre, como TimesNewRoman,Bold, TimesNewRomanPS-BoldMT, Arial,BoldItalic o SegoeUI-Semibold; la parte de familia del nombre ahora se busca entre las fuentes instaladas, también con espacios entre sus palabras (Times New Roman, Segoe UI), y el estilo sale del nombre y del font descriptor

Version 2.766.54

Fixed

  • Las fuentes estándar sin array /Widths, que ISO 32000-1 9.6.2.2 permite para las 14 fuentes estándar, se maquetaban con un avance fijo de medio em al renderizar una página cargada, exportarla a SVG o extraer su texto, así las letras se amontonaban; las familias Helvetica, Times y Courier, también bajo los nombres Arial, TimesNewRoman y CourierNew, ahora toman sus anchos de las Arial, Times New Roman y Courier New instaladas, que comparten sus métricas
  • Una fuente Type 1 estándar sin /Encoding ahora decodifica a través de su StandardEncoding implícito, así, por ejemplo, el código 39 se lee como comilla simple de cierre

Version 2.766.53

Fixed

  • Renderizar una página cargada ignoraba el array /Widths de una fuente cuando era un objeto indirecto, como lo escriben muchos productores, y maquetaba el texto con un avance fijo de medio em; ese texto ahora se espaacia por sus widths
  • Los font descriptors dados como objetos indirectos ahora se leen al renderizar, así los flags ForceBold y Italic y el ángulo itálico de las fuentes no embebidas surten efecto
  • El flag SmallCap ya no pone el texto en negrita: la negrita ahora sigue el flag ForceBold (ISO 32000-1 Table 123)

Version 2.766.52

Fixed

  • Renderizar una página cargada ahora recorta al texto mostrado en los render modes 4 a 7 (ISO 32000-1 9.3.6): los glifos pasan a formar parte del clipping path al final del objeto de texto, hasta que se restaura el estado de gráficos. Antes, el texto en mode 7 se ignoraba y un shading o una imagen pensados para verse a través de las letras cubrían toda el área, y los modes 4 a 6 pintaban el texto sin recortar
  • El texto de recorte se toma de los mismos glyph outlines que el texto pintado, fuentes embebidas y glifos Type 3 incluidos

Version 2.766.51

Fixed

  • La exportación SVG ahora recorta al texto mostrado en los render modes 4 a 7 (ISO 32000-1 9.3.6): los glifos se convierten en un clipping path SVG desde el fin del objeto de texto hasta el fin del estado de gráficos, así un shading o una imagen dibujados a través del texto aparecen solo dentro de las letras
  • El texto en render mode 7 ya no se pierde sin recortar nada, y los modes 4 a 6 siguen rellenando o trazando el texto como lo hacen los modes 0 a 2

Version 2.766.50

Fixed

  • Los shadings axiales, radiales y basados en función cuyo /Function es un array de funciones de una sola salida, una por componente de color (ISO 32000-1 8.7.4.5.1), no se dibujaban al renderizar una página cargada; ahora se dibujan, con las funciones del array dadas directamente o como objetos indirectos
  • La exportación SVG escribe esos shadings axiales y radiales como gradientes, incluido cuando rellenan un path a través de un shading pattern

Version 2.766.49

Fixed

  • La exportación SVG escribía el texto en negrita e itálica en el estilo regular: el texto ahora recibe font-weight="bold" y font-style="italic" a partir de la parte de estilo del nombre de la fuente, como Arial-BoldMT, Helvetica-Oblique o MinionPro-It, y del weight, los flags y el ángulo itálico del font descriptor
  • Las fuentes fuera de las 14 familias estándar se escribían con su parte de estilo dentro del nombre de familia (SegoeUI-Semibold), que no coincide con ninguna fuente instalada; la familia ahora se nombra por su cuenta y con espacios entre sus palabras (SegoeUI, Segoe UI), seguida de una familia genérica a partir de los flags del descriptor o del nombre

Version 2.766.48

Fixed

  • La exportación SVG dibujaba el contenido de los Form XObjects en negro en lugar de con los colores de relleno y trazo vigentes donde se pinta el form (ISO 32000-1 8.10.1); un Q dentro del form ahora restaura también esos colores
  • Los content devices pueden iniciar contenido anidado con los colores de quien llama a través de la nueva interfaz IHPDFContentInheritedColorDevice

Version 2.766.47

Added

  • La exportación SVG ahora rellena los paths que usan un tiling pattern con un <pattern> SVG que repite la celda del pattern a su espaciado XStep y YStep, recortado al /BBox de la celda; antes, esos paths se rellenaban en negro o conservaban el color anterior
  • Los tiling patterns sin color (PaintType 2) pintan la celda en el color dado con el pattern, como los componentes en /CS0 cs 0 0 1 /P1 scn
  • Los paths rellenados con un shading pattern reciben el shading axial, radial o de malla del pattern, recortado al path
  • La matriz del pattern se aplica en el espacio de la página o del form que usa el pattern (ISO 32000-1 8.7.2), así los patterns no se escalan ni se mueven con la matriz de transformación actual, y un Q recupera un pattern guardado con q
  • Los content devices pueden recibir selecciones de pattern a través de la nueva interfaz IHPDFContentPatternDevice

Version 2.766.46

Added

  • Las imágenes con un array /Mask de color-key (ISO 32000-1 8.9.6.4) ahora se enmascaran al renderizar una página cargada: los píxeles cuyos componentes caen todos dentro de los rangos de la key quedan sin pintar, así la página se ve a través de ellos
  • La exportación SVG aplica las mismas color-key masks y escribe esas imágenes como imágenes PNG con canal alfa
  • La key se compara con las muestras tal como están guardadas, así una imagen Indexed se enmascara por índice de paleta incluso cuando dos entradas comparten color, y se cubren las imágenes de 1, 2 y 4 bits por componente
  • El nuevo método DecodeLoadedImageColorKeyMask devuelve la máscara de una imagen cargada como un bitmap en blanco y negro; cubre imágenes Flate, LZW y sin filtrar, porque los codecs con pérdida no conservan valores de muestra exactos

Version 2.766.45

Changed

  • CompressDocument y CompressLoadedDocument dejan que cada object stream contenga hasta 250 objetos en lugar de 100; menos contenedores más grandes comprimen mejor y necesitan menos diccionarios
  • Los PDFs cargados que ya estaban escritos de forma compacta con object streams ahora salen con un tamaño cercano al del original, la mayoría levemente menores, en lugar de levemente mayores
  • Un límite establecido a través de ConfigureAdaptiveObjectStreamPacking se conserva, CompressDocument restaura el límite en EndDoc, y los guardados con object streams simples mantienen 100 objetos por contenedor

Version 2.766.44

Changed

  • El stream de referencias cruzadas de los archivos escritos con object streams usa el ancho de campo más pequeño que cada columna necesita, así los offsets en archivos de menos de 16 MB ocupan 3 bytes en lugar de 4 (ISO 32000-1 7.5.8.2), y su diccionario se escribe de forma compacta
  • Los archivos escritos con stream de referencias cruzadas pero sin object streams quedan sin cambios

Version 2.766.43

Changed

  • Los archivos sin cifrar escritos con object streams ahora también empaquetan el catálogo del documento y el diccionario de información del documento dentro de object streams, donde quedan comprimidos; ISO 32000-1 7.5.7 solo deja fuera el diccionario de cifrado
  • Los archivos cifrados mantienen ambos diccionarios en el nivel superior, como antes

Version 2.766.42

Changed

  • Los archivos escritos con object streams, incluidos los de CompressDocument y CompressLoadedDocument, escriben los diccionarios y los arrays de forma compacta, dejando fuera los espacios y saltos de línea que la sintaxis PDF no necesita (ISO 32000-1 7.2.2); los diccionarios de streams, que no pueden ir dentro de object streams y siguen sin comprimirse, son los que más ganan
  • Los diccionarios de firma y el diccionario de cifrado conservan su diseño con espacios, así firmar un documento escrito con object streams funciona como antes
  • Los archivos escritos sin object streams no cambian byte a byte

Version 2.766.41

Fixed

  • Los archivos PDF escritos con object streams ya no arrancan dos veces con el encabezado %PDF- y la línea de comentario binario; esto afectaba cada guardado con UseObjectStreams, CompressDocument o CompressLoadedDocument
  • Los visores toleraban el encabezado repetido, pero los validadores estrictos podían marcarlo, y costaba 15 bytes por archivo

Version 2.766.40

Fixed

  • Los PDFs cargados que guardan un número suelto dentro de un object stream, como muchos productores almacenan las longitudes de stream, ahora se pueden editar y guardar; cualquier cambio detenía el guardado con "Cannot rewrite compressed object N: the source member could not be loaded"
  • Ese número ahora se lee como número; antes, el parser buscaba una referencia indirecta más allá del final del miembro y se rendía, así que el miembro no se podía cargar en absoluto
  • Guardar ese archivo sin cambios no se veía afectado, porque un archivo sin cambios se copia tal cual

Version 2.766.39

Fixed

  • Las anotaciones de sello en documentos PDF/A-2 y posteriores y PDF/X-6 mostraban solo su marco, sin el nombre del sello como APPROVED o CONFIDENTIAL
  • El nombre ahora se dibuja en la fuente actual de la página, que se embebe junto con el texto de la página, en mayúsculas y con el color de la anotación, centrado en el rectángulo
  • Los nombres largos como NOTFORPUBLICRELEASE se dibujan a un tamaño menor para que quepan en el ancho del rectángulo
  • Los documentos siguen pasando la validación PDF/A; los sellos en otros documentos se escriben como antes

Version 2.766.38

Added

  • Nueva sobrecarga de CompressLoadedDocument con opciones que deja un PDF cargado lo más pequeño posible sin cambiar cómo se ve: descarta recursos de página sin usar, fusiona fuentes y formularios idénticos, crea subconjuntos de las fuentes embebidas, recomprime streams con Flate y escribe el siguiente guardado con object streams
  • Cada paso es sin pérdidas y las imágenes no se remuestrean ni se recomprimen; un documento de tres páginas que embebe las fuentes completas Arial y SimSun baja de unos 10 MB a unos 20 KB, y otros tres PDFs de ejemplo se redujeron entre 15 y 50%
  • Los documentos con campos de firma se rechazan por defecto y quedan sin cambios, porque cada paso reescribe bytes firmados; AllowSignatureInvalidation los comprime de todos modos
  • SubsetLoadedFonts gana una opción CompactTrueTypeSubsets, desactivada por defecto, que construye subconjuntos compactos de las fuentes TrueType usadas mediante fuentes CIDFontType2 con el mapeo CID identity; las color fonts y las fuentes con /CIDSet conservan el subconjunto normal
  • La CompressLoadedDocument sin parámetros mantiene su comportamiento de recomprimir solo los streams sin filtro

Version 2.766.37

Added

  • Nueva propiedad CompressDocument, desactivada por defecto: un solo interruptor que escribe el siguiente documento lo más pequeño posible sin cambiar cómo se ve
  • Para ese documento activa la compresión Flate al nivel máximo, un stream de referencias cruzadas con object streams (ISO 32000-1 7.5.7 y 7.5.8), el subconjunto de fuentes y los subconjuntos de fuentes compactos; un documento de tres páginas con texto mezclado en inglés y chino baja de unos 10 MB a unos 20 KB
  • Los object streams necesitan PDF 1.5, así que una Version más antigua sube a 1.5 salvo que la versión esté bloqueada; la salida PDF/A-1 conserva su tabla de referencias cruzadas clásica
  • Los ajustes propios quedan intactos: tras EndDoc, Compression, CompressionLevel, UseXRefStream, UseObjectStreams, las opciones de subconjunto de fuentes y la versión se leen tal como se configuraron
  • Las imágenes no se remuestrean ni se recomprimen

Version 2.766.36

Added

  • Nueva propiedad CompactFontSubsetting, desactivada por defecto: los subconjuntos de fuentes renumeran los glifos que conservan, así la fuente embebida ya no lleva una entrada por cada glifo de la fuente de origen; un stream /CIDToGIDMap explícito mapea los códigos de glifo de la página a los glifos renumerados (ISO 32000-1 9.7.4.2)
  • Las fuentes CJK son las que más se reducen: dos caracteres chinos en SimSun ocupan unos 3 KB de datos de fuente en lugar de unos 25 KB, y un documento en Microsoft YaHei baja de 114 KB a 6 KB
  • Se aplica a las fuentes TrueType escritas como fuentes Type 0 cuando EnableFontSubsetting está activado, y a la fuente registrada con RegisterUnicodeTTF, que hasta ahora solo recibía subconjuntos compactos bajo PDF/A
  • El contenido de la página, los anchos de glifo y la extracción de texto no cambian; las fuentes OpenType-CFF conservan el subconjunto normal, y una fuente que no se puede compactar vuelve a él

Version 2.766.35

Fixed

  • El texto dibujado con un avance explícito por cada carácter ya no se desplaza tras un carácter fuera del Basic Multilingual Plane, como un símbolo musical o un emoji, cuando la fuente Unicode registrada lo cubre. Cada carácter siguiente tomaba el avance de su vecino; ahora el carácter avanza según la suma de sus dos entradas
  • Las cajas de texto Unicode justificadas que contienen esos caracteres se alinean en el borde de la caja, y el subrayado o tachado de ese texto mide lo mismo que el texto

Version 2.766.34

Added

  • La exportación SVG ahora dibuja las image masks (/ImageMask), incluidas las inline, como stencils con el color de relleno actual: las partes que no se pintan quedan transparentes en lugar de dibujarse como una imagen en blanco y negro
  • Las imágenes con una soft mask /SMask o un stencil /Mask explícito se exportan como imágenes PNG con canal alfa, así sus partes enmascaradas ya no tapan lo que hay detrás
  • Un /Decode [1 0] en una mask o image mask se respeta, y una mask más fina que su imagen conserva su detalle

Version 2.766.33

Fixed

  • El renderizado de páginas ahora respeta el stencil /Mask explícito de una imagen: las partes que la máscara cubre quedan sin pintar en lugar de dibujarse la imagen completa, incluso cuando la imagen está girada o reflejada
  • Un array /Decode [1 0] en la máscara invierte qué partes se conservan
  • Las soft masks y las máscaras más finas que su imagen se aplican a la resolución de la máscara, así una máscara de 1 bit con detalle sobre una foto de baja resolución conserva sus bordes

Version 2.766.32

Fixed

  • El renderizado de páginas ahora dibuja las imágenes a través de la matriz de transformación completa: las imágenes giradas un cuarto de vuelta o cualquier otro ángulo, las imágenes reflejadas y toda imagen en una página con /Rotate ya no se dibujan derechas y sin reflejar dentro de su bounding box
  • Las image masks (/ImageMask true) ahora se pintan como stencils con el color de relleno actual, con bordes con antialias cuando se reducen, en lugar de dibujarse como una imagen gris
  • Las image masks con /Decode [1 0] ahora pintan las muestras de 1, como especifica PDF
  • Las image masks inline (BI /IM true) vuelven a dibujarse, y su array /D se respeta
  • Las imágenes con soft mask conservan su máscara cuando se giran o se reflejan

Version 2.766.31

Added

  • La exportación SVG ahora convierte los colores establecidos con k/K (DeviceCMYK) y con cs/sc/scn en cualquier espacio de color con nombre: los colores ICCBased, calibrados, Lab, Indexed, Separation y DeviceN salen como los muestra el renderizador de páginas en lugar de salir en negro
  • Seleccionar un espacio de color con cs/CS ahora establece su color inicial, por ejemplo tinte completo para un spot color, y restaurar el estado de gráficos con Q recupera un color establecido de esta forma
  • Los espacios de color que refieren perfiles ICC, tablas de búsqueda o funciones de tinte por referencia se resuelven a través del documento exportado durante la exportación SVG
  • La enumeración de paths ahora reporta los colores de relleno y de trazo CMYK en lugar de conservar el color anterior

Version 2.766.30

Fixed

  • THPDFEmfPatcher.RenderEmfDirect dibuja los bitmaps de un metafile extendido al mismo tamaño y posición con cualquier Resolution. Con una Resolution distinta de 72 salían escalados por 72 / Resolution

Version 2.766.29

Added

  • La exportación SVG ahora aplica los clipping paths W y W*: cada uno se convierte en un clip path SVG que cubre lo que se dibuja después de él hasta que se restaura el estado de gráficos, así las imágenes, los shadings y los paths que un PDF recorta ya no se dibujan completos
  • Los Form XObjects se recortan a su /BBox en la exportación SVG, y los shadings axiales y radiales a su /BBox
  • El recorte even-odd (W*) conserva su fill rule, y un path pintado junto con W se dibuja antes de que el nuevo clip entre en vigor, como especifica PDF

Version 2.766.28

Fixed

  • Los charts dibujados con DrawChart conservan su layout con cualquier Resolution. Sus márgenes, títulos, etiquetas de ejes y anchos de línea son valores en puntos y se encogían con la Resolution
  • La fuente por defecto de una página nueva, y de una página que vuelve a ser la actual, es de 12 puntos con cualquier Resolution en lugar de 12 unidades de dibujo
  • El overlay de diagnóstico de layout conserva su ancho de línea y el tamaño de sus etiquetas con cualquier Resolution

Version 2.766.27

Fixed

  • DrawInlineImage y DrawFormXObject dimensionan la imagen o el formulario en unidades de dibujo, igual que su posición. Con una Resolution distinta de 72 el ancho y el alto se tomaban como puntos, así que el objeto salía demasiado grande

Version 2.766.26

Fixed

  • Una página que vuelve a ser la actual mediante CurrentPageNumber sigue dibujando en las unidades en que fue maquetada. Con una Resolution distinta de 72 cambiaba a puntos, así que todo lo dibujado después en ella salía con tamaño y posición equivocados
  • La página también conserva su propia Resolution de página cuando se regresa a ella

Version 2.766.25

Fixed

  • Las imágenes colocadas con ShowImage conservan su tamaño en una página dimensionada mediante Width y Height cuando la Resolution del documento no es 72. Con una Resolution de 144 salían a la mitad del tamaño y desplazadas
  • ExtTextOut coloca cada carácter en los avances indicados en esa página en lugar de a la mitad de ellos
  • Los runs de glifos embebidos conservan sus offsets y avances de glifo en esa página

Version 2.766.24

Added

  • La exportación SVG ahora respeta la entrada /Extend de los shadings axiales y radiales: un extremo sin extender, que es el valor por defecto, queda sin pintar como en PDF en lugar de extender su color final por todo el clip
  • Para los shadings radiales esto también deja vacío el interior del círculo inicial salvo que el inicio esté extendido

Version 2.766.23

Fixed

  • El aplanado de la rotación de página ahora gira los appearance streams de las anotaciones junto con la página, así las anotaciones horneadas o aplanadas se ven igual que en la página rotada en lugar de quedar apretadas de lado dentro de su rectángulo girado
  • La rotación de widgets (/MK /R) se ajusta según el giro de la página, así las apariencias de campos de formulario regeneradas tras el aplanado conservan su orientación
  • Las anotaciones con la marca NoRotate siguen derechas y conservan su tamaño tras el aplanado, ancladas por su esquina superior izquierda como las muestran los visores en una página rotada

Version 2.766.22

Fixed

  • El aplanado de la rotación de página en un PDF tagged ya no gira dos veces el rectángulo de una anotación cuando se llega al árbol de estructura antes del árbol de páginas
  • El aplanado de la rotación de página ya no rota el bounding box de los Form XObjects usados en la página; su geometría vive en el espacio del formulario y el giro de página ya se les aplica a través de la transformación de contenido
  • Los bounding boxes de layout de los elementos de estructura que pertenecen a otra página ya no cambian cuando se aplana una página

Version 2.766.21

Fixed

  • Leer el bleed, trim o art box de una página cargada ya no toma un /BleedBox, /TrimBox o /ArtBox puesto en un nodo /Pages padre; estos boxes no son heredables en PDF, así que una página sin entrada propia ahora reporta su crop box como exige la especificación
  • El aplanado de la rotación de página ya no copia a la página un bleed, trim o art box de nivel padre

Version 2.766.20

Fixed

  • El texto dibujado en el Canvas de la página o en un metafile colocado con ShowMetafile conserva su tamaño cuando la Resolution del documento no es 72. Con una Resolution de 144 salía a la mitad de su tamaño mientras el resto del dibujo salía correcto
  • El Canvas de la página y ShowMetafile dibujan al tamaño correcto en una página dimensionada mediante Width y Height, que dibuja en puntos. Con una Resolution de 144 el dibujo salía el doble de grande
  • El Canvas de la página y ShowMetafile también respetan una Resolution establecida en la propia página en lugar de encoger el dibujo por ella

Version 2.766.19

Fixed

  • Las cajas de texto Unicode justificadas ahora terminan en el borde de la caja cuando hay espaciado de caracteres establecido. Cada carácter recibía el espaciado encima de su posición justificada, así que cada línea pasaba del borde derecho por el espaciado multiplicado por el número de caracteres
  • Las cajas de texto Unicode justificadas con escalado horizontal vuelven a llenar todo el ancho de la caja en lugar de quedarse cortas por el factor de escalado
  • El word spacing ahora cuenta para el ancho natural de una línea justificada, el mismo ancho en el que se partió la línea
  • El texto dibujado con un avance explícito por cada carácter cae en esas posiciones sin importar qué espaciado de caracteres o escalado horizontal esté en vigor

Version 2.766.18

Fixed

  • El aplanado de la rotación de página ahora gira las páginas con /Rotate 90 y /Rotate 270 en sentido horario, así la página aplanada se ve exactamente como la original rotada en lugar de quedar cabeza abajo respecto a ella
  • Las anotaciones, los destinos de links y la geometría de la estructura se mueven con la página de la misma forma
  • Aplanar una página sin CropBox ya no agrega una que cortara la página a un cuadrado; solo se giran los page boxes que la página realmente tiene

Version 2.766.17

Fixed

  • Las cadenas de fallback de fuentes ahora encuentran caras como SimSun y Microsoft YaHei en sistemas Windows que las reportan con un nombre localizado, así el texto CJK mixto en WideTextOutBox, WideTextOutBoxEx y TextOutWithFallback se dibuja con la cara de fallback en lugar de mostrar cajas vacías
  • El texto cuya propia fuente es una de esas caras ya no se parte en runs de fallback ni se reporta como sin resolver en el diagnóstico de glifos sin resolver
  • Una cara puede listarse en una cadena por cualquier nombre de familia que lleve, en cualquier idioma; una cara que Windows solo sustituye por otra fuente sigue omitiéndose

Version 2.766.16

Fixed

  • La composición N-up ahora coloca las páginas con /Rotate 90 y /Rotate 270 giradas en sentido horario dentro de sus celdas; antes se giraban al revés y quedaban empujadas fuera de la celda, a menudo fuera de la hoja
  • Las páginas con /Rotate 180 ahora se giran sobre la hoja en lugar de componerse derechas
  • La composición N-up ahora respeta los page boxes y el /Rotate heredados del árbol de páginas, así que esas páginas ya no se saltan ni se componen sin rotar
  • Las páginas en blanco insertadas en un documento cargado, incluidas las hojas N-up compuestas, ya no se giran ni se recortan por un /Rotate o /CropBox heredado del árbol de páginas

Version 2.766.15

Fixed

  • HPDFTokenizeContentStreamAppend ya puede reutilizar un array de tokens después de que su contador vuelva a cero: los tokens que quedaron de la ejecución anterior se liberan primero, así que sus strings ya no hacen leak y sus items del array o sus datos de imagen inline ya no aparecen en los tokens nuevos
  • Agregar muchos content streams pequeños a un mismo array de tokens ahora hace crecer el array al menos al doble en lugar de realojarlo y moverlo en cada append, lo que mantenía lentas de compilar las páginas construidas con miles de streams pequeños

Version 2.766.14

Fixed

  • Las páginas con /Rotate 90 o /Rotate 270 ahora se renderizan giradas en sentido horario, como define la especificación PDF, en lugar de reflejadas por la diagonal; antes, la esquina superior izquierda de una página de 90 grados terminaba abajo a la derecha
  • La corrección cubre el renderizado de páginas y regiones, la exportación a bitmap, metafile y PNG o TIFF por bandas, y el backend de renderizado SIMD
  • Las conversiones de coordenadas de página a vista y de vista a página del visor, y sus overlays de búsqueda y resaltado, siguen el mismo giro horario, así los hits y el hit-testing coinciden con la página renderizada

Version 2.766.13

Fixed

  • La exportación SVG de páginas ahora escribe el texto como UTF-8, como declara el documento, así los caracteres acentuados y CJK sobreviven en lugar de convertirse en signos de interrogación o en bytes que dejan el archivo ilegible; los códigos de control que XML no permite se convierten en U+FFFD
  • El texto después del primer run de una línea, y el texto después de un ajuste de kerning TJ, ahora se coloca correctamente cuando la matriz de texto escala o rota el texto, que es como muchos productores de PDF establecen el tamaño de fuente
  • La elevación del texto y el escalado horizontal ahora siguen una matriz de texto escalada o rotada, y los ajustes TJ respetan el escalado horizontal
  • El texto dibujado con los render modes 4 a 6 (pintar y clipear) se exporta en lugar de descartarse, el texto invisible sigue moviendo la posición del texto, y el texto con trazo conserva su opacidad de trazo
  • El word spacing ya no se aplica a códigos de dos bytes que por casualidad valen 32, y los runs de espacios se conservan para que cada carácter quede en su propia posición
  • Los glifos de ligaduras exportan todos los caracteres que representan, y las fuentes con códigos mezclados de uno y dos bytes se leen código por código
  • Las páginas cuyo /MediaBox no empieza en el origen ahora caen sobre el canvas SVG en lugar de quedar desplazadas fuera de él

Version 2.766.12

Fixed

  • Dibujar en THPDFPage.Canvas, y los metafiles reproducidos como gráficos vectoriales con ShowMetafile en una posición y escala, ya no pierden parte de sus bordes izquierdo y superior cuando establecen una región de clip. Cada región de clip se movía una unidad hacia adentro por esos dos lados, así que un borde o un relleno junto al borde izquierdo o superior salía más delgado que el mismo en el borde derecho o inferior
  • Las regiones de clip ahora coinciden con las mismas regiones al rellenarlas, y cubren la misma área con cualquier THotPDF.Resolution

Version 2.766.11

Fixed

  • Los subrayados y tachados del texto Unicode dibujado con TextOut, UnicodeTextOut, RtLTextOut y ExtTextOut ahora cubren exactamente el texto. Se medían sobre el texto convertido a la code page del sistema, así que los runs con letras cirílicas, hebreas, griegas, CJK u otras fuera de esa code page recibían barras que se quedaban cortas del texto o lo pasaban
  • Las barras también siguen el espaciado de caracteres, el word spacing, el escalado horizontal y los desplazamientos pasados a ExtTextOut

Version 2.766.10

Fixed

  • Los add-ons de exportación de reportes y grids (FastReport, QuickReport, ReportBuilder, DevExpress y DBGrid) ya no se sobrescriben la salida entre sí cuando varias exportaciones corren al mismo tiempo, por ejemplo en un servidor. Su archivo temporal se nombraba con un timer que solo cambia cada 10 a 16 ms, así que exportaciones arrancadas juntas escribían el mismo archivo

Version 2.766.9

Fixed

  • TextWidth ahora mide el texto como se dibuja cuando hay espaciado de caracteres, word spacing o escalado horizontal establecidos. El espaciado no se escalaba con el escalado horizontal, el word spacing negativo se ignoraba y un espacio final no recibía word spacing, así que la continuación de párrafos, los rectángulos de links y el texto centrado o alineado a la derecha se colocaban fuera del texto dibujado
  • TextWidth y GetWideTextWidth devuelven el mismo ancho para el mismo texto

Version 2.766.8

Fixed

  • El device de ReportBuilder (TppHotPDFDevice) ahora dibuja el texto nativo dentro de su caja de texto. El texto se posicionaba como si su posición fuera la baseline, así que cada objeto de texto arrancaba la línea demasiado abajo y su última línea se salía de la caja
  • El texto nativo centrado y alineado a la derecha se mide con los anchos Unicode con los que se dibuja, así el texto con letras fuera de la code page del sistema, como chino en un sistema occidental, se alinea correctamente

Version 2.766.7

Fixed

  • La exportación FastReport ahora coloca el texto del memo dentro de su memo. El texto se posicionaba como si su posición fuera la baseline, así que el texto de cada memo arrancaba una altura de fuente más abajo, y el texto alineado hacia abajo se dibujaba debajo del memo, donde el clipping lo escondía
  • La alineación vertical superior, centrada e inferior se mide desde el tope de la primera línea, tanto para memos planos como con tags HTML

Version 2.766.6

Fixed

  • El filtro de exportación FastReport (TfrxHotPDFExport) vuelve a compilar. La propiedad NotEmbeddedFonts leía un campo de otro tipo, y la exportación nativa de pictures usaba una propiedad Clipped que TfrxPictureView no tiene
  • La exportación nativa de pictures ahora recorta cada picture a su view, como hace FastReport, así una picture más grande que su view ya no se derrama sobre los objetos vecinos
  • Una picture centrada conserva su marco y su clip en los límites del view; solo la imagen se centra. Antes el marco se movía junto con la imagen

Version 2.766.5

Fixed

  • El add-on de DBGrid ahora mide el texto de las celdas con los anchos de texto Unicode con los que dibuja antes de cortarlo para que quepa en una columna. El texto con letras fuera de la code page del sistema, como chino en un sistema occidental, se medía como signos de interrogación y pasaba de la celda; el texto de doble byte en sistemas chino, japonés o coreano se cortaba mucho antes de llenar la celda
  • Un corte nunca deja la mitad de un surrogate pair antes del ...

Version 2.766.4

Fixed

  • El add-on de DBGrid (TDBGridHotPDFExport y DBGridHotPDFExportToFile/ToStream) ahora dibuja el texto de las celdas dentro de sus celdas. El texto se colocaba como si su posición fuera la baseline, así que el texto de cada fila quedaba sobre el borde inferior de la celda y la línea de grid de la fila siguiente lo cortaba
  • El texto del encabezado se centra en la fila de encabezado, y el título ya no toca el tope de la tabla

Version 2.766.3

Fixed

  • GetLoadedPDFVersionString ahora devuelve %PDF-1.7 y similares en sistemas cuyo locale escribe la coma decimal; allí devolvía %PDF-1,7
  • El campo pdfVersion de GetLoadedDocumentReport queda corregido de la misma forma

Version 2.766.2

Fixed

  • La importación HTML (RenderHTML y RenderHTML5) produce la misma página con cualquier THotPDF.Resolution. Las longitudes CSS y el Margin, BaseFontSize, ListIndent y BlockSpacing del importador son puntos, pero con Resolution 144 el texto, los márgenes, las listas y las tablas salían a la mitad del tamaño
  • El texto y los gráficos que dibuje antes y después de la importación siguen usando 1/Resolution de pulgada
  • Los documentos construidos con la Resolution por defecto de 72 salen exactamente igual que antes

Version 2.766.1

Fixed

  • Los formularios XFA aplanados con ApplyXFAAsAcroForm o FlattenLoadedXFA conservan las posiciones, tamaños y tamaños de fuente de la plantilla con cualquier THotPDF.Resolution. Con Resolution 144 todo el formulario salía a la mitad del tamaño en la esquina superior izquierda de la página
  • El texto y los gráficos que dibuje antes y después del aplanado siguen usando 1/Resolution de pulgada
  • Los documentos construidos con la Resolution por defecto de 72 salen exactamente igual que antes

Version 2.766.0

Added

  • THPDFPage.UserWidth y THPDFPage.UserHeight devuelven el tamaño de la página en las unidades con las que dibuja, 1/Resolution de pulgada, así el código de layout puede compararlo con coordenadas, márgenes y TextWidth con cualquier THotPDF.Resolution. Width y Height siguen devolviendo puntos, y el código existente lee los mismos valores que antes

Fixed

  • Con THotPDF.Resolution establecida en un valor distinto de 72, los párrafos ahora parten líneas en el espacio real entre sus márgenes y saltan a la página siguiente en el margen inferior. Medían la página en puntos, así que con 144 un párrafo con márgenes anchos podía partir después de cada carácter y extenderse por muchas más páginas de las debidas
  • Un párrafo que continúa en una página nueva conserva el mismo tamaño de página, coordenadas y tamaño de fuente con cualquier Resolution. Con 144 la página de continuación cambiaba a coordenadas en puntos y el texto en ella salía a la mitad del tamaño
  • THPDFTable solo salta a una página nueva cuando una fila alcanza el margen inferior; con 144 una tabla colocada en la mitad inferior de la página ponía cada fila en una página propia
  • La importación HTML maqueta el texto a lo ancho de toda la página con cualquier Resolution en lugar de la mitad izquierda
  • Los metafiles dibujados centrados en la página, y las regiones de clip de metafiles que cubren toda la página, usan la página completa con cualquier Resolution
  • El diagnóstico de layout de las capas de página y de las páginas volcadas reporta el tamaño de página en unidades de dibujo
  • Los documentos construidos con la Resolution por defecto de 72 salen exactamente igual que antes

Version 2.765.52

Fixed

  • Las contraseñas AES-256 con letras no ASCII ahora funcionan en otros lectores de PDF. HotPDF calculaba el hash de la contraseña en la code page del sistema, mientras que ISO 32000-2 la define como UTF-8, así que otros lectores rechazaban una contraseña como una china o con acentos; quedan corregidas tanto la revisión 5 como la 6
  • Las contraseñas AES-256 de más de 127 bytes ahora se cortan a 127 bytes como define el estándar, así los lectores que lo siguen las aceptan
  • HotPDF ahora abre archivos AES-256 de otros productores cuya contraseña tiene letras no ASCII
  • Los archivos que versiones anteriores cifraban con esas contraseñas siguen abriéndose en HotPDF con la misma contraseña

Version 2.765.51

Fixed

  • El texto ANSI escrito después de texto Unicode con la misma fuente ya no aparece como cajas vacías. Cuando una página dibujaba texto Unicode con TextOut y luego usaba TextBox o TextOutBoxEx con la misma cara (por ejemplo Arial a otro tamaño), el texto ANSI se escribía dentro de la fuente Unicode y los visores no encontraban sus glifos; ahora recibe su propio recurso de fuente y se muestra y se extrae correctamente
  • Las páginas que usan solo texto ANSI o solo texto Unicode producen la misma salida que antes

Version 2.765.50

Fixed

  • Los documentos cifrados con AES-256 revisión 6 (UseAES256R6, y el AES-256 de PDF 2.0) ahora abren en otros lectores de PDF. El hash de la contraseña se calculaba con el salt en cada ronda y sin la entrada de usuario del lado del owner, así que qpdf, MuPDF y otros lectores rechazaban ambas contraseñas; HotPDF solo aceptaba sus propios archivos
  • HotPDF ahora abre archivos de revisión 6 creados por otros productores con su contraseña de usuario o owner en lugar de reportar una contraseña incorrecta
  • El ejemplo AES-256 R6 del demo Security abre en otros lectores

Version 2.765.49

Fixed

  • Las cajas de texto Unicode justificadas ya no separan sus letras ni pasan del borde derecho de la caja. Con una fuente elegida por nombre, como Arial, cada línea justificada salía con casi el doble del ancho de la caja y se montaba sobre lo que hubiera al lado; ahora cada línea justificada termina en el borde de la caja
  • El texto dibujado con un avance explícito por cada carácter ahora cae donde se le pidió también en ese caso, en lugar de que cada carácter salga empujado un ancho de carácter extra a la derecha

Version 2.765.48

Changed

  • Los demos HelloWorld, CJKAnnotations, TextOut y RtLTextOut para Delphi y C++Builder ahora embeben solo los glifos que usan. Embebían fuentes completas del sistema como Arial Unicode MS, así que un hello world de una página salía con unos 15 MB y el ejemplo de derecha a izquierda con unos 30 MB; las mismas páginas ahora quedan entre 80 KB y 650 KB y se ven igual

Version 2.765.47

Fixed

  • El texto de derecha a izquierda ya no sale con las letras en orden equivocado en algunas fuentes. El hebreo en Arial Unicode MS tenía letras vecinas intercambiadas en muchas palabras, y el árabe en Microsoft Sans Serif no se invertía para nada, porque los números de glifo de esas fuentes se confundían con marcas de acento al pasar la línea al orden visual
  • Las líneas hebreas del demo RtLTextOut ahora se leen correctamente

Version 2.765.46

Fixed

  • GetWideTextWidth ahora incluye el espaciado de caracteres y el word spacing con los que se dibuja el texto, como hace TextWidth. El texto Unicode con ajuste de línea y centrado con espaciado establecido se medía demasiado estrecho
  • TextOutHTML ahora muestra el word spacing establecido con SetWordSpacing: colocaba cada run a su ancho medido, lo que dejaba fuera el espaciado. El word-spacing y el letter-spacing CSS de la importación HTML pasan por el mismo layout

Version 2.765.45

Fixed

  • SetWordSpacing ahora funciona con fuentes embebidas. El texto en una fuente embebida se escribe con códigos de carácter de dos bytes, y PDF aplica el word spacing solo al código de espacio de un byte, así que el espaciado se ignoraba en silencio siempre que FontEmbedding estaba activado o el texto necesitaba una fuente Unicode
  • El espaciado se agrega después de cada espacio como un ajuste de posicionamiento de texto, que todo visor de PDF respeta; el texto sin word spacing se escribe exactamente como antes
  • La fila de word spacing del demo TextOut ahora muestra el espacio extra

Version 2.765.44

Fixed

  • Los demos AnnotationInteraction para Delphi y C++Builder ahora ajustan cada caption de link dentro de su rectángulo de link. El texto arrancaba demasiado abajo, así que el borde del rectángulo lo atravesaba, y era más ancho que el rectángulo

Version 2.765.43

Fixed

  • El texto tachado (fsStrikeOut) ahora se tacha por el medio de las letras minúsculas. La línea se dibujaba media línea debajo de la baseline, debajo del subrayado, así que el texto tachado parecía doblemente subrayado; esto también afectaba al <s> en TextOutHTML
  • El texto rotado ahora recibe su subrayado debajo de la baseline en lugar de por el tope de las letras, y su tachado a través de las letras
  • Las líneas de tachado son tan gruesas como los subrayados en todas las rutas de texto; las rutas Unicode y latina simple dibujaban una línea mucho más delgada

Version 2.765.42

Fixed

  • El demo HTMLText ahora produce una sola página con las cinco muestras encima. Agregaba una segunda página después de la que el documento ya trae al empezar, dejando la primera página vacía, y comenzaba a escribir cerca del fondo de la página, así que la muestra de entidades y el párrafo con ajuste de línea se caían de la página

Version 2.765.41

Fixed

  • Los demos Layer para Delphi y C++Builder ahora muestran el texto de sus capas. El texto de la capa visible se dibujaba con el color del rectángulo que tiene detrás y no se veía, y el texto de la capa oculta era casi blanco
  • El caption de los demos Patterns se dibuja en negro en lugar de rellenarse con el tiling pattern, que lo partía en fragmentos del patrón
  • El caption de los demos AlphaTransparency ya no se dibuja verde semitransparente con el blend mode Multiply; las formas transparentes ahora se guardan la transparencia para sí mismas

Version 2.765.40

Fixed

  • Los demos GraphicDraw para Delphi y C++Builder ahora dibujan correctamente las líneas tangentes de sus ejemplos de curvas. La línea del primer punto de control de la curva izquierda se quedaba corta antes del punto etiquetado, y la curva derecha mostraba un trazo horizontal corto en lugar de las líneas que van desde su punto inicial por su punto de control hasta su punto final
  • Los encabezados de sección de las páginas de rectángulo y elipse vuelven a ser negros en lugar de tomar el color de la última forma dibujada

Version 2.765.39

Fixed

  • El texto y las formas dibujadas después de PrintHyperlink conservan los colores establecidos antes de él. Un color gris volvía convertido en otro color (el blanco se volvía azul), y los colores establecidos en CMYK o a través de un espacio de color volvían como un color RGB anterior
  • El color del hyperlink ahora se aplica solo al texto del link, sin importar el espacio de color que estuviera usando la página

Version 2.765.38

Fixed

  • TextOutOutline ahora dibuja los contornos de glifos al tamaño de la fuente con cualquier Resolution. Con una Resolution distinta de 72 los contornos se escalaban una vez más hacia abajo, por ejemplo a la mitad de su tamaño con 144
  • Los contornos de fuentes con menos de 1000 unidades por em, como SimHei, ya no se dibujan varias veces más grandes

Version 2.765.37

Fixed

  • Los demos CJKUnicode para Delphi y C++Builder ahora muestran su línea coreana en sistemas sin Arial Unicode MS. La dibujaban con la primera fuente china encontrada, que no tiene Hangul, así que la línea quedaba vacía; ahora usa Malgun Gothic cuando la fuente elegida no puede mostrar coreano

Version 2.765.36

Fixed

  • El texto chino y japonés escrito con fuentes como SimHei ya no apila sus caracteres unos encima de otros. Cuando la misma fuente se usaba para un segundo run de texto, muchos ideogramas recibían anchos de unas pocas unidades en lugar de un em completo
  • Las fuentes afectadas almacenan menos anchos de avance que glifos; los glifos posteriores al último ancho almacenado ahora usan ese ancho, como exige el formato TrueType

Version 2.765.35

Fixed

  • El texto Unicode en fuentes cuya cuadrícula de diseño tiene menos de 1000 unidades por em, como SimHei y SimSun con 256, ahora se espacia correctamente. Los anchos de glifo escritos al PDF eran unas cuatro veces más grandes, así que los visores dejaban huecos anchos después de los espacios y otros caracteres recién usados

Version 2.765.34

Fixed

  • El escenario de imagen escaneada del demo PDFOptimize ahora comprime una página de texto real. Su imagen de prueba de 1 bit salía completamente negra, así que CCITT G4 y JBIG2 se comparaban sobre un rectángulo sólido
  • Los escenarios de imágenes del demo PDFOptimize ahora embeben solo los glifos de su etiqueta de página, así que los tamaños reportados muestran la diferencia entre los métodos de compresión de imágenes en lugar de quedar dominados por una fuente completa embebida

Version 2.765.33

Fixed

  • El demo E-Invoice ahora maqueta la página visible de la factura desde arriba: el título queda en el tope de la página y la factura, las partes y los montos siguen debajo. La página se dibujaba cabeza abajo en el orden, con el título cerca del borde inferior y la nota del pie en el tope

Version 2.765.32

Fixed

  • Las imágenes JBIG2 codificadas estrictamente sin pérdidas (Lossless con LossyLevel = 0) ahora conservan cada píxel. La eliminación por defecto de puntos negros diminutos como ruido de escaneo ignoraba estos ajustes, así que los puntos finales y los puntos de la i y la j en texto pequeño desaparecían de imágenes que debían ser sin pérdidas
  • Los valores por defecto pensados para escaneo (LossyLevel = 5 con RemoveIsolatedBlackPixels) siguen quitando los speckles como antes

Version 2.765.31

Fixed

  • Exportar páginas cargadas a PNG o TIFF ya no falla con "received too many rows" en resoluciones donde una banda de renderizado no es un número entero de puntos, como los 150 DPI por defecto de SaveLoadedPagesAsImages con una página Letter. El redondeo hacía que cada banda quedara una fila de píxeles más alta de lo planeado, así que las bandas sumaban más filas que la imagen

Version 2.765.30

Fixed

  • TextWidth, TextHeight, GetWideTextWidth y GetWideCharAdvances ahora responden en las unidades de página de Resolution, las unidades en que se dibuja el texto. Con una Resolution distinta de 72 respondían en puntos, así que el texto medido no calzaba con las coordenadas donde se colocaba
  • Con una Resolution distinta de 72, el texto dibujado con TextOut ahora arranca en su Y en lugar de demasiado arriba, y los subrayados y tachados cubren todo el texto a la distancia y el grosor correctos en lugar de una fracción
  • Con cualquier Resolution, TextBox, TextOutBoxEx y WideTextOutBoxEx centran y alinean a la derecha sus líneas por el ancho real del texto, las celdas de tabla y los párrafos parten el texto por él, y los runs con estilo de TextOutHTML ya no se montan entre sí
  • Un run de fallback de fuente dentro de WideTextOutBoxEx conserva el tamaño de fuente con cualquier Resolution en lugar de encogerse
  • La salida con Resolution 72 no cambia

Version 2.765.29

Fixed

  • Cuando Windows no puede aplicar por sí mismo la transformación de mundo de un metafile EMF, HotPDF combina las transformaciones por su cuenta. El offset vertical de una transformación combinada usaba el término equivocado, así que el contenido de esos metafiles podía quedar desplazado hacia arriba o hacia abajo

Version 2.765.28

Fixed

  • Mostrar un metafile EMF ya no imprime a la salida estándar de las aplicaciones de consola líneas de diagnóstico como [WMF_DEBUG] EMR_POLYGON16 record found. El trace de metafiles quedó encendido en la build de release

Version 2.765.27

Fixed

  • El texto en metafiles EMF mostrados con ShowMetafile ahora queda a la altura a la que Windows lo dibuja. El texto alineado al tope, el valor por defecto de TCanvas.TextOut, se dibujaba una altura de línea más arriba, y el texto alineado al fondo también quedaba demasiado arriba
  • El texto de metafiles alineado a la baseline y el rotado no cambian

Version 2.765.26

Fixed

  • ShowMetafile con posición y escala ahora dibuja el metafile con su esquina superior izquierda en el punto indicado y con la escala pedida. Ignoraba estos argumentos y siempre dibujaba el metafile en la esquina superior izquierda de la página a su tamaño natural
  • ShowMetafile sin posición no cambia

Version 2.765.25

Fixed

  • Los dibujos AngleArc en metafiles EMF mostrados con ShowMetafile ahora dibujan el arco que describen, en cualquiera de las dos direcciones, seguido de las líneas que continúan desde el final del arco. En su lugar se dibujaba un círculo completo, y su tamaño estaba mal siempre que el metafile tuviera un offset

Version 2.765.24

Fixed

  • Bajo PDF/A y PDF/X, las anotaciones de texto libre con contenidos ASCII simples ahora muestran su texto. Su apariencia antes dibujaba solo el marco y el relleno, porque la Helvetica nombrada en la apariencia por defecto de la anotación no puede usarse sin embeber allí
  • El texto se dibuja a 12 pt en la fuente actual de la página, que se embebe junto con el texto de la página, con ajuste de línea a la caja de la anotación y alineado según la justificación elegida, como ya se hacía para contenidos no ASCII
  • Fuera de PDF/A y PDF/X, las anotaciones de texto libre con contenidos solo ASCII se escriben exactamente como antes

Version 2.765.23

Fixed

  • Con AutoShapeArabic activado, TextOut y UnicodeTextOut ahora unen las letras árabes, persas y urdu en sus formas inicial, medial y final y sus ligaduras, como ya hacía RtLTextOut. Antes cada letra se mostraba en su forma aislada
  • Lo mismo aplica a AutoShapeSyriac, AutoShapeNko, AutoShapeAdlam, AutoShapeHanifiRohingya y al reordenamiento de los puntos hebreos (sfHebrewReorder en ShapingFeatures)
  • Con estas opciones activadas, un texto cuyos números de glifo caían por casualidad en los rangos de caracteres árabe o hebreo podía mostrarse con los glifos equivocados; esto ya no pasa
  • Las anotaciones de texto libre dibujadas con la fuente de la página se forman igual que el texto de la página
  • La salida con estas opciones desactivadas no cambia

Version 2.765.22

Fixed

  • Las formas curvas ahora respetan valores de Resolution distintos de 72. Ellipse, Circle, Arc, DrawArc, Pie, DrawPie, Chord y ArcTo se dibujaban en el lugar y con el tamaño equivocados, mientras que las líneas rectas, los rectángulos y los rectángulos redondeados salían correctos
  • La salida con la resolución por defecto de 72 no cambia

Version 2.765.21

Fixed

  • Las cuñas de pie dibujadas con Pie o DrawPie ahora son formas cerradas únicas, así que su contorno recibe esquinas propias donde los bordes rectos se encuentran con el arco en lugar de dos extremos de línea sueltos
  • Los chords en metafiles EMF mostrados con ShowMetafile ahora se cierran por la línea recta entre los extremos de su arco. La línea antes llegaba hasta un punto bien lejos de la forma

Version 2.765.20

Fixed

  • DrawArc y DrawPie ahora dibujan la parte de la elipse que su documentación describe: en sentido antihorario del punto inicial al punto final, como hacen las llamadas Arc y Pie del GDI de Windows. Dibujaban la otra parte, así que un arco de un cuarto salía como tres cuartos
  • Las cuñas de pie, los chords y los arcos ArcTo en metafiles EMF mostrados con ShowMetafile ahora coinciden con la imagen que dibuja Windows, para ambas direcciones de arco. Mostraban la parte opuesta de la elipse; los arcos simples ya eran correctos
  • Los métodos Arc, Pie, Chord y ArcTo basados en ángulos no cambian

Version 2.765.19

Fixed

  • Los rectángulos rotados dibujados con RectangleRotate ahora son formas cerradas, como los dibujados con Rectangle. Trazar uno dejaba fuera su cuarto lado, así que un rectángulo rotado de solo contorno mostraba tres bordes
  • Los rectángulos rotados rellenos, y las barras de subrayado y tachado del texto rotado, se ven igual que antes

Version 2.765.18

Fixed

  • Los números negativos escritos en los PDFs generados ahora se redondean correctamente. Valores como -50 se escribían como -49.99, así que coordenadas, offsets y posiciones negativos en el contenido de página, en rectángulos de anotaciones y en entradas similares podían quedar desviados hasta 0.01 unidades
  • Los valores negativos ahora se redondean mitad lejos de cero, reflejando exactamente a los positivos; un valor negativo que redondea a cero se escribe como 0
  • La salida para cero y números positivos no cambia

Version 2.765.17

Fixed

  • Las anotaciones de texto libre con contenidos en chino, japonés, coreano, árabe, cirílico u otros no ASCII ahora muestran su texto en todos los visores. Antes dependían de que el visor dibujara el texto en Helvetica, que solo puede representar caracteres occidentales, así que visores como Poppler mostraban solo la puntuación ASCII
  • Estas anotaciones ahora llevan su propia apariencia (ISO 32000-1 12.5.5): el texto se dibuja en la fuente actual de la página, embebida y con subconjunto junto con el texto de la página, con ajuste de línea a la caja de la anotación (entre palabras, o entre caracteres para texto sin espacios), alineado según la justificación elegida y colocado sobre el mismo marco y relleno que antes
  • La apariencia también se escribe bajo PDF/A, donde la fuente embebida mantiene el documento conforme y el texto de la anotación ahora se ve en lugar de una caja vacía
  • Las anotaciones de texto libre con contenidos solo ASCII se escriben exactamente como antes

Version 2.765.16

Fixed

  • Las páginas en blanco insertadas en documentos cargados con InsertLoadedBlankPage ahora incluyen el diccionario de recursos que toda página necesita (ISO 32000-1 Tabla 30), así validadores como qpdf ya no reportan el árbol de páginas como dañado y más adelante se puede agregar contenido a la página

Version 2.765.15

Fixed

  • En el demo Table el monto del subtotal ahora abarca las columnas Qty y Price como se esperaba; usaba un índice de celda equivocado y dejaba la columna Qty como una celda vacía

Version 2.765.14

Fixed

  • Las imágenes en celdas de THPDFTable ahora se dibujan dentro de su celda y respetan la alineación vertical; antes quedaban una altura de imagen más abajo, fuera de la celda y fuera de la tabla

Version 2.765.13

Fixed

  • Los anchos de texto Unicode (GetWideTextWidth y la medida de justificación) ahora coinciden con la fuente; con fuentes como Arial el resultado era casi el doble de lo correcto
  • Las tablas, el texto con ajuste de línea y el texto alineado a la derecha, centrado o justificado que se apoya en esos anchos vuelven a maquetarse bien: el texto corto de una celda ya no se parte en varias líneas, los valores alineados a la derecha llegan hasta el borde de la celda y el HTML en celdas de tabla ya no muestra huecos grandes entre palabras

Version 2.765.12

Fixed

  • Los formularios con casillas de verificación o botones de opción ahora listan la fuente ZapfDingbats (/ZaDb) en los recursos predeterminados del formulario. Los visores que dibujan estos campos por su cuenta (el comportamiento predeterminado cuando AutoFormAppearances está desactivado) buscan ahí la fuente para dibujar la marca; antes, los visores basados en Poppler reportaban una fuente desconocida y no mostraban ninguna marca

Version 2.765.11

Fixed

  • En el demo CJKAnnotations el primer ícono de nota de cada fila de idioma ahora queda alineado con los demás íconos de esa fila; estaba colocado 5 puntos más arriba

Version 2.765.10

Fixed

  • Las fuentes solicitadas por su nombre en inglés ahora se encuentran en sistemas Windows en otros idiomas. Una petición de SimSun, Microsoft YaHei o MS Gothic en un Windows en chino, japonés o coreano se trataba como fuente faltante, porque Windows reporta el nombre en el idioma del sistema, y el texto se establecía en silencio con Arial Unicode MS

Version 2.765.9

Fixed

  • Las fuentes que Windows guarda en colecciones TrueType (.ttc), como SimSun, Microsoft YaHei y MS Gothic, ahora se incrustan como fuentes independientes válidas. Antes cada tabla de la fuente incrustada apuntaba a datos equivocados, así que los visores la rechazaban y recurrían a una fuente del sistema, y en computadoras sin esa fuente el texto mostraba glifos incorrectos
  • Esto también afectaba a documentos cuya fuente solicitada no estaba disponible y que Windows mapeaba a una fuente de colección, por ejemplo texto Unicode con Arial Unicode MS en sistemas donde solo había SimSun

Version 2.765.8

Fixed

  • Los archivos fuente que contienen texto no ASCII vuelven a guardarse como UTF-8 con byte order mark. Sin él, Delphi lee el archivo fuente en la code page de la computadora que compila, así que en sistemas Windows en chino, japonés, coreano y otros idiomas no occidentales el texto CJK, árabe, hebreo y acentuado de los demos salía con caracteres ilegibles en los PDF generados, y los mensajes de error de la librería mostraban caracteres equivocados
  • Los demos CJKAnnotations, Annotations, HelloWorld, RtLTextOut, PageSizes, TextOut, Showcase y ViewerPref vuelven a producir el texto previsto sin importar dónde se compilen

Version 2.765.7

Fixed

  • La información del documento dada como UTF-8 (Title, Author, Subject, Keywords, los títulos de article threads y SetLoadedDocumentInfo con la familia SetLoadedTitle) ahora se guarda como Unicode, así que los visores muestran correctamente el texto acentuado y CJK, y la información del documento coincide con los metadatos XMP
  • El texto en la code page del sistema (por ejemplo un título en chino en un Windows en chino) también se guarda correctamente, porque los bytes que no forman UTF-8 válido se leen en esa code page

Version 2.765.6

Fixed

  • La vista inicial de los documentos nuevos (InitialZoom) ahora escribe destinos fit-width y fit-height completos; faltaba el operando que exige la ISO 32000-1 Tabla 151, así que visores como Poppler reportaban un arreglo de destino demasiado corto en todo documento creado con la configuración predeterminada

Version 2.765.5

Fixed

  • Las etiquetas de página que no empiezan en la primera página ahora también cubren las páginas anteriores al primer rango, las cuales conservan números simples; el árbol de etiquetas de página debe incluir la primera página (ISO 32000-1 12.4.2) y, sin eso, los visores podían mostrar etiquetas equivocadas
  • SetLoadedPageLabel ahora mantiene los rangos en orden de página y reemplaza un rango que empieza en la misma página, así los visores muestran las etiquetas previstas; antes, los rangos nuevos se agregaban fuera de orden y podían repetirse
  • SetLoadedPageLabel ya no descarta las etiquetas existentes de documentos que las guardan en un objeto aparte, y también actualiza árboles de etiquetas divididos en varios nodos
  • Los prefijos de etiquetas de página dados como UTF-8 ahora se guardan como Unicode

Version 2.765.4

Fixed

  • Las descripciones de enlaces dadas como UTF-8 (AddURILink, AddGoToLink, AddGoToRLink, AddLaunchLink, AddNamedDestinationLink y los enlaces con destino de estructura) ahora se escriben como Unicode, así que los lectores de pantalla y los visores muestran texto acentuado y CJK en lugar de caracteres ilegibles
  • Lo mismo aplica para el texto y el autor de las anotaciones agregadas a documentos cargados con los métodos AddLoaded...Annotation, igual que las anotaciones creadas en documentos nuevos

Version 2.765.3

Fixed

  • AddGoToLink ahora puede enlazar a una página que se agrega después en un documento nuevo, así una tabla de contenido en la primera página puede tener enlaces hacia adelante; antes esos enlaces se descartaban sin ningún error
  • Un enlace cuya página de destino nunca se agrega conserva su área pero se queda sin acción, en lugar de apuntar a una página inexistente

Version 2.765.2

Fixed

  • SetLoadedOutlineOpen ahora abre y cierra bookmarks en documentos cargados; antes escribía una clave que los visores ignoran y el bookmark conservaba su estado
  • AddLoadedOutline, SetLoadedOutlineURI y SetLoadedOutlineDestination ahora actúan sobre el bookmark solicitado; con cualquier índice mayor que 0 modificaban otro bookmark o no hacían nada
  • Agregar un bookmark a un documento cargado ahora actualiza los contadores de elementos visibles de su padre, sus ancestros y el outline, así los visores ya no muestran estados de expansión ni totales de elementos equivocados
  • Establecer un enlace web en un bookmark cargado ahora elimina su destino de página, y establecer un destino elimina su acción, porque un bookmark solo puede llevar una de las dos cosas
  • Los títulos de bookmarks dados como UTF-8 a AddLoadedOutline y SetLoadedOutlineTitle ahora se guardan como Unicode en lugar de bytes ilegibles

Version 2.765.1

Fixed

  • Los bookmarks en documentos nuevos ahora registran cuántas entradas son visibles, como exige la ISO 32000-1 12.3.3: antes, el outline y cada bookmark abierto contaban todas las entradas anidadas, incluidas las que estaban dentro de bookmarks cerrados
  • Establecer Opened en un bookmark después de agregar sus hijos ahora lo abre en el visor; antes, el cambio nunca llegaba al archivo
  • Asignar Title a un bookmark existente ahora cambia el título que muestra el documento
  • Los títulos de bookmarks con texto no ASCII dados como UTF-8 ahora se escriben como Unicode, así que los títulos acentuados y CJK se muestran correctamente en lugar de salir como caracteres ilegibles
  • Los bookmarks ahora llevan la referencia al padre que exige la especificación

Version 2.765.0

Added

  • HPDFTokenizeContentStreamAppend tokeniza un content stream directamente en un arreglo de tokens existente, así quien combina varios streams evita un arreglo temporal por stream

Changed

  • Compilar una página para renderizar ya no reserva memoria por cada número y operador de su content stream, y el contenido de la página se tokeniza directo en la display list de la página en lugar de copiarse ahí
  • El renderizado paralelo de páginas escala mucho mejor sobre un documento frío: en un documento de prueba vectorial de 128 páginas, 4 workers ahora terminan unas 3 a 3.5 veces más rápido que 1 worker (antes unas 1.4 veces en compilaciones de 32 bits y 1.7 veces en las de 64 bits)
  • La compilación y el renderizado de páginas en un solo hilo también son unos 35% más rápidos en ese documento; los tokens, las display lists y la salida renderizada no cambian

Version 2.764.7

Changed

  • Renderizar contenido que guarda y restaura el estado gráfico con frecuencia (q/Q) ya no reserva memoria por cada guardado, lo que hacía que los worker threads del renderizado paralelo de páginas se esperaran entre ellos dentro del memory manager
  • El renderizado paralelo en frío de un documento de prueba vectorial de 128 páginas es unos 7–10% más rápido con 4 workers y unos 5% más rápido con un worker; la salida renderizada no cambia

Version 2.764.6

Fixed

  • El renderizado paralelo de páginas ya no cae a una página a la vez cuando las páginas ya se habían renderizado y sus display lists siguen en caché
  • Antes, cada página en espera de dibujarse conservaba su reserva de memoria mientras solo una página se dibujaba a la vez, así que los demás workers se estancaban en el presupuesto compartido de memoria; ahora, en cuanto hay tantas páginas en espera como workers, se dibujan en paralelo
  • La primera página sigue llegando temprano, y la memoria reservada por un lote ahora se mantiene proporcional a la cantidad de workers en lugar de llenar todo el presupuesto

Version 2.764.5

Fixed

  • SetStructureClassMapEntry ahora puede registrar un diccionario de atributos bajo varios nombres de clase, o de nuevo bajo el mismo nombre, sin liberarlo
  • Antes, quitar o reemplazar una de esas entradas liberaba el diccionario compartido, así que las entradas /ClassMap restantes apuntaban a memoria liberada y guardar el documento podía escribir basura o lanzar una access violation
  • Un diccionario de atributos creado directamente ahora se convierte en objeto indirecto al registrarse, y cada entrada /ClassMap hace referencia a él; el documento es dueño del diccionario, así que quien llama no debe liberarlo

Version 2.764.4

Fixed

  • RemoveUnusedLoadedPageResources ya no escribe en una tabla de recursos después de eliminarla, cuando la tabla /Font, /XObject u otra tabla de recursos de una página está escrita directamente dentro de /Resources y todas sus entradas están sin uso
  • Antes esa escritura iba a memoria ya liberada, lo que normalmente pasaba desapercibido pero podía corromper la memoria o lanzar una access violation más adelante en la sesión
  • Las tablas de recursos vaciadas siguen eliminándose de /Resources, y la salida guardada no cambia

Version 2.764.3

Fixed

  • Abrir un PDF cifrado con clave pública (certificado) usando PubSecKeyMaterial, vía LoadFromFile o BeginIncrementalUpdate, ya no lee envelopes de destinatario de memoria que ya se había liberado mientras se recuperaba la file key
  • El fallo dependía de cómo quedara reutilizada la memoria: el documento normalmente abría, pero podía rechazarse como si no se hubiera asignado material de clave, o desenvolver los bytes equivocados
  • Los documentos con varios destinatarios, el callback de selección de destinatario y los materiales de clave adicionales registrados con AddPubSecKeyMaterial usan todos la misma lista de envelopes corregida

Version 2.764.2

Fixed

  • Las apariencias de campo generadas para formularios cargados, por AddLoadedTextField y los demás métodos de campo AddLoaded*, EnsureLoadedFieldAppearanceStream o FlattenFormFields, ahora conservan su propia referencia a la fuente del /DR del AcroForm en lugar de compartir la entrada del /DR
  • Reemplazar o eliminar el diccionario /DR del AcroForm, o quitar el último campo de formulario (lo que también elimina el AcroForm), ya no deja esas apariencias apuntando a objetos de fuente liberados
  • Antes, liberar el documento después podía toparse con una access violation oculta que dejaba el resto del documento sin liberar, o corrompía la memoria, sobre todo en compilaciones de 64 bits
  • Una fuente escrita directamente dentro del /DR se convierte en un objeto indirecto la primera vez que una apariencia la usa, así la apariencia del campo y el /DR se refieren al mismo objeto de fuente en el archivo guardado

Version 2.764.1

Fixed

  • Llamar a ProcessObjectStreamsForDecompression después de LoadFromFile ya no lee el file stream que la carga ya había cerrado; en su lugar, vuelve a escanear el archivo cargado, así los miembros de object stream siguen disponibles para ExtractObjectFromStream
  • El fallo dependía de cómo quedara acomodada la memoria: normalmente pasaba desapercibido, pero podía lanzar una access violation o escanear memoria ajena, sobre todo en compilaciones de 64 bits
  • FindAllObjectStreams, ScanAndLoadReferencedObjects y ForceLoadMissingReferencedObjects ahora no hacen nada cuando se les llama fuera de una carga, en lugar de tocar el stream cerrado

Version 2.764.0

Changed

  • Una instancia de THotPDF, por ejemplo un componente soltado sobre un formulario, ya puede escribir cualquier cantidad de documentos uno tras otro: BeginDoc después de EndDoc inicia un documento nuevo e independiente en lugar de lanzar una excepción
  • EndDoc descarta todo lo registrado para el documento escrito, incluidas sus imágenes, fuentes, campos de formulario, outlines, el JavaScript del documento, destinos con nombre, etiquetas de página, perfiles ICC y output intents, y el siguiente BeginDoc libera sus páginas y objetos, así que nada de eso llega al siguiente archivo; con ReproducibleOutput activado, un segundo documento de una instancia reutilizada es byte por byte igual a ese documento producido por una instancia nueva
  • Los registros hechos entre EndDoc y el siguiente BeginDoc, como AddPDFAOutputIntent o scripts agregados mediante Names, pertenecen al siguiente documento y BeginDoc ya no los borra
  • Los valores de propiedades como FileName, Compression, PDFACompliance, Author y Title, junto con las capas de página y las cadenas de fallback de fuentes, se trasladan al siguiente documento; una versión de PDF elevada automáticamente para un documento vuelve al valor de la propiedad Version
  • El documento escrito sigue disponible después de EndDoc hasta el siguiente BeginDoc, así que ValidatePDFUA2Structure, CurrentPageNumber, PagesCount y los diagnósticos de layout siguen funcionando sobre él
  • Como las contraseñas se borran en cuanto un documento protegido se cifra, BeginDoc lanza una excepción cuando ActivateProtection sigue activado y no se estableció una contraseña nueva, en lugar de proteger el siguiente archivo con contraseñas vacías
  • Iniciar un documento nuevo después de reescribir uno cargado en la misma instancia también produce un archivo limpio

Version 2.763.1

Fixed

  • Convertir un EPUB, o importar HTML con el perfil HTML5, ya no corre el riesgo de una access violation cuando un párrafo no cabe en la página actual; el párrafo ahora siempre se dibuja en la página nueva
  • La misma corrección cubre los párrafos, los elementos de lista y las líneas horizontales del renderizador de bloques compacto que usa HPDFRenderHTMLDocument
  • El fallo dependía de cómo quedara acomodada la memoria, así que aparecía solo de vez en cuando, sobre todo en compilaciones de 64 bits, y podía dejar una conversión sin salida o corromper su contenido

Version 2.762.1

Fixed

  • Volver a llamar a BeginDoc en una instancia de THotPDF que ya escribió un documento nuevo ya no termina en una access violation; se lanza una excepción que pide una instancia nueva, porque la instancia todavía conserva los objetos, las imágenes, las fuentes y los campos de formulario del documento terminado
  • Más allá del crash, el segundo documento habría llevado los objetos del primero, incluidos su contenido y sus campos de formulario; una instancia por documento nuevo mantiene cada archivo con su propio contenido
  • Cargar un documento existente con LoadFromFile y reescribirlo no está afectado

Version 2.762.0

Fixed

  • Las anotaciones Text, FreeText, Line, Square, Circle, Stamp y FileAttachment son visibles en documentos PDF/A-2, PDF/A-3, PDF/A-4 y PDF/X-6; llevaban un appearance stream vacío que solo satisfacía al validador, y como los visores dibujan la apariencia, no se mostraba nada
  • Estas apariencias ahora dibujan la anotación: los marcos de Square y Circle, la línea, un ícono de nota y un ícono de adjunto en el color de la anotación, el marco del Stamp y el cuadro del FreeText relleno con su color de fondo
  • La salida PDF 2.0 da un appearance stream a cada una de estas anotaciones, a las anotaciones de markup extendidas y a los campos de formulario nuevos, como exige la Tabla 166 de ISO 32000-2, y escribe /NeedAppearances false; fuera de PDF/A y PDF/X el texto del FreeText y el nombre del Stamp se dibujan en Helvetica
  • En PDF/A y PDF/X las apariencias de FreeText y Stamp no dibujan texto, porque toda fuente usada ahí debe estar embebida; el texto queda en la anotación para que los visores lo muestren

Version 2.761.6

Fixed

  • Las anotaciones de archivo adjunto (AddFileAttachmentAnnotation) se pueden abrir y volver a guardar en los visores: la especificación de archivo escribía el propio file stream embebido como /EF, donde la Tabla 44 de ISO 32000-1 exige un diccionario /EF que contenga el stream bajo /F, así los lectores reportaban que la entrada del archivo faltaba
  • El file stream embebido de ese tipo de adjunto lleva el tipo /EmbeddedFile, y el texto de la anotación también se guarda como la descripción del archivo

Version 2.761.5

Fixed

  • Los destinos con nombre, el JavaScript a nivel de documento y los adjuntos del documento se escriben con sus claves del name tree ordenadas, como exige ISO 32000-1 7.9.6; antes se escribían en orden de registro, y los lectores que buscan en el árbol podían perder entradas (qpdf reportaba los árboles como sin ordenar)
  • Adjuntar dos archivos con el mismo nombre de archivo ya no crea dos entradas con una sola clave, lo que dejaba un solo adjunto alcanzable; el segundo recibe una clave numerada como a (2).txt y conserva su nombre de archivo original
  • Los cambios de AddLoadedDocumentJavaScript y AddLoadedNamedDestination se guardan; el name tree editado no se escribía de vuelta cuando vivía en un diccionario directo, así que las entradas nuevas se perdían. Ambos insertan en la posición que les corresponde según el orden, también en árboles divididos en nodos /Kids, y reemplazan una entrada existente del mismo nombre
  • AddLoadedDocumentJavaScript guarda una acción de JavaScript como valor del name tree en lugar de un stream de script desnudo, y AddLoadedNamedDestination escribe el operando de zoom de su destino /XYZ
  • RemoveLoadedJavaScript y RemoveLoadedJavaScriptAll eliminan los scripts del propio documento; antes solo cambiaba la lista que devuelven los getters y los scripts seguían en el archivo guardado
  • SetDocumentAttachmentMetadata renombra el adjunto que recibe; antes renombraba la clave del último adjunto del árbol, y la entrada renombrada ahora se mueve a su posición según el orden

Version 2.761.4

Fixed

  • Los AcroForm nuevos siempre definen, en los recursos por defecto del formulario (/DR), la fuente Helvetica que nombran las cadenas de apariencia por defecto de los campos, como exige ISO 32000-1 12.7.3.3; sin AutoFormAppearances la fuente faltaba, así los visores que construyen las apariencias de los campos no tenían ninguna fuente con la cual construirlas
  • AddLoadedComboBox crea un combo box real; establecía la bandera Edit en lugar de la bandera Combo, así el campo era un list box que los visores mostraban como una lista de todas las opciones
  • Los campos agregados a un documento cargado escriben /NeedAppearances como el booleano true en lugar del nombre /true, y un AcroForm creado para ellos recibe la cadena de apariencia por defecto y los recursos por defecto a los que refieren sus cadenas /DA
  • AddLoadedTextField, AddLoadedCheckBox, AddLoadedComboBox, AddLoadedListBox y AddLoadedPushButton le dan al campo nuevo un appearance stream, así se muestra en visores que no construyen apariencias y en documentos cuyo formulario establece /NeedAppearances false
  • Las apariencias generadas para push buttons de un documento cargado (al agregarlos, redibujarlos o aplanarlos) dibujan el caption, donde antes quedaban vacías

Version 2.761.3

Fixed

  • Cambiar el valor de un campo de texto o de elección en un formulario cargado ahora redibuja el campo: SetFormFieldValue, ResetLoadedFormField y las actualizaciones del list box de selección múltiple regeneran el appearance stream, donde el archivo guardado seguía mostrando el texto viejo en todos los visores y en la impresión porque los visores dibujan la apariencia, no el valor almacenado
  • Las apariencias generadas de los campos de texto de contraseña muestran un asterisco por carácter en lugar de la contraseña en forma legible (ISO 32000-1 Tabla 228), tanto para campos nuevos con AutoFormAppearances como para campos cargados que se redibujan o se aplanan
  • AnalyzeLoadedSignatureRevisions clasifica como llenado de formulario el diccionario de apariencia, el appearance stream y sus recursos nuevos que un llenado agrega después de firmar, igual que ya hacía con el campo mismo, así llenar un formulario certificado en una actualización incremental ya no se reporta como un cambio fuera de las estructuras reconocidas

Version 2.761.2

Fixed

  • Los bitmaps de paleta de 1 y 4 bits agregados con compresión Flate conservan sus colores; se remapeaban a la paleta de sistema de 256 colores, que desplazaba cada color que esa paleta no contiene. Ahora se embeben con su propia profundidad de bits y su propia paleta, lo que además hace más pequeños los datos de la imagen
  • Los bitmaps de 1 bit cuya paleta lista el blanco antes que el negro ya no salen como un negativo con compresión CCITT Group 3, CCITT Group 4 o JBIG2, incluidos los caminos batch y cross-page de JBIG2; el color más oscuro de la paleta siempre se codifica como negro
  • icAutoMono y AddMonochromeImageAuto mantienen un bitmap de 1 bit con paleta a color en Flate en lugar de convertirlo a blanco y negro con CCITT o JBIG2
  • Las imágenes bidimensionales CCITT Group 3 (icCCITT32) ahora respetan su parámetro /K: la primera fila y cada segunda fila se codifican unidimensionalmente y /K vale 2, donde antes cada fila se codificaba bidimensionalmente bajo /K 1, que no permite ninguna fila bidimensional (ISO 32000-1 Tabla 11, ITU-T T.4)

Version 2.761.1

Fixed

  • Las imágenes JPEG agregadas con compresión DCT conservan su propio modelo de color: los JPEG en escala de grises se escriben como DeviceGray y los CMYK como DeviceCMYK, donde todo JPEG se declaraba DeviceRGB; con eso los lectores mostraban los archivos en escala de grises distorsionados o truncados y los CMYK con colores equivocados
  • Los JPEG CMYK que llevan el marcador de Adobe (la salida habitual de Photoshop) reciben el array /Decode invertido que sus valores de muestra necesitan (ISO 32000-1 8.9.5.2 y 7.4.8)
  • Las verificaciones de espacio de color de PDF/A ahora ven el uso DeviceGray y DeviceCMYK de las imágenes JPEG en escala de grises y CMYK en lugar de DeviceRGB
  • StampLoadedPageImage aplica el mismo modelo de color cuando se estampa un JPEG sobre una página cargada
  • Los nombres de archivo como PHOTO.JPG o scan.jpeg ahora cargan como JPEG con todos los tipos de compresión; la sobrecarga de archivo de AddImage reconoce los datos JPEG por su signature en lugar de una extensión .jpg sensible a mayúsculas y ya no intenta leer esos archivos como bitmaps

Version 2.761.0

Added

  • El nuevo AddLoadedSignedSignatureField agrega a un documento cargado un campo de firma listo para firmar, así un PDF ya firmado puede recibir una segunda firma (contrafirma o aprobación) en una actualización incremental
  • El campo reserva el espacio de firma que SignPDFWithPFX, PreparePDFForSigning e InsertSignatureHex rellenan; después de BeginIncrementalUpdate y SaveIncrementalUpdate la nueva firma cubre el archivo completo mientras las firmas anteriores siguen siendo válidas
  • El motivo, la ubicación y los datos de contacto opcionales, el SubFilter y el tamaño reservado de la firma se pueden establecer por campo; el AcroForm se marca como firmado y de solo anexión, y no se agrega ninguna bandera de regeneración de apariencia al documento firmado

Fixed

  • El flujo de trabajo multi-firma documentado para BeginIncrementalUpdate ahora describe pasos que funcionan; la descripción anterior se apoyaba en una página actual que no existe después de cargar el documento y en un campo de firma sin espacio de firma reservado, así que firmar fallaba

Version 2.760.1

Fixed

  • DrawQRCode, DrawDataMatrix, DrawPDF417 y DrawAztec restauran el color de relleno de la página después de dibujar, como está documentado; las figuras rellenadas después tomaban el color del código de barras
  • Estos códigos de barras se dibujan como un solo path, con cada corrida de módulos oscuros de una fila fusionada en un único rectángulo, así el contenido de la página es más pequeño y los visores ya no muestran costuras tenues entre módulos adyacentes

Version 2.760.0

Changed

  • Establecer CryptKeyLength en aes256 eleva la salida a PDF 1.7 cuando es menor, igual que ya lo hacen las demás funciones dependientes de la versión, así los documentos quedan realmente protegidos con AES-256. Con la salida PDF 1.6 por defecto se escribían con AES-128 sin aviso alguno; con StrictVersionLock activado, una versión menor sigue recurriendo a AES-128

Fixed

  • Las páginas de ayuda de las propiedades de protección mostraban nombres de permisos que no existen; los ejemplos y las descripciones de prPrint y prPrint12bit ahora coinciden con las opciones reales, y las notas de cifrado de clave pública listan los tipos de clave soportados

Version 2.759.0

Fixed

  • Los PDF firmados ahora dejan fuera de los rangos de bytes firmados toda la cadena /Contents, incluidos sus delimitadores < y >, como exige ISO/IEC 32000-1 12.8.3.3; antes los delimitadores quedaban firmados, y los validadores que cotejan el byte range contra el valor de la firma lo reportan como un byte range inválido
  • La validación PDF MAC de firmas que llevan un MAC adjunto acepta tanto el byte range estándar como el que escribían las versiones anteriores

Security

  • La verificación de firmas rechaza un documento cuyo hueco sin firmar entre los dos byte ranges contiene cualquier cosa aparte de la propia cadena /Contents de la firma, cerrando una brecha de signature-wrapping donde contenido fuera de los bytes firmados se reportaba como cubierto; las firmas hechas por versiones anteriores siguen verificando

Version 2.758.1

Fixed

  • La apariencia por defecto que AttachSignatureFieldAppearance da a un campo de firma sin firmar vuelve a dibujar su fondo gris claro: al rectángulo de relleno le faltaban dos operandos y establecía su color dentro del path, algo que los visores rechazan
  • Las anotaciones FreeText creadas en una página nueva llevan la cadena de apariencia por defecto que exige ISO 32000-1, así los visores pueden componer su texto en lugar de mostrar un cuadro vacío

Version 2.758.0

Fixed

  • El decodificador JBIG2 integrado coloca cada símbolo posterior al primero en la posición que le asigna ISO/IEC 14492 dentro de una franja de texto; cada símbolo adicional caía un píxel más a la derecha, así el texto de escaneos JBIG2 hechos por otros encoders se iba separando
  • Las imágenes JBIG2 escritas con el arithmetic encoder nativo y un diccionario de símbolos que contiene un solo glifo ahora pueden leerlas otros visores PDF; los identificadores de símbolo se codificaban con un bit en lugar de ninguno, y eso hacía que esos visores fallaran en el primer glifo
  • Los diccionarios de símbolos que combinan glifos mediante refinement y aggregation se decodifican con el espaciado estándar, igual que otros decodificadores JBIG2
  • Las imágenes JBIG2 que comparten un diccionario de símbolos global escriben /DecodeParms como un array que corresponde al array /Filter; otros visores ignoraban el diccionario único y no podían encontrar los glifos compartidos, así que esas imágenes no llegaban a mostrarse

Version 2.757.0

Fixed

  • DirectDrawBarcode y las funciones de barras Simple* ahora dibujan códigos de barras reales para cada simbología; la mayoría devolvía barras alternadas uniformes que no llevaban datos. GS1-128 con code set C (tipo 22) se dibuja en lugar de recurrir a Code 39, y las barras cortas de POSTNET se dibujan al 40 % de la altura
  • DirectDrawBarcode escala los anchos y altos de las barras con el sistema de coordenadas de la página, así los códigos de barras siguen legibles cuando la escala del documento no es de un punto por unidad
  • Code 128, Code 93 y la familia EAN / UPC mantienen anchos de elemento exactos de uno a cuatro módulos sin importar el Ratio establecido; cualquier razón distinta de 2 los hacía ilegibles
  • EAN-8, EAN-13, UPC-A y UPC-E agregan el dígito de control cuando se les entregan solo sus dígitos de datos; antes el último dígito de datos se tomaba como dígito de control. Con Checksum activado, UPC-A ya no pierde su último dígito de datos, y el dígito de control de UPC-E (que además selecciona la paridad de las barras) se calcula a partir del número UPC-A expandido
  • Los dígitos de control de MSI son correctos para números con cantidad impar de dígitos, los códigos POSTNET reciben su dígito de corrección, y Interleaved 2 of 5 conserva el último dígito de un número de longitud impar agregando un cero a la izquierda
  • Code 128 A codifica las letras minúsculas mediante SHIFT en lugar de convertirlas en espacios o caracteres de control, Code 39 pasa las minúsculas a mayúsculas, y Codabar respeta los caracteres de start y stop proporcionados
  • Los caracteres que una simbología no puede representar ahora lanzan una excepción; Code 39 y Code 128 los eliminaban o reemplazaban, y Codabar leía fuera de su tabla de caracteres
  • GS1-128 con Checksum activado ya no agrega otro dígito de control a Text cada vez que el código de barras se mide o se dibuja

Version 2.756.0

Fixed

  • Los QR Code dibujados con DrawQRCode o construidos con THPDFQRCode ahora se escanean con lectores estándar: la información de formato se coloca como especifica ISO/IEC 18004, y la estructura de bloques de corrección de errores es correcta para cada versión de la 10 a la 40 (y para la versión 7-Q)
  • La selección automática de modo mantiene el texto en minúsculas en modo byte, así una URL como https://example.com ya no se codifica y se lee de vuelta en mayúsculas
  • El texto cuya longitud termina en uno o dos dígitos o en un solo carácter alfanumérico recibe un símbolo lo bastante grande para contenerlo; antes los últimos caracteres se descartaban
  • Codificar dos veces con la misma instancia de THPDFQRCode ya no mezcla el símbolo anterior en el nuevo
  • Encode devuelve False cuando la versión solicitada explícitamente es demasiado pequeña o el modo numérico o alfanumérico solicitado no puede representar los datos, en lugar de producir un símbolo truncado
  • La selección de máscara aplica las penalizaciones por patrón similar al finder y por balance de módulos oscuros de ISO/IEC 18004 7.8.3
  • El decodificador de códigos de barras integrado lee QR Code estándar: símbolos multi-bloque con verificación Reed-Solomon, segmentos numéricos, alfanuméricos, byte y ECI, payloads UTF-8 y versiones con varios patrones de alineación

Added

  • HPDFQRFunctionMap y HPDFQRExtractDataWords exponen la disposición de módulos y el de-interleaving de bloques con detección de errores, para código que lee símbolos QR

Version 2.755.9

Changed

  • El renderizado de soft masks de imagen reutiliza los índices de muestra horizontales exactos y usa la premultiplicación alfa SSE2 en los targets Delphi x86 y x64 soportados, preservando el redondeo de píxeles y la cancelación, con almacenamiento temporal acotado y un fallback escalar

Version 2.755.8

Fixed

  • El renderizado en primer plano puede reanudarse una vez que el prefetch de páginas cancelado liberó los recursos del documento, sin esperar a que el worker thread termine de salir; la cancelación explícita, el reemplazo, la recarga y la destrucción siguen haciendo join del thread, y los rangos de páginas inválidos ya no dejan filtrar un worker suspendido

Version 2.755.7

Fixed

  • El renderizado de páginas preserva el path actual a través de las restauraciones del estado de gráficos y aísla los paths de Form XObjects y glifos Type3, el clipping y el estado guardado, incluyendo restauraciones extra malformadas y la cancelación

Version 2.755.6

Fixed

  • El renderer SIMD de rectángulos ahora respeta las reglas de relleno compuestas even-odd y nonzero, preservando los huecos, la dirección de los subpaths reflejados y la ubicación de bordes fraccionarios; la cancelación durante la rasterización descarta el bitmap parcial y se propaga correctamente

Version 2.755.5

Fixed

  • Las importaciones de formularios multi-select ahora reservan los valores exactos de las opciones antes de interpretar los spellings de compatibilidad hexadecimales en XFDF, evitando que los valores literales seleccionen otra opción y manteniendo los valores almacenados consistentes con los índices de selección

Version 2.755.4

Fixed

  • La extracción de texto de CID vertical (WMode 1) ahora mueve el lápiz por el desplazamiento de ISO 32000-1 9.4.4, así el character spacing acorta el paso por la columna como define la especificación en lugar de alargarlo
  • Un ajuste de posición TJ en texto vertical ahora mueve el lápiz abajo o arriba por la columna en lugar de hacia los lados, así las columnas extraídas ya no se parten y el orden de lectura queda de arriba hacia abajo
  • El array /DW2 de la CIDFont se lee en su orden especificado [v1y w1y] durante la extracción, así los glifos que dependen de los defaults avanzan un em completo en lugar de 0.88 em
  • Los orígenes de glifos verticales extraídos quedan sobre la línea central de la columna, y los boxes de glifos se colocan en el origen vertical menos el vector de posición, con el componente horizontal tomando por defecto la mitad del ancho del glifo
  • Las entradas de la lista /W2 que describen varios CIDs consecutivos ahora aplican sus métricas a todos los CIDs del tramo durante la extracción en lugar de solo al primero
  • El renderer de páginas y el intérprete de extracción de texto ahora comparten una sola implementación de las reglas de desplazamiento de glifos y TJ, así las posiciones renderizadas y extraídas no pueden divergir

Version 2.755.3

Added

  • THPDFQCStatementInfo gana HasPSD2Statement, PSD2RolesOfPSP, PSD2NCAName y PSD2NCAId; el descriptor a nivel CMS lleva los mismos campos
  • HPDFParsePSD2QcStatement parsea una declaración PSD2 que ya tenga como DER y rechaza cualquier entrada mal formada

Deprecated

  • PSD2RolesPayer y PSD2RolesPayee quedan por compatibilidad de código fuente pero siempre están vacíos, porque la especificación no define listas de roles de pagador y beneficiario; use PSD2RolesOfPSP

Fixed

  • La declaración PSD2 de certificado cualificado ahora se lee con su estructura ETSI TS 119 495, reportando cada rol del proveedor de servicios de pago con su OID y nombre de rol, el nombre de la autoridad nacional competente y el identificador de la autoridad; los certificados PSD2 reales antes no reportaban ningún rol
  • Una declaración PSD2 mal formada, incluyendo longitudes desbordadas o no minimales, componentes faltantes o extra, tipos de string incorrectos y nombres que no son UTF-8 válido, se ignora como un todo en lugar de reportarse parcialmente

Version 2.755.2

Fixed

  • El renderizado de páginas de texto vertical (WMode 1) ahora avanza cada glifo por el desplazamiento de text-space de ISO 32000-1 9.4.4: el word spacing ya no se escala por el tamaño de fuente y ya no se agrega a los códigos CID de dos bytes, ya que aplica solo al código de espacio de un byte
  • El character spacing en texto vertical se aplica a lo largo de la dirección de escritura exactamente como lo define la especificación, así las columnas compuestas con Tc distinto de cero se renderizan a la misma altura que en otros visores conformes
  • El texto invisible (modo de render 3 y contenido opcional oculto) avanza las columnas verticales con las mismas reglas que el texto pintado, manteniendo los glifos visibles posteriores en el lugar correcto
  • El array /DW2 de la CIDFont se lee en su orden especificado [v1y w1y], así las fuentes que dependen de los defaults avanzan un em completo en lugar de 0.88 em
  • Los glifos verticales se pintan en el origen vertical menos su vector de posición, con el componente horizontal tomando por defecto la mitad del ancho del glifo, lo que centra las columnas en la posición del lápiz
  • Las entradas de la lista /W2 que describen varios CIDs consecutivos ahora aplican sus métricas a todos los CIDs del tramo en lugar de solo al primero

Version 2.755.1

Fixed

  • ExportLoadedFormToFDF ahora genera el cuerpo FDF completo antes de crear el archivo de destino, así un fallo a mitad de la exportación ya no reemplaza el destino con un documento truncado
  • El scanner de intercambio de streams FDF rastrea las strings hexadecimales y mantiene los diccionarios de campo intactos cuando un valor hex termina justo contra el terminador del diccionario
  • La reconciliación de índices de selección de choices decodifica grafías mixtas PDFDocEncoding, UTF-16 y hexadecimales con un solo matcher, así los valores de exportación equivalentes reconstruyen /I de forma consistente
  • La importación XFDF acepta la grafía hexadecimal de un valor de exportación de opción entregado como texto literal plano, restaurando round trips escritos por herramientas de terceros
  • La exportación FDF se salta los campos solo-widget sin nombre de campo, igual que el exportador XFDF y el comportamiento de todos los importadores
  • La demo Stamp de Delphi ancla su marca de agua y la anotación de sello al tamaño real de la página, de modo que siguen visibles en entradas apaisadas y no A4
  • La demo DigiPrint de C++Builder libera sus imágenes y sus listas de líneas por página, inicializa el factor de interlineado del header y reporta un demo.xml faltante en lugar de crashear
  • Los scripts de build de la DLL Win64 ABI y de los codec workers encuentran dcc64 en bin64 en RAD Studio 12 y posteriores, y las builds completas de la biblioteca C++Builder detectan y limpian residuos de trial del directorio de salida compartido

Version 2.755.0

Added

  • Los campos choice multi-selección cargados ahora intercambian valores seleccionados individuales mediante las APIs de archivo y stream FDF y los callbacks de XFDF conscientes de arrays, preservando los límites de las opciones y sincronizando los índices de selección al importar

Version 2.754.6

Fixed

  • SetLoadedFormFieldExportValue ahora usa la ruta normal de actualización del valor del campo, preservando los tipos de valor de botón, los índices de selección, los estados de apariencia, las strings codificadas y el seguimiento de cambios de cálculo

Version 2.754.5

Fixed

  • Los valores de formulario XFDF y los elementos de texto de anotaciones ahora preservan su contenido exacto sin insertar whitespace de formato, incluidos los espacios al inicio y al final, los tabs y los saltos de línea

Version 2.754.4

Fixed

  • Los helpers de valor, valor por defecto y longitud máxima de campos cargados ahora respetan las entradas heredadas e indirectas, mientras que los resets de campo preservan los tipos del valor por defecto, sincronizan las selecciones de choices y los estados de botones, y dejan los campos hermanos intactos; las apariencias de botón regeneradas conservan el estado seleccionado y bounds de renderizado válidos

Version 2.754.3

Fixed

  • Los campos hijos nombrados cargados siguen siendo direccionables individualmente cuando su tipo de campo es heredado, con el tipo, los flags y las opciones heredados disponibles mediante los helpers de campo, y su eliminación preserva los campos hermanos y sus widgets

Version 2.754.2

Fixed

  • Las apariencias regeneradas de campos choice cargados ahora muestran etiquetas de opción Unicode preservando los valores de exportación, renderizan las opciones de lista no seleccionadas y resaltan las selecciones simples o múltiples de forma consistente con los valores e índices del campo

Version 2.754.1

Fixed

  • Actualizar un campo choice cargado ahora mantiene sus índices de opciones seleccionadas consistentes con el nuevo valor, incluidos los valores de exportación de opciones y las entradas editables fuera de la lista de opciones, sin modificar arrays de selección compartidos

Version 2.754.0

Added

  • Las factorías opcionales HPDFCreateTesseractOCREngine y HPDFCreateRapidOCREngine conectan programas de reconocimiento locales y modelos provistos por quien llama a capas de texto buscables, con texto Unicode, coordenadas de palabras, timeouts, cancelación y presupuestos de salida

Fixed

  • Se corrigieron los advances de la matriz de texto, los anchos de fonts CID indirectas, la restauración de clipping de q/Q y Form, la orientación de JPEG reduced, las soft masks de imágenes y las paletas de streams Indexed para restaurar el layout de texto y el contenido de imagen en las páginas afectadas
  • Los glifos rellenos TrueType embebidos pequeños ahora usan antialiasing de cobertura local para mejorar los trazos finos en DPI bajos; las solicitudes OCR canceladas se reportan como cancelación incluso cuando el motor de reconocimiento devuelve fallo
  • RenderOutputDither ahora se aplica en todos los backends de renderizado y en el renderizado paralelo de páginas, con invalidación de caché y cancelación consistentes

Version 2.753.0

Added

  • SetLoadedFreeTextPlainText convierte explícitamente las anotaciones FreeText cargadas soportadas a texto plano ASCII Helvetica y reconstruye su apariencia visible para reescrituras completas y guardados incrementales

Fixed

  • La conversión de páginas cargadas y la validación de guardado ahora resuelven los page boxes indirectos y heredados, preservando las dimensiones de página compartidas en lugar de reemplazarlas por A4

Version 2.752.5

Fixed

  • La inicialización de bitmaps de página ahora verifica la cancelación mientras limpia bloques acotados, libera los bitmaps sin terminar y evita retrasar el renderizado en primer plano mientras el trabajo de prefetch cancelado termina de inicializarse

Version 2.752.4

Fixed

  • Cerrar o recargar un documento ahora libera sus grafos de objetos PDF propios y los payloads de streams, incluida la propiedad compartida y cíclica, sin liberar dos veces las referencias enlazadas

Version 2.752.3

Fixed

  • Los cambios de valor de checkboxes cargados ahora sincronizan los estados de apariencia incluso cuando el diccionario de apariencia normal contiene solo el estado seleccionado

Version 2.752.2

Fixed

  • Activar la salida reproducible tras construir el documento ahora fija el timestamp de creación, así los guardados equivalentes siguen siendo idénticos byte a byte entre ticks del reloj

Version 2.752.1

Fixed

  • Los nombres de campos de formulario cargados ahora decodifican las strings PDF de forma consistente, permitiendo encontrar y actualizar campos con nombres UTF-16 sin cambiar su identidad

Version 2.752.0

Fixed

  • Mover una anotación cargada que no es widget ahora conserva la identidad del objeto de anotación y actualiza su referencia opcional de página a la página de destino

Version 2.751.0

Fixed

  • Eliminar páginas cargadas ahora mantiene los named destinations, los destinos de outline, los árboles de estructura, los parent trees y las referencias a objetos de anotación, eliminando las referencias nulas alcanzables tanto en reescrituras completas como en guardados incrementales

Version 2.750.0

Fixed

  • Las reescrituras completas de PDF ahora expanden los objetos comprimidos no leídos antes de reemplazar los contenedores de object streams, preservando fonts, espacios de color y ActualText, y corrigiendo el texto chino con caracteres salidos, la apariencia de página alterada y el texto extraído modificado
  • Los documentos cifrados con user password vacía ahora cargan y comienzan la reescritura directamente, mientras que los object streams bloqueados fallan de forma clara en lugar de producir un documento incompleto
  • Los objetos numéricos sin modificar retienen su precisión de origen, evitando derivas sutiles de color y transparencia tras una reescritura
  • Las páginas copiadas retienen sus nombres de recursos validados y sus referencias, corrigiendo errores de diccionarios de recursos indirectos e imágenes vinculadas incorrectamente

Version 2.748.6

Fixed

  • Se corrigió el caso en que una subsección de referencias cruzadas que declara más entradas de las que la tabla contiene recorre toda la cuenta declarada sin que queden datos por leer, lo que hace que rechazar un archivo malformado de cuarenta bytes tarde decenas de segundos
  • Se corrigió la pérdida de todos los resultados ya producidos por el job runner cuando una operación lanzaba una excepción, y la pérdida de un objeto de imagen en la importación HTML cuando no se podía crear el flujo que lo rodea

Version 2.748.5

Fixed

  • Se corrigió el fallo al abrir archivos PKCS#12 con contraseña no ASCII: la contraseña es una cadena de bytes UTF-8, pero se ensanchaba un byte a la vez en lugar de decodificarse, así que la clave derivada era incorrecta para cada carácter fuera de ASCII. Los archivos protegidos con el esquema moderno PBES2 no se veían afectados, y por eso ambos se comportaban de forma distinta
  • Se corrigió que el validador de lotes de firmas y la caché de evidencias de revocación lanzaran una access violation en lugar de su propio error al construirse con una opción inválida, porque el destructor se ejecutaba antes de que se hubieran creado los miembros que libera
  • Se corrigió la tarea de descarga de evidencias, que fallaba en su destructor cuando sus argumentos eran rechazados, ya que las comprobaciones se ejecutaban antes de crear el propio hilo
  • Se corrigió que el proveedor de firmas en la nube codificara un identificador de algoritmo cuyo segundo arco supera 39; un identificador malformado ahora lanza el error propio del proveedor en lugar de un error de conversión
  • Los contenedores de certificados y firmas ahora rechazan un elemento anidado que declara una longitud que alcanza más allá del elemento que lo contiene, así que lo que se valida y lo que cubre la firma ya no pueden diferir
  • Los valores de las claves privadas se borran de la memoria después de firmar con RSA en lugar de quedar en el heap para la siguiente asignación

Version 2.748.4

Fixed

  • Se corrigió la carga de fuentes Type 1, que leía todas las propiedades de la primera línea del programa de la fuente: la lista de tokens se rellenaba sin vaciarse, así que las cadenas de versión, familia y peso, las stem hints y la longitud de la clave charstring se tomaban de tokens obsoletos. Las fuentes Type 1 ahora reportan sus propios metadatos
  • Se corrigió que la longitud de la clave charstring se conservara como puntero a una cadena ya liberada y se usara sin comprobación de rango; ahora se guarda como valor y se ajusta al rango que el formato permite
  • Se corrigió el caso en que las fuentes no incrustadas siempre caían en la fuente predeterminada del sistema: el nombre de la fuente solicitada se copiaba byte a byte en el registro de fuentes de caracteres anchos, así que ninguna familia instalada llegaba a coincidir
  • Se corrigió el análisis de TrueType y OpenType incrustadas, que leía más allá del final de un programa de fuente truncado al decodificar contornos de glyphs, argumentos de glyphs compuestos y la tabla CFF de un contenedor OpenType, y un mapa de caracteres malformado ya no pide un arreglo de glyphs negativo
  • Se corrigió el desbordamiento de los números de objeto declarados en tablas y flujos de referencias cruzadas: una entrada que reclamaba un número cercano al límite entero se convertía en un índice negativo y se escribía fuera de la tabla, y una cuenta de objetos declarada o un /Size muy mayor que lo que el archivo podía contener dimensionaba los arreglos del cargador con solo ese dato

Version 2.748.3

Fixed

  • Se corrigió el rechazo de entrada válida en Data Matrix: el tamaño del símbolo se estimaba dividiendo a la mitad la cuenta de dígitos, pero solo los dígitos adyacentes comparten una palabra de código, así que un texto como 1a2a3a seleccionaba un símbolo demasiado pequeño para sus propios datos y fallaba al codificar
  • Se corrigió la decodificación de caracteres UTF-8 de cuatro bytes en XFDF, como los emoji, hacia un par sustituto incorrecto, y un byte no reconocido ya no se traga los tres caracteres que lo siguen
  • Los registros de región del enhanced-metafile ahora limitan su cuenta de rectángulos por el tamaño del registro en lugar de confiar en la cuenta del encabezado de la región, que podía leer mucho más allá del registro
  • Las imágenes PNG cuyo ancho declarado por alto supera el rango direccionable se rechazan en el encabezado en lugar de asignar un búfer de píxeles de longitud negativa
  • El remuestreo de imágenes de alta calidad ahora reporta una solicitud fuera de rango en lugar de desbordar el tamaño de su búfer intermedio
  • Una imagen meta prefix de WebP que reclama más grupos de entropía de los que tiene píxeles se rechaza en lugar de asignar cientos de megabytes de tablas de prefijos a partir de unos cuantos cientos de bytes de entrada
  • Se corrigieron las fugas en las rutas de fallo de la codificación Aztec, la decodificación de bitmaps WebP y el pool de workers de decodificación de object streams, donde un objeto parcialmente construido quedaba abandonado cuando un paso posterior lanzaba una excepción

Version 2.748.2

Fixed

  • Se corrigió la pérdida de los últimos bits de palabra de código en los símbolos QR Code: el recorrido de colocación de módulos se saltaba la columna más a la izquierda, así que la cola del último bloque de corrección de errores nunca se escribía en el símbolo
  • Se corrigió el terminador de QR, que llenaba de bits en cero todo el resto del bloque de datos sin dejar espacio para las palabras de código de relleno 0xEC / 0x11 que exige ISO/IEC 18004; un símbolo de la versión 1 llevaba seis palabras de código en cero en su lugar
  • Una nueva prueba lee el símbolo generado de vuelta desde sus módulos, así que el bloque de datos, las palabras de código de relleno, el bloque de corrección de errores, la máscara y la colocación se comprueban contra el estándar y no contra la salida del propio codificador

Version 2.748.1

Fixed

  • Se corrigió el bloqueo de tres analizadores ante entrada malformada en lugar de reportarla: el analizador de objetos ante un >> dentro de un arreglo o un ] dentro de un diccionario, el lector de CMap ante un corchete o llave suelto, y el lector de XFDF ante una construcción sin nombre de etiqueta (una declaración de tipo de documento, por ejemplo) o un byte suelto entre atributos. Cada uno dejaba de avanzar su cursor, así que un solo byte inesperado convertía el análisis en un bucle infinito
  • Se corrigió que las secciones CDATA en XFDF se leyeran como marcado: su contenido ahora se toma como texto del elemento, y el marcador de sección se mide correctamente en lugar de tragarse el primer carácter
  • Se corrigió la longitud de chunk de WebP cercana a 2 GB, que desbordaba la comprobación de tamaño y hacía que la copia del payload leyera más allá del final del búfer del archivo; las longitudes de chunk ahora se comprueban en aritmética de 64 bits
  • Se corrigió la longitud de chunk de PNG de 0xFFFFFFFF, que liberaba el búfer del chunk mientras este seguía reportando su longitud declarada, dejando lecturas posteriores apuntando a memoria liberada; los chunks demasiado largos se rechazan
  • Se corrigió la decodificación de fax CCITT, que desbordaba el cálculo del tamaño de su búfer de líneas con geometrías de página declaradas muy grandes, lo que podía escribir más allá del búfer; el almacén de líneas ahora está acotado y la decodificación se detiene limpiamente en el límite
  • Se corrigió el codificador CCITT, que leía un byte más allá del final de una línea de escaneo con anchos múltiplos de ocho
  • Se corrigió la lectura de los registros de comentario del enhanced-metafile a través de un puntero truncado a 32 bits en compilaciones de 64 bits, que leía una dirección ajena en cada EMF con un comentario GDI
  • Se corrigió que las imágenes de 8 bits con menos de 256 entradas de paleta publicaran memoria no inicializada como cola de su tabla de colores; la tabla ahora declara su cuenta real de entradas
  • Se corrigió el agotamiento de la pila al analizar estructuras BER de longitud indefinida profundamente anidadas dentro de un contenedor de firma o certificado; el anidamiento de más de 128 niveles se rechaza

Version 2.748.0

Fixed

  • Se corrigió la corrección de errores de todos los códigos de barras 2D que la biblioteca dibuja: QR Code, Data Matrix, PDF417 y Aztec construían su polinomio generador desde el término constante hacia arriba, pero lo dividían como si el término principal viniera primero, así que cada símbolo llevaba palabras de verificación que ningún lector conforme acepta. Las palabras de verificación ahora coinciden con los ejemplos resueltos de ISO/IEC 18004, ISO/IEC 16022 e ISO/IEC 15438
  • Se corrigió la pérdida del payload en los símbolos Aztec: el codificador divide el arreglo de palabras de código en el mismo lugar y quien lo llama emite ese mismo arreglo, así que las palabras del mensaje quedaban sobrescritas por la división y el símbolo no llevaba ni los datos ni un mensaje de modo válido
  • Se corrigió el polinomio generador de Data Matrix, que empezaba sus raíces una potencia demasiado abajo, lo que producía un polinomio distinto del que prescribe el Anexo E de ISO/IEC 16022
  • Se corrigió el patrón de búsqueda de Data Matrix: la L sólida es ahora la columna izquierda y la fila inferior, y la pista de reloj alternante es la fila superior y la columna derecha, cada una empezando en oscuro en la esquina que comparte con la L. Ambas estaban intercambiadas, así que los lectores no podían establecer la orientación del símbolo

Version 2.747.4

Fixed

  • Se corrigió la edición de documentos cargados que escribía los números PDF con el separador decimal del sistema: la unión de páginas (page stitching), la redacción de rectángulos, los sellos de texto e imagen, las formas de marca de agua compuestas y las apariencias de elipse ahora siempre emiten un punto, así que los documentos editados en una configuración regional con coma decimal (por ejemplo, Windows en alemán o francés) ya no contienen flujos de contenido que los visores rechazan
  • Se corrigió la carga de fuentes Type 1 dependiente de la configuración regional del sistema: los números reales de FontMatrix, BlueValues, stem hints y charstring se analizan como números PostScript con punto decimal, así que las fuentes PFB conservan sus métricas y contornos en sistemas con coma decimal en lugar de corromperse en silencio
  • Se corrigió el análisis del tamaño y el color de fuente de la apariencia predeterminada (/DA), los atributos HTML de ancho y size, los resultados FormCalc y los números JSON del job, que seguían la configuración regional del proceso; ahora usan el formato invariante en todas las direcciones
  • Se corrigió el dibujo de códigos de barras integrado, que escribía sus rectángulos de barra a través de un formato dependiente de la configuración regional, lo que producía un flujo de contenido inválido en un sistema con coma decimal
  • Las compilaciones de Free Pascal ahora analizan y formatean los operandos de los flujos de contenido, las métricas de extracción de texto y los números JavaScript con el formato invariante, igualando a las compilaciones de Delphi en lugar de recurrir a la conversión dependiente de la configuración regional
  • El escritor de números ya no reescribe el separador decimal de la configuración de formato global de la aplicación anfitriona en cada llamada, lo que cambiaba cómo el resto del programa formateaba sus propios números y no era seguro cuando varios hilos producían documentos a la vez

Version 2.747.3

Fixed

  • Se corrigió que las ediciones desaparecieran de páginas comprimidas: la redacción de rectángulos, la unión de páginas, las formas de marca de agua compuestas y el aplanado de anotaciones agregaban sus operadores a un stream de contenido de página aún comprimido, así la barra de redacción, la página unida, la forma de marca de agua o la anotación horneada quedaban silenciosamente ausentes del archivo guardado. El contenido de la página ahora se expande antes de agregar nada
  • Se corrigió que el contenido agregado se fusionara con el último operador ya presente en la página cuando esa página no terminaba en espacio en blanco, lo que producía un token ilegible como Q0.5 y podía hacer que un visor rechazara la página completa; ahora se inserta un fin de línea donde hace falta

Version 2.747.2

Added

  • Se agregó compatibilidad con Free Pascal en Win32: el paquete de Lazarus ahora se compila tanto para i386-win32 como para x86_64-win64 mediante puntos de entrada de compilación dedicados, las suites de smoke aceptan un argumento de arquitectura y se corrigieron los problemas del compilador de 32 bits y del enlazado de símbolos C; la creación y carga de PDF, la compresión Flate, el cifrado AES y el manejo de documentos CBZ quedan cubiertos en ambos objetivos

Version 2.747.1

Fixed

  • Se corrigió el reintento de máscara rotada del decodificador de códigos de barras integrado, que dejaba bytes residuales en celdas no tocadas de la máscara rotada: eso inventaba tinta fantasma y hacía ilegibles los símbolos Code 39 girados un cuarto de vuelta; ahora el búfer rotado se pone a cero de forma explícita, así que las fotos y escaneos de Code 39 girados se decodifican a través del reintento de rotación

Version 2.747.0

Added

  • Se agregó importación de imágenes WebP: AddImageFromFile ahora acepta archivos .webp mediante un decodificador sin pérdida (VP8L) integrado que implementa el RFC 9649 — códigos de prefijo canónicos, meta códigos de prefijo espaciales, referencias hacia atrás LZ77 con el mapa de distancias de vecindad, la caché de color y las cuatro transformaciones inversas (predictor, color, subtract-green e indexación de color con empaquetado de píxeles); los fotogramas con pérdida VP8 se rechazan con un mensaje claro

Version 2.746.0

Added

  • El decodificador de códigos de barras integrado ahora lee símbolos QR en cualquiera de las ocho orientaciones en que puede llegar una página fotografiada o escaneada: los patrones de búsqueda (finder patterns) identifican la esquina faltante, y la matriz de módulos muestreada se rota o se refleja al diseño esperado antes de decodificar, así que las capturas giradas un cuarto de vuelta o reflejadas se leen sin preprocesamiento

Version 2.745.0

Added

  • Se agregó evaluación de certificados calificados eIDAS para firmas cargadas: GetLoadedSignatureQCStatements reporta los QCStatements de ETSI EN 319 412-5 del certificado del firmante — valores QcCompliance, QcSSCD y QcType, la moneda/monto/exponente de QcLimitValue y las ubicaciones PDS — más los roles de pagador y beneficiario PSD2 de TS 119 495, y activa una heurística de firma calificada cuando QcCompliance y QcSSCD están ambos presentes (la decisión de confianza en el QTSP queda en manos de quien llama)

Version 2.744.0

Added

  • Se agregó imposición N-up para documentos cargados: ComposeLoadedPagesNUp reacomoda cada página en hojas compuestas en cuadrícula del tamaño de papel original (2-up, 4-up, 6-up, hasta 16x16) para salida lista para imprimir, absorbiendo el /Rotate de cada página en la matriz de colocación, compartiendo los recursos de página con el formulario compuesto y dibujando opcionalmente marcos de celda de línea fina con un medianil ajustable

Version 2.743.0

Added

  • FlattenLoadedAnnotations ahora integra en el contenido las anotaciones sin flujo de apariencia en lugar de saltárselas en silencio: los widgets generan primero su apariencia de campo a partir del valor del campo (el caso /NeedAppearances típico de formularios impresos desde el navegador), así que el valor ingresado sobrevive en el contenido de la página
  • Las anotaciones de marca sin /AP reciben una apariencia sintetizada dibujada a partir de sus propias propiedades — texto FreeText y Stamp con estilo /DA y alineación /Q, figuras Square y Circle con color /C / /IC y ancho /BS, trazos Line e Ink, y marcado de cuadriláteros Highlight / Underline / StrikeOut / Squiggly que respeta /QuadPoints y la opacidad /CA
  • Las anotaciones ocultas (el flag oculto de /F) se dejan como anotaciones cuando no tienen apariencia, porque aplanar una nota invisible la haría visible

Version 2.742.0

Fixed

  • Se corrigió el fallo de compilación del paquete Free Pascal desde 2.738.0: las declaraciones de miembros de evidencia LTV y seed-value quedaron dentro de un bloque condicional exclusivo de Delphi mientras sus implementaciones eran incondicionales, así que el paquete Free Pascal dejaba de compilar; ahora las implementaciones llevan la misma condicional y el paquete vuelve a compilar

Added

  • La importación de HTML ahora resuelve tablas sobre una cuadrícula de ocupación completa, así que las celdas con rowspan y colspan reclaman sus columnas correctamente y las filas siguientes saltan los espacios ya ocupados en lugar de desplazarse a la izquierda
  • Las alturas de fila de la tabla salen de ajustar el texto de la celda con la propia fuente de la celda en lugar de una estimación por conteo de caracteres, así que el contenido mixto de ancho variable ya no produce celdas desbordadas o de tamaño excesivo
  • Los anchos de columna siguen las sugerencias de ancho de <col> y los atributos de ancho por celda, y las filas de encabezado marcadas con <thead> (o filas iniciales de puros <th>) se repiten al inicio de cada página continuada cuando una tabla cruza un salto de página
  • Un grupo rowspan se mantiene completo en los saltos de página: las filas unidas por una celda expandida pasan juntas a la página siguiente, de modo que la celda expandida nunca se corta

Version 2.741.0

Fixed

  • Se corrigió el cierre abrupto de las compilaciones Free Pascal en lugar de reportar un error cuando un documento necesitaba uno de los códecs que esas compilaciones no enlazan: abrir un TIFF, decodificar una imagen JPEG 2000 o JBIG2, leer un JPEG progresivo o de escala reducida, aplicar una transformación de color ICC o pedir recompresión Zopfli terminaba el proceso sin más
  • Cada una de esas operaciones ahora falla como su invocador ya espera, así que un documento que use alguna de ellas carga con esa funcionalidad omitida en lugar de tirar abajo la aplicación

Added

  • Se agregó extracción de texto en orden de estructura: ExtractLoadedPageStructureText recorre el árbol de estructura del documento en orden de autoría (ISO 32000-1 14.8.4) y concatena los tramos de marked-content de una página por MCID, así que los documentos etiquetados como formularios gubernamentales y publicaciones accesibles extraen su orden de lectura autoritativo en lugar de una estimación geométrica; los glifos que el árbol nunca reclama caen en una cola geométrica y se cuentan en el reporte de documentos sin etiquetas

Version 2.740.0

Fixed

  • Se corrigió la pérdida de transparencia de los glifos de color en compilaciones Free Pascal: los bitmaps de color incrustados se leían por una ruta que descarta el canal alfa, así que cada glifo de fuente emoji o de color se dibujaba como un rectángulo opaco. Ahora los bitmaps conservan su alfa por píxel

Fixed

  • Se habilitó el acuerdo de claves ECDH P-384: la resta condicional final de la multiplicación Montgomery de CIOS comparaba contra el limb P más el borrow, lo que da la vuelta a cero con los limbs altos en unos de los primos P-384 / P-521 y tomaba prestado en silencio de más; la comparación ahora detecta el borrow sin la suma con desbordamiento y el secreto compartido P-384 coincide con los vectores de referencia de OpenSSL byte a byte

Version 2.739.0

Added

  • Las compilaciones Free Pascal ahora cifran y descifran documentos: los puntos de entrada AES los atiende la implementación FIPS-197 propia de la biblioteca en lugar de reportar un error de operación no soportada, así que allí se pueden crear y abrir archivos protegidos con AES-128 y AES-256
  • El cifrado y descifrado AES-GCM, incluido el contexto de streaming usado para cargas grandes, está disponible en las compilaciones Free Pascal
  • La prueba de humo de Free Pascal ahora verifica el cifrador contra el known answer de FIPS-197, ejercita idas y vueltas PKCS#7 y GCM, y crea y recarga un documento protegido con AES-256 con rechazo de contraseña

Added

  • Se agregó tipografía de párrafo CSS2.1 al motor de importación HTML5: text-align (con el atributo legacy align y el mapeo de la etiqueta center), letter-spacing y word-spacing mediante los operadores PDF Tc / word-space, text-indent para sangrías de primera línea y reglas de text-decoration underline / line-through, así que las importaciones HTML existentes de web y correo conservan sus títulos centrados, sangrías y subrayados
  • Se extendió el decodificador QR integrado más allá de la versión 1: la versión del símbolo ahora se deriva de la geometría de los patrones de búsqueda mediante divisibilidad de la cuadrícula (las versiones 2-40 con una cuadrícula de módulos limpia se decodifican), el tope de longitud del modo byte sigue la capacidad de la Tabla 7 de ISO/IEC 18004 por versión, y el mapa de módulos de función cubre los patrones de alineación y los bloques de información de versión para símbolos mayores

Version 2.738.0

Added

  • Las compilaciones Free Pascal ahora comprimen y descomprimen documentos de forma nativa: el códec deflate lo provee un backend integrado sobre la implementación Pascal de zlib que viene con Free Pascal, así que el contenido FlateDecode ya no reporta error de operación no soportada
  • Bajo Free Pascal se pueden crear y recargar documentos comprimidos con la configuración de compresión por defecto, y los flujos de referencia cruzada, los flujos de objetos, los archivos incrustados y el contenido de página comprimido se decodifican allí
  • El backend cubre los envoltorios zlib y deflate crudo, el envoltorio gzip y la detección automática de encabezado, así que las importaciones SVG y el fallback de descompresión multi-tamaño de ventana se comportan como bajo Delphi
  • La prueba de humo de Free Pascal ahora verifica el códec con una prueba propia de envoltorio y checksum más una ida y vuelta de documento comprimido

Added

  • Se agregó completado de cadena vía caIssuers de AIA: HPDFFetchAIAIntermediates recorre los endpoints del método de acceso 1.3.6.1.5.5.7.48.2 de un conjunto de certificados CMS a través del transporte del invocador (cuerpos DER puros y PEM se decodifican ambos), y la opción de validación FetchMissingIntermediates alimenta los intermedios obtenidos a la construcción de ruta, así que las firmas de firmantes en la nube con un solo certificado de entidad final validan en lugar de fallar en la construcción de ruta
  • Se agregó habilitación LTV de una sola llamada: PopulatePAdESLTVEvidence recorre cada firma cargada, obtiene en línea sus intermedios más la evidencia OCSP/CRL, y escribe el material en el DSS del documento, actualizando un documento de firma B-B reciente a B-LT sin arreglos de evidencia armados a mano
  • Se agregó exigencia de seed-values para firmar: CheckLoadedSignatureSeedValue lee el diccionario /SV de un campo de firma y verifica un SubFilter, DigestMethod, Reason y perfil DocMDP candidatos contra sus restricciones con la semántica de bits de fuerza de ISO 32000-1 12.7.5.5, así que las restricciones del autor del formulario se respetan antes de colocar una firma

Version 2.737.0

Added

  • Se agregó verificación estricta de guardado mediante la propiedad VerifySavedOutput: después de escribir, una instancia fresca de lectura con recuperación de referencias cruzadas deshabilitada recarga el archivo, así que una serialización corrupta se eleva en el punto de la llamada en lugar de aparecer en el siguiente consumidor
  • Se extendió ReproducibleOutput a documentos cifrados: los flujos AES-CBC usan la convención estática de IV 14*(1+i), el material de claves y los salts se derivan de forma determinista, y el ID canónico del documento normaliza los timestamps volátiles de Info, dando guardados cifrados byte-idénticos para pipelines de regresión

Version 2.736.0

Added

  • Se agregó remuestreo de alta calidad y dithering monocromo mediante la nueva unidad HPDFResample: kernels separables Catmull-Rom bicúbico y Lanczos3 reemplazan la semántica de estiramiento de GDI para el reducido de imágenes vía la propiedad ImageDownsampleKernel, y RenderOutputDither aplica difusión de error Floyd-Steinberg después de componer la página, así que la salida de vista previa de impresión conserva el detalle fotográfico en blanco y negro puro

Version 2.735.2

Fixed

  • Se corrigió el caso de los flujos de descompresión Flate pasando la dirección de su variable de búfer en lugar del búfer mismo al rellenar desde el flujo de origen, lo que corrompía memoria en cada lectura y podía tumbar el proceso; están afectados la carga de documentos comprimidos, las clases de flujo inflate y los helpers de flujos de compresión y descompresión

Version 2.735.1

Fixed

  • Se corrigió el colapso a una sola línea de los campos XFA expansibles sin fuente de datos al aplanarlos: su altura ahora se mide a partir del texto que la propia plantilla declara, que es lo que ese campo muestra. Un campo ligado a datos vacíos sigue midiéndose como vacío

Version 2.735.0

Added

  • Las compilaciones Free Pascal ahora cubren toda la biblioteca: cada unidad compila con FPC 3.2.2 y Lazarus, cuando antes solo lo hacía la ruta central de creación y carga
  • Los contenedores XPS, EPUB y CBZ se pueden importar bajo Free Pascal mediante un lector ZIP integrado de solo lectura que maneja tamaños ZIP64, entradas stored y deflated, verificación CRC y entradas cifradas tradicionales con el mismo callback de contraseña que la ruta Delphi
  • El aplanado de formularios XFA, el motor de cálculo FormCalc, el runtime de widgets, los componentes visores de documentos, los manejadores de fuentes Type 1, la importación HTML, la verificación de firmas y el job runner compilan todos en las compilaciones Free Pascal; aplanar los paquetes XFA de un documento cargado necesita además el códec deflate, que esas compilaciones no enlazan

Fixed

  • Se corrigió el intercambio de bytes a 64 bits de la unidad auxiliar PNG, que devolvía valores incorrectos en Win64 y había dejado a la unidad fuera de la compilación por completo

Added

  • Se agregó detección de glifos faltantes en el momento del dibujo: la propiedad TrackUnresolvedGlyphs registra cada punto de código que se renderizaría como el cuadro tofu .notdef con la fuente Unicode activa, dispara el evento OnUnresolvedGlyph por cada hallazgo, y deja intactos los documentos pure-GDI sin registrar
  • Se agregó soporte de tablas kern legadas: RegisterUnicodeTTF captura la tabla kern de la era Apple/GDI y la emisión de kerning cae en su búsqueda binaria de pares format-0 cuando una fuente no trae lookups kern GPOS, restaurando el espaciado clásico de pares en fuentes como el Arial de stock
  • Se agregó fallback de fuente por tramo dentro del layout de párrafos: WideTextOutBox ahora divide cada línea ajustada en los puntos de código que la fuente actual no puede mapear y dibuja cada tramo en su fuente de fallback resuelta, así que los párrafos mezclados de latín, emoji y CJK se renderizan sin tofu cuando hay cadenas de fallback registradas

Version 2.734.0

Added

  • Se agregó la base de solicitudes de timestamp RFC 3161: HPDFRFC3161BuildRequest emite el TimeStampReq DER con un nonce fresco de INTEGER positivo, OID de política opcional y certReq, y HPDFRFC3161ParseResponse decodifica el encabezado PKIStatusInfo y extrae el token, así que los callbacks de transporte TSA quedan en tres líneas en lugar de un estudio de DER
  • Se agregó la declaración de extensión de desarrollador ISO/TS 32002 (THotPDF.EnsureISO32002Extensions) que cubre los algoritmos de firma EdDSA y las curvas ECDSA adicionales en documentos PDF 2.0, idempotente y con control de versión como la declaración 32001 de SHA-3

Version 2.733.0

Added

  • Se agregó acuerdo de claves Montgomery-ladder portátil X25519 y X448 más ECDH de curvas NIST P-256 / P-521 con multiplicación Montgomery CIOS, habilitando la creación y el unwrapping de destinatarios de clave pública key-agreement (KARI) totalmente en proceso; los vectores de referencia del RFC 7748 y los generados con OpenSSL fijan el comportamiento de la ladder en la suite de regresión
  • Se agregó HPDFUnwrapKeyAgreementRecipientEnvelope junto con los puntos de entrada AddPubSecAgreementKeyMaterial y AddPubKeyAgreementRecipientWithSecret, así que los documentos cifrados con destinatarios ECDH / X25519 / X448 se pueden abrir con el escalar privado del destinatario y cifrar sin herramientas ECDH externas

Version 2.732.0

Changed

  • Los guardados ahora enrutan la salida del serializador por un flujo de escritura con búfer de 1 MiB, colapsando las llamadas Write por token de encabezados de objetos, claves de diccionarios y filas de xref en envíos por lotes sobre destinos respaldados por archivo
  • Las cargas de los flujos de referencia cruzada aplican predicción PNG Up (/DecodeParms /Predictor 12) antes de FlateDecode y colapsan los huecos de la free-list mediante subsecciones /Index, reduciendo los contenedores xref en cada documento PDF 1.5+ y en rangos de objetos dispersos
  • La propiedad CompressionLevel ahora también selecciona el esfuerzo Flate de los contenedores del flujo de referencia cruzada y de los flujos de objetos, así que clMaximum produce flujos estructurales más pequeños durante el guardado

Fixed

  • Los anchos de campo /W del flujo de referencia cruzada ahora se adaptan al rango real de offsets en lugar del layout fijo [1 4 2] cuyo cast a Cardinal truncaba en silencio los offsets mayores a 4 GiB, produciendo salida dañada

Version 2.731.0

Changed

  • Se reconstruyó el OCR integrado de plantillas con extracción de glifos por componentes conexos, puntaje de cobertura en escala de grises contra plantillas cacheadas de varias fuentes, binarización Otsu con fallback de ventana local, división de palabras por huecos bimodales, líneas base por palabra, rechazo de ruido de motas, y un alfabeto extendido de 62 caracteres que reconoce texto ASCII mixto en mayúsculas y minúsculas mediante agrupamiento de alturas a nivel de línea y preferencia de contexto de mayúsculas/minúsculas

Version 2.730.0

Added

  • Se agregó soporte Win64 para Free Pascal 3.2.2 y Lazarus 4.6, incluyendo un paquete de runtime, un script de compilación reproducible, una capa de compatibilidad y una prueba de humo de creación y recarga sin GUI; las integraciones nativas estáticas de códecs siguen siendo exclusivas de Delphi y reportan un error explícito de operación no soportada en las compilaciones Free Pascal

Version 2.729.0

Added

  • Se agregó un runtime dinámico de widgets XFA neutral al anfitrión, con edición Unicode, pruebas de foco y de hit testing, binding consciente de instancias, validación y cálculo atómicos, reflow acotado, y una fábrica de solo lectura para documentos cargados que preserva el XFA de origen

Version 2.728.0

Fixed

  • Se corrigieron la medición intrínseca y la continuación de texto XFA para preservar valores vacíos explícitos y calculados, usar el contexto de binding de cada campo o fila repetida, retener las acciones breakAfter, evitar colisiones de nombres sintéticos y aplicar un presupuesto de medición global cacheado

Version 2.727.0

Changed

  • El layout XFA ahora aplica dimensiones intrínsecas mínimas y máximas, mide los campos expansibles a partir de su texto ligado, y divide atómicamente el contenido textEdit elegible entre áreas de contenido y páginas con campos de continuación de solo lectura y presupuestos acotados de texto, fragmentos y mediciones

Version 2.726.0

Added

  • Se agregaron atributos completos de proceso y spot para NChannel, mixing hints, flujos espectrales CxF/X-4 de PDF 2.0 acotados, y verificaciones de consistencia a nivel de documento para definiciones de tintas spot y tablas de colorantes externas de output intent

Version 2.725.0

Added

  • Se agregó un backend de renderizado SIMD por scanlines, thread-safe y determinista, que preflightea listas de despliegue de rectángulos soportadas, escribe la superficie bitmap final en bloques vectoriales sin una copia intermedia de bitmap, y devuelve razones de rechazo exactas por solicitud a través del fallback de software y el pipeline de telemetría existentes

Version 2.724.0

Changed

  • Se expandió el evaluador FormCalc nativo acotado con agregados generales de node-sets SOM, argumentos mezclados de escalares y node-sets, llamadas numéricas y de cadena anidadas, y funciones deterministas de selección, cadena, trigonometría, logaritmos y conversión bajo los presupuestos existentes de operación, arreglos, profundidad, tiempo y salida

Version 2.723.0

Changed

  • SubsetLoadedFonts ahora hace subsetting seguro de programas Type 1 PFB incrustados, PFA binarios partidos y hexadecimales, retiene dependencias compuestas recursivas de TrueType, y cierra las dependencias de contornos COLR v0/v1 conservando las tablas de color, bitmap, variación y shaping

Version 2.722.0

Added

  • Se agregaron callbacks de contraseña acotados para entradas XPS, EPUB y CBZ cifradas con ZIP clásico, incluyendo límites de reintento por entrada, chequeos de cancelación, manejo de credenciales solo en memoria y rechazo fail-closed del cifrado no disponible, inválido o no soportado

Version 2.721.0

Changed

  • DownsampleLoadedImages ahora redimensiona directamente en el espacio de componentes las muestras de imagen Separation y DeviceN de 8 bits soportadas, y preserva el grafo original del espacio de color, la transformación de tinta (tint transform), los colorantes, los rangos /Decode y la semántica de overprint entre guardado y recarga

Version 2.720.0

Added

  • Se agregaron sobrecargas integradas acotadas de reconocimiento para OCR ASCII de mayúsculas de alto contraste, Code 39 horizontal y símbolos QR versión 1 de modo byte limpios y alineados a ejes, permitiendo capas de texto buscables y decodificación de códigos de barras de páginas cargadas sin un motor provisto por el invocador, mientras la entrada ambigua o no soportada falla de forma cerrada (fail-closed)

Version 2.719.0

Added

  • Se agregó refinamiento acotado de JPEG 2000 por resolución y capa de calidad mediante THPDFJpeg2000Decoder.LoadProgressiveFromByteArray, más codificación multicapa mediante TJpeg2000Bitmap.QualityLayers, con píxeles finales idénticos para los órdenes de progresión LRCP, RLCP, RPCL, PCRL y CPRL

Version 2.718.0

Changed

  • Se incrustaron los CMaps completos UniJIS, UniGB, UniCNS y UniKS en UCS2 y UTF16 horizontales y verticales, incluyendo escalares suplementarios y defaults verticales estándar, así que la extracción de texto CJK y su geometría ya no dependen de archivos externos de mapeo Unicode ni de estimaciones de medio em

Version 2.717.0

Added

  • Se agregaron rangos explícitos de dependencias de objetos compartidos para documentos linearizados y un planificador de redibujado por llegada de rangos, así que las páginas pueden pintarse antes de que lleguen todas las dependencias opcionales y redibujar exactamente cuando los datos recién disponibles cambian el resultado

Version 2.716.0

Added

  • Se agregó reparación acotada del grafo de objetos para hallazgos de preflight de xref, trailer, catálogo, árbol de páginas y árbol de nombres, con commit de transacción validado y rollback completo ante entrada insegura o ambigua

Version 2.715.0

Added

  • Se agregaron envoltorios de payload cifrado de PDF 2.0 cuyo contenido visible del documento sigue siendo legible antes de la autenticación, mientras los nombres, descripciones y bytes de los archivos incrustados permanecen protegidos hasta un desbloqueo explícito con contraseña

Version 2.714.0

Changed

  • La exportación SVG de páginas cargadas ahora emite gradientes axiales y radiales, representaciones PNG acotadas de shadings de malla Type 4 a Type 7, e imágenes inline decodificadas, sin incrementar los contadores de saltos correspondientes

Version 2.713.0

Changed

  • Los glifos de color SVG de OpenType ahora usan el pipeline acotado de Form XObject para arcos, gradientes vectoriales, opacidad, máscaras geométricas y reutilización local de #id, mientras siguen rechazando scripts, recursos externos, imágenes y contenido activo no soportado

Version 2.712.0

Changed

  • ReplaceLoadedPageText ahora reemplaza coincidencias que abarcan items de cadena TJ y arreglos mediante tramos de origen de glifos, preservando los números de kerning, prefijos y sufijos sin coincidencia, operandos no relacionados y la estructura original del content stream

Version 2.711.0

Added

  • Se agregó resolución de SyntheticBase del FontSet CFF con valores heredados de Top y Private DICT, CharStrings, charset, Encoding y Local Subrs, más semántica determinista de overrides y rechazo acotado de herencias inválidas, cíclicas o excesivamente profundas

Version 2.710.0

Added

  • Se agregó selección determinista y acotada de predictores Flate mediante HPDFSelectFlatePredictor, usando muestras de filas distribuidas, costo estimado en bytes, ponderación configurable de CPU y presupuestos explícitos de bytes, filas y trabajo

Version 2.709.0

Added

  • Se agregó salida opt-in nativa de diccionarios de símbolos Huffman y regiones de texto JBIG2 mediante THPDFJBIG2Options.UseHuffmanEncoding, incluyendo las tablas estándar DH, DW, BMSIZE, FS, DS y DT, bitmaps colectivos crudos, tablas de IDs de símbolo, enrutamiento nativo determinista e idas y vueltas del decodificador píxel-exactas, conservando los defaults aritméticos y MMR

Version 2.708.0

Changed

  • Se cachearon por generación de fuente registrada los mapeos reverse cmap de las formas de presentación árabes y combinadas, reemplazando los escaneos repetidos de U+FB00..U+FDFF y U+FE70..U+FEFF en ApplyArabicGSUBRefinement, ApplyArabicGSUBContextualRefinement y la ruta GSUB contextual genérica, preservando la precedencia de puntos de código y la salida conformada (shaped)

Version 2.707.0

Added

  • Se agregó el codificador de códigos de barras 2D Aztec (ISO/IEC 24778) mediante THPDFPage.DrawAztec y la unidad standalone THPDFAztec: codificación de alto nivel por programación dinámica con latches de modo, shifts y corridas binary-shift, bit stuffing, corrección de errores Reed-Solomon sobre GF(16) hasta GF(4096), selección automática de símbolo compacto 15x15..27x27 o completo 19x19..143x143, y control de capas forzado para tamaños de símbolo fijos
  • Se agregó ensamblado de texto vertical de página: THotPDF.ExtractLoadedPageText y las APIs de agregación por rango/flujo ahora agrupan los glifos WMode 1 en columnas por la X del origen del glifo, ordenan las columnas de derecha a izquierda y recorren cada columna de arriba hacia abajo, en lugar de destripar el texto CJK vertical en líneas por glifo

Fixed

  • Se corrigió el fallo de la exportación de bandas en paralelo con un mismatch de ancho de banda PNG en páginas con dimensiones de píxel fraccionarias (A4 a 96 DPI): el tamaño raster ahora se redondea con Ceil de forma uniforme con los escritores de bandas, así que los tiles entregados siempre coinciden con el ancho del codificador

Version 2.706.0

Added

  • Se agregó exportación PNG por streaming de páginas cargadas y exportación TIFF multipágina por bandas mediante THotPDF.SaveLoadedPageToPng, SaveLoadedPageToPngStream, SaveLoadedPagesToTiffBanded y SaveLoadedPagesToTiffStreamBanded, escribiendo los datos de imagen comprimidos fila por fila a través de codificadores de banda para que las páginas muy grandes no requieran un framebuffer completo; THPDFBandImageExportInfo reporta telemetría de página, banda, fila, workers, memoria, salida, tiempos y cancelación

Version 2.705.0

Added

  • Se agregó finalización PDF/A a las rutas de guardado de documentos cargados: THotPDF.SaveLoadedDocument y SaveLoadedDocumentToStream ahora validan el OutputIntent GTS_PDFA1 (heredado del catálogo de origen o registrado recién) y emiten la identificación XMP pdfaid:part / pdfaid:conformance cuando PDFACompliance está activo, conservando un paquete pdfaid existente byte a byte al re-guardar
  • Se agregó el consumo de escritura vertical (WMode 1) en el lado de carga: las métricas de celda /W2 y /DW2 de CIDFont ahora guían la extracción de texto y el renderizado de página, recorriendo las columnas hacia abajo por el eje y del espacio de texto con el vector de posicionamiento v1x/v1y en lugar de los avances horizontales /W

Version 2.704.0

Added

  • Se agregó renderizado paralelo de tiles y bandas de páginas cargadas mediante THotPDF.RenderLoadedPageTilesParallel y THotPDF.RenderLoadedPageBandsParallel, con callbacks en el hilo invocante por filas, bitmaps prestados, cancelación cooperativa, memoria en vuelo controlada por el invocador, admisión por memoria pico, y una caché acotada e inmutable de glifos Type 3 y pantallas de medio tono compartida entre contextos de render aislados

Version 2.703.0

Added

  • Se agregaron lotes de digest multisign CSC acotados mediante THPDFCSCSignatureProvider.SignHashBatch, usando un SAD fijado al hash y una sola solicitud signatures/signHash para un lote ordenado del mismo algoritmo, aplicando los límites multisign locales y de credencial, cardinalidad estricta de respuesta, ordenamiento síncrono o asíncrono de resultados, claves de idempotencia SHA-256 por contenido, y replay de lotes completados

Version 2.702.0

Added

  • Se extendió THotPDF.RenewPAdESLTATimestamp con evidencia de certificado, OCSP y CRL provista por el invocador, que se fusiona en el DSS existente antes del nuevo timestamp de documento RFC 3161, preserva byte a byte toda revisión anterior y deduplica con exactitud los flujos de validación entre renovaciones sucesivas

Version 2.701.0

Added

  • Se agregó preflight de perfiles PAdES baseline y extended direccionable por cláusula mediante THotPDF.PreflightLoadedPAdES, reportando cada requisito aplicable con ID de regla estable, perfil, nivel normativo, cláusula de estándar, ruta PDF, número de objeto, revisión firmada o actual, y estado de aprobación, mientras valida cardinalidades CMS, referencias ESS del certificado del firmante, restricciones del diccionario de firma, cobertura del byte range, tiempo confiado, evidencia DSS y cobertura del timestamp de documento

Version 2.700.0

Added

  • Se agregó carga de claves privadas PFX / PKCS#12 y firma de documentos CMS de extremo a extremo con ECDSA, Ed25519 y Ed448, incluyendo ECDSA CNG de curva nombrada, PureEdDSA opcional de OpenSSL 3, decodificación de claves RFC 8410, reglas de digest y parámetros RFC 8419, SHAKE256 con salida de 512 bits para Ed448, selección automática del algoritmo de clave y emparejamiento estricto certificado-clave

Version 2.699.0

Added

  • Se agregó selección determinista de credenciales PFX / PKCS#12 multi-identidad mediante HPDFEnumeratePFXIdentities, HPDFParsePFXByLocalKeyID y THPDFCMSSignOptions.PFXLocalKeyID, incluyendo atributos de bolsa localKeyId y friendlyName estrictamente de valor único, emparejamiento de clave pública, bolsas safe-content recursivas, diagnósticos acotados de ambigüedad y ciclos, y embedding automático de la cadena de certificados intermedia y raíz coincidente con deduplicación exacta de DER

Version 2.698.0

Added

  • Se expandió el descifrado PBES2 en proceso de PFX / PKCS#12 con AES-128-CBC y AES-192-CBC más PRFs PBKDF2 HMAC-SHA-384 y HMAC-SHA-512, incluyendo validación opcional de keyLength específica del cifrador y chequeos acotados de salt, iteraciones, IV y padding, conservando la compatibilidad con AES-256-CBC y HMAC-SHA-1 / SHA-256

Version 2.697.0

Added

  • Se agregó la herencia conforme a especificación de FixedPage.NavigateUri del Canvas de XPS y OpenXPS, así que los visuales descendientes Path, Glyphs y Canvas anidados reciben la URI del ámbito salvo que la sobrescriban, preservando las acciones LinkTarget externas, de correo, de página del paquete y con decodificación de porcentajes a través de transforms, clips anidados, grupos de opacidad aislados, supresión de visuales reutilizables, restauración tras overrides anidados y los límites existentes de links, URI, cancelación y esquemas inseguros

Version 2.696.0

Added

  • Se agregaron grupos de transparencia acotados y nativos del Canvas de XPS y OpenXPS, así que los valores Opacity y Canvas.OpacityMask sólidos, de gradiente o de imagen componen una sola vez los visuales hijos superpuestos mediante Form XObjects DeviceRGB aislados, con alfa uniforme plegado, soft masks compartidas de alfa variable, grupos anidados, clips transformados, transferencia de recursos, links preservados y rechazo fail-closed del contenido malformado, no soportado, singular o demasiado grande

Version 2.695.0

Added

  • Se agregó conversión acotada y nativa de Canvas.Clip de XPS y OpenXPS para geometría abreviada, valores PathGeometry de StaticResource locales o remotos, elementos de propiedad directos, figuras estructuradas de línea, Bézier, cuadráticas y arcos, transforms de geometría, clips vacíos y clipping anidado EvenOdd o NonZero mediante W* o W de PDF, con límites de navegación recortados, límites de parseo de 100,000 valores y fail-closed ante transforms malformadas o singulares

Version 2.694.0

Added

  • Se agregó navegación nativa y acotada de XPS y OpenXPS para visuales Path y Glyphs transformados, preservando links HTTP, HTTPS y de correo como anotaciones URI de PDF y resolviendo páginas relativas al paquete más fragmentos LinkTarget con decodificación de porcentajes como acciones PDF GoTo hacia adelante o hacia atrás después de que existan todas las páginas, con límites de clic conscientes de métricas, topes de 65,536 links y 8,192 caracteres, supresión de captura de VisualBrush, cancelación y diagnósticos fail-closed de esquemas inseguros

Version 2.693.0

Added

  • Se agregó conversión acotada y nativa de VisualBrush de XPS y OpenXPS para visuales Canvas, Path y Glyphs inline o respaldados por recursos, búsqueda jerárquica y remota en ResourceDictionary, Viewbox absoluto, Viewport absoluto o relativo, modos None, Tile y reflejado, transforms, opacidad, Form XObjects reutilizables, patrones de tiling compartidos, transferencia de recursos consciente de tokens y presupuestos fail-closed de ciclos, entrada malformada, recursión, contenido, caché y colocación

Version 2.692.0

Added

  • Se agregó embedding nativo de fuentes de paquete XPS y OpenXPS para programas TrueType y OpenType, fragmentos de miembros TTC, recursos ofuscados por GUID, glyph IDs directos o derivados del cmap, clústeres Unicode de uno a muchos, avances y offsets explícitos, orígenes RTL correctos en ancho, recursos de fuente compartidos, permisos de embedding y de no-subsetting, subsetting opcional de glifos, mapas ToUnicode acotados y salida de runs posicionados de costo lineal amortizado sin sustitución de fuentes por GDI

Version 2.691.0

Added

  • Se agregó layout acotado de Indices de Glyphs de OpenXPS para conteos estrictos de unidades de código y glifos por clúster, avances explícitos en centésimas de em, offsets horizontales y verticales, progresión inversa de BidiLevel impar, rellenos sólidos de atributo o elemento de propiedad, opacidad, batching nativo TJ de PDF, fallback de clústeres Unicode posicionados, extracción de texto preservada, diagnósticos fail-closed de entrada malformada y búferes de costo lineal amortizado con tope de 65,536 mapeos

Version 2.690.0

Added

  • Se agregó soporte de Path.OpacityMask de OpenXPS para máscaras sólidas, de gradiente radial elíptico lineal y multiparada de alfa variable, y de ImageBrush PNG ordinario, teselado o reflejado, mediante alfa uniforme plegado, grupos de transparencia DeviceGray nativos acotados, patrones de shading compartidos y flujos de soft-mask de imagen, manejo fail-closed de contenido no soportado, y el builder reutilizable RegisterLuminositySoftMaskState con binding de recursos de imagen alfa

Version 2.689.0

Added

  • Se agregaron los modos Tile, FlipX, FlipY y FlipXY de ImageBrush de OpenXPS mediante patrones de tiling nativos de PDF con una, dos o cuatro colocaciones recortadas independientemente, recursos compartidos de imagen y soft-mask PNG, matrices compuestas de fixed-page, path y brush, y la API acotada RegisterImageTilingPattern para patrones respaldados por imagen reutilizables

Version 2.688.0

Added

  • Se agregó soporte de ImageBrush.Transform de OpenXPS para matrices de atributo finitas de seis parámetros y elementos de propiedad MatrixTransform, concatenadas después del clipping nativo de Path y antes del clipping del viewport y la colocación de imagen, así que el brush puede rotar, escalar, inclinar o trasladar sin cambiar su geometría vectorial contenedora; el RelativeTransform no estándar y los recursos de matriz sin resolver siguen siendo diagnósticos explícitos

Version 2.687.0

Added

  • Se agregó colocación de image XObjects controlada por matriz mediante THPDFPage.ShowImageMatrix y se extendió la importación de fixed-pages XPS con rellenos ImageBrush de paquete JPEG, PNG, TIFF y JPEG XR, mapeo Viewbox y Viewport absoluto o relativo a límites, clipping nativo de path y de viewport único, opacidad de imagen y path, alfa de soft-mask PNG, dimensionamiento consciente de DPI a 96 DPI, caché compartida de recursos decodificados y diagnósticos a prueba de fallos para tiling, transforms, conversión de color y trazos de imagen no soportados

Version 2.686.0

Changed

  • Se agregó el registro reutilizable y acotado de gradientes radiales multiparada y se extendió la importación nativa vectorial de paths XPS con valores elípticos RadialGradientBrush de elemento de propiedad, spread Pad, alfa uniforme de paradas, opacidad de brush, mapeo relativo o absoluto de centro, origen y radio, shading nativo Type 3 de PDF y restauración de coordenadas que deja la geometría del path intacta

Version 2.685.0

Changed

  • Se extendió la importación nativa vectorial ordenada de paths XPS con parseo de elementos de propiedad consciente de comillas y acotado, brushes sólidos y de gradiente lineal multiparada, patrones de shading nativos de PDF, alfa de brush y de paradas, coordenadas de gradiente por defecto relativas a límites o absolutas explícitas, interpolación de paradas fuera de rango, y diagnósticos a prueba de fallos para transforms, modos de spread, interpolación de color, alfa variable y ejes degenerados no soportados

Version 2.684.0

Changed

  • Se agregó importación ordenada de paths XPS vectorial nativa con geometría abreviada acotada, reglas de relleno, rellenos y trazos sólidos RGB y ARGB, opacidad de path, ancho de trazo, transforms de seis parámetros, y diagnósticos a prueba de fallos para características de dibujo no soportadas

Version 2.683.0

Changed

  • Se fortaleció la validación PDF/X-6 del contenido realmente pintado con el estado gráfico de patrones de shading en tiempo de definición, semántica ExtGState de patrones nonstroking, chequeos fail-closed de subtipo de soft-mask y backdrop, métricas exactas de glifos Type 3 y reglas de color heredado, clasificación estricta de alfa de pintura combinada, inferencia de color JPX acotada, y composición de anotaciones consciente de apariencias

Version 2.682.0

Added

  • Se agregó soporte de firma y verificación ECDSA para brainpoolP256r1, brainpoolP384r1 y brainpoolP512r1, incluyendo la matriz de digests SHA-2 y SHA3 específica de curva, validación fail-before-provider al firmar, parámetros estrictos de certificado de curva nombrada, identificadores de algoritmo ECDSA sin parámetros, valores de firma DER canónicos, importación CNG de curva nombrada de Windows y diagnósticos deterministas para parámetros explícitos, finales, desconocidos o no coincidentes

Version 2.681.0

Changed

  • Se unificó la ejecución de contenido de bitmaps no progresivos, direct-DC, Form y display-list mediante HPDFInterpretContentTokensDevice y la extensión opcional completa IHPDFContentOperatorDevice, con un checkpoint de cancelación por operador, cacheo en tiempo de compilación de índices de operador para replay de display-list sin escaneo de operandos, métricas públicas OperatorCount, compatibilidad preservada con dispositivos semánticos, semántica corregida de los operadores ", v y y, y manejo legal del terminador EI sin diagnósticos de fallback falsos

Version 2.680.0

Added

  • Se agregaron sobrecargas transaccionales y acotadas de RepairPDFA4 con opciones tipadas, reportes detallados de reparación, proveniencia compartida de hallazgos, normalización segura de encabezado PDF 2.0, trailer ID, metadata, Catalog y presentación, reparación de identificación PDF/A consciente de namespaces, política de commit configurable parcial o de conformancia completa, detección de regresión de errores, rollback byte-exacto del grafo y del XMP, y un límite estricto que preserva el contenido de páginas, fuentes, color, transparencia, imágenes, operadores gráficos y texto extraído

Version 2.679.0

Added

  • Se agregó validación PDF/X-6 del contenido realmente pintado con reglas seleccionables ISO 15930-9:2020 o erratas resueltas 2025, chequeos reales de encabezado y canales ICC, recorrido consciente de recursos por arreglos de contenido, Form XObjects, patrones de tiling y shading, imágenes, glifos Type 3, soft masks y apariencias de anotaciones, diagnósticos de modo de overprint y pintura combinada de transparencia, proveniencia estable de reglas, y presupuesto acotado de trabajo de bytes decodificados, tokens, objetos, issues, recursión y estado gráfico

Version 2.678.0

Added

  • Se profundizó la validación acotada de PDF/A-4 con chequeos cacheados de encabezado y componentes ICC, consistencia de output intents de documento y página, análisis real de color de dispositivo pintado y transparencia a través de arreglos de contenido, Form XObjects anidados, imágenes, máscaras de imagen, shadings y apariencias de anotaciones, estado gráfico heredado, embedding de fuentes de renderizado, relaciones CIDFont y CMap, flags estrictos de anotaciones y estados de apariencia, validación de paquetes XMP y namespaces UTF-8, ubicaciones lógicas del árbol de páginas, diagnósticos estables conscientes de cláusulas, y techos configurables de bytes decodificados y tokens de contenido

Version 2.677.0

Added

  • Se completó la validación acotada de PDF/UA-2 de documentos, cadenas legibles por humanos, optional content, anotaciones, AcroForm, destinos de estructura, outlines, archivos incrustados y etiquetas de página anidadas, incluyendo propiedad física del ParentTree, hijos de estructura escalares, restricciones de appearance streams, propiedades XMP basadas en namespace-URI, detección de Unicode de uso privado y diagnósticos conscientes de cláusulas; la exportación estructurada HTML, XHTML, XML y JSON ahora comparte un modelo de lectura accesible etiquetado-primero con idioma, título, navegación, etiquetas de página, links seguros, anotaciones, controles de formulario no sensibles, reemplazos de marked-content, artifacts, alternativas de imagen, fallback geométrico, límites independientes, cancelación y publicación atómica

Version 2.676.0

Added

  • Se agregó planificación acotada y mínima de byte ranges para cada página de un PDF linearizado mediante PlanProgressiveLinearizedPageRanges, con decodificación de hints primarios y de overflow cruda o Flate, layouts de hints combinados alineados a bytes y de división continua del Anexo F interoperables, dependencias exactas de bootstrap, página, grupo compartido y referencias cruzadas tradicionales o de flujo con prefijo LF o CRLF, acumulación legal de lecturas cortas, techo por defecto de 256 MiB de memoria del planificador con desambiguación de encoding fail-closed, merging consciente de solapamientos, verificaciones cruzadas estructurales estrictas, límites tipados y diagnósticos de disponibilidad, y una ruta unificada de primera página [0, /E)

Version 2.675.0

Added

  • Se agregaron políticas independientes de crypt filters conformes a estándares para cadenas, flujos normales y archivos incrustados mediante ConfigureCryptFilterDefaults y SetStreamCryptFilter, incluyendo filtros reservados de contraseña y clave pública, /Identity, pipelines /EFF de seguridad por contraseña correctos para el escritor y /Crypt iniciales, límites fail-closed específicos de flujos de destinatarios de clave pública, carga e inspección de named filters externos sensibles a mayúsculas, /CFM /None, reporte de longitud de clave V2, fallback Direct File de política mixta, políticas divididas de contenedor de object streams y cadenas miembro, y actualizaciones incrementales cifradas que preservan la política

Version 2.674.0

Added

  • Se agregaron actualizaciones incrementales cifradas que preservan credenciales, Standard y de clave pública, mediante una sobrecarga de BeginIncrementalUpdate consciente de contraseña y material de claves de destinatario asignado, con file keys o FEKs retenidos de forma segura, políticas separadas de crypt filter para cadenas, flujos, metadata e Identity, derivación legada de claves de objetos consciente de generación, referencias /Encrypt heredadas exactas, revisiones de origen byte-idénticas, acceso original de usuario, propietario o destinatario, y rechazo fail-closed de cambios de cifrado o filtros heterogéneos no soportados

Version 2.673.0

Security

  • Se agregó validación acotada del grafo de segmentos JBIG2 antes de la decodificación full-page, de región, nativa o externa y antes de compartir el diccionario global, con chequeos indexados de duplicados y referencias faltantes, detección iterativa de ciclos y profundidad de dependencias, exigencia de asociación de página en flujos incrustados, rechazo de segmentos prohibidos, presupuestos de referencias largas y aristas agregadas, guardas de asignación de diccionarios de símbolos y telemetría precisa de fallos

Version 2.672.0

Added

  • Se agregaron generación y validación estricta del signature-policy-identifier PAdES E-EPES con OIDs de política explícitos, hashes conocidos o desconocidos ETSI, calificadores SPuri, SPUserNotice y SPDocSpecification, parseo acotado de Unicode y colecciones, hashing del documento de política, pinning de OID y hash del firmante primario antes del trabajo criptográfico, estados dedicados de mismatch y reporte JSON completo

Version 2.671.0

Added

  • Se agregaron contenedores RFC 5652 deterministas con hasta 256 registros primarios SignerInfo independientes mediante HPDFCMSBuildMultiSignedData y HPDFCMSMergeSignedData, incluyendo prevalidación de lote completo antes de efectos secundarios por firmante, atributos, algoritmos, certificados y providers por firmante, validación estricta de contenedores de longitud definida, conjuntos ordenados por DER y deduplicados, resultados de verificación independientes, compatibilidad byte con firmante único y dimensionamiento de placeholders de agregado sin efectos secundarios

Version 2.670.0

Added

  • Se agregaron identidades de firmante RFC 5652 SubjectKeyIdentifier opcionales mediante THPDFCMSSignOptions.SignerIdentifier, incluyendo encoding compacto IMPLICIT del SID, selección automática de versión de SignerInfo y SignedData, extracción estricta de extensiones X.509, soporte de provider y de dimensionamiento de placeholders, y matching fail-closed de SID, certificado y versión durante la verificación

Version 2.669.0

Security

  • Se agregaron diagnósticos fail-fast de consistencia de algoritmos de digest CMS a través de SignedData.digestAlgorithms, SignerInfo, parámetros del mecanismo de firma y CMSAlgorithmProtection de RFC 6211, con estado de verificación dedicado, código de fallo de validación, propagación de timestamps, razones detalladas de issues y salida JSON

Version 2.668.0

Added

  • Se agregaron generación y verificación SHA3-256, SHA3-384 y SHA3-512 en CMS detached, RSA PKCS#1 v1.5, contratos de providers ECDSA, RSA-PSS, timestamps de contenido y firma RFC 3161, renovación PAdES-LTA, diccionarios Seed Value y declaraciones de extensión de desarrollador PDF 2.0 ISO 32001, con hashing acotado de byte range en una pasada compartido con las políticas MAC de PDF coincidentes

Version 2.667.0

Added

  • Se agregó THotPDF.ValidatePDFMACChain con validación de revisiones incrementales de la más vieja a la más nueva, indexación acumulativa clásica o de xref streams, ubicaciones exactas de fallos de revisión y xref, detección de reemplazos históricos de MAC, exigencia estable de KDFSalt, rechazo de degradación de fuerza de digest, chequeos autenticados de /P y /Perms, reporte de preflight y parseo acotado de revisiones sin copias temporales del PDF

Version 2.666.0

Added

  • Se agregaron THotPDF.SignPDFWithPFXAndAttachedPDFMAC y validación adjunta a la firma con AuthCode directo del trailer activo, SigObjRef indirecto, cobertura completa de la revisión firmada, binding del digest del valor de firma crudo, políticas MAC de PDF SHA-2 o SHA-3, hashing de rangos en una pasada para firma y MAC, reporte de preflight y reemplazo atómico de la salida

Version 2.665.0

Fixed

  • Se corrigió THotPDF.RegisterNChannelColorSpace para emitir la forma DeviceN de cinco elementos de ISO 32000-2 con /Subtype /NChannel y metadata de componentes de proceso, se elevó su versión mínima de PDF a 1.6, y las soft masks de luminosidad ahora resuelven la pintura NChannel a través de su espacio alternativo, conservando compatibilidad de lectura con los tokens legados de la familia /NChannel

Version 2.664.0

Added

  • Se completó el renderizado de blend modes de PDF con implementaciones de camino caliente enteras para Hue, Saturation, Color y Luminosity, y se corrigió el fast path de opacidad completa para que cada blend mode separable o no separable activo se componga contra su backdrop

Version 2.663.0

Security

  • Se autenticaron los contenedores PKCS#12 antes de exponer los contenidos safe cifrados, verificando el MacData externo opcional con iteraciones KDF de PKCS#12 acotadas, HMAC SHA-1 o SHA-256, comparación de digests en tiempo constante y manejo fail-closed de contraseña incorrecta y manipulación

Version 2.662.0

Added

  • Se agregaron tres comandos a HotPDFCLI: render rasteriza cada página seleccionada a <prefix>-page<N>.png por el pipeline de bitmaps de páginas cargadas (rango --pages, --dpi 10..2400, 150 por defecto), tables extrae tablas tipadas a CSV o JSON vía ExportLoadedTypedTables (--json, -o archivo o consola) y compare imprime el reporte de comparación JSON de dos documentos mediante HPDFDocCompareDocuments (--mode 0..5 cubriendo conteo de páginas, texto de páginas, conteo de objetos, imágenes renderizadas, completo y estructural)

Fixed

  • Se corrigió el pipeline de transformaciones ICC de Win64 que producía salida toda en ceros en transformaciones por lotes de 8 bits (TransformBytes): el fast path optimizado de LUT 1D dentro de los objetos lcms2 de Win64 devuelve ceros mientras el pipeline genérico de remuestreo es correcto, así que la transformación de 8 bits ahora se compila con cmsFLAGS_NOOPTIMIZE solo en Win64; el camino de un solo color de 16 bits y todas las transformaciones Win32 conservan el fast path optimizado (las primarias sRGB por lote ahora hacen ida y vuelta en ambas plataformas)

Version 2.661.0

Added

  • Se agregó compresión Flate de alta relación Zopfli real con presupuesto, después del baseline zlib existente de cuatro estrategias, con selección estricta de no-crecimiento, límites de entrada, iteraciones, bloques, salida y tiempo transcurrido, telemetría detallada de flujos e imágenes paralelas, y gates deterministas de ahorro sobre corpus fijo

Version 2.660.0

Added

  • Se agregaron reportes de preflight XML legibles por máquina deterministas y plugins confiables versionados por ABI para extracción de características y reglas de validación personalizadas, con ordenamiento estable, integración de policy bundles, propagación de cancelación, chequeos de capacidades fail-closed y presupuestos finitos de plugins, hallazgos, características, cadenas, salida y tiempo transcurrido

Version 2.659.0

Added

  • Se extendió el FormCalc XFA acotado con lógica condicional, agregados numéricos repetidos y callbacks validados de instancias dinámicas, y se agregaron scripts de formulario QuickJS sandboxeados desactivados por defecto, con flujo de control completo, typed arrays nativos, acceso a datos aislado, presupuestos finitos de instrucciones, tiempo, memoria, stack, valores y operaciones por instancia, y telemetría de ejecución

Version 2.658.0

Added

  • Se agregaron DOMs acotados y editables de paquetes XFA para flujos XDP completos y arreglos ordenados de paquetes, con consultas de ruta por local-name, mutación de paquetes y nodos, preservación exacta de bytes no tocados, reescritura selectiva por paquete, salida determinista de namespaces y atributos, división segura de CDATA, escape de entidades y presupuestos finitos de entrada, salida, paquetes, nodos, profundidad, atributos, texto y consultas

Version 2.657.0

Added

  • Se agregó firma remota CSC API v2 por el pipeline existente de providers CMS con transporte propiedad de la aplicación, refresco de tokens OAuth, descubrimiento acotado de cadenas de credenciales, manejo explícito de autorización y SAD, firma de digests síncrona o asíncrona, parámetros RSA-PSS, polling, timestamps RFC 3161, cancelación, claves de idempotencia estables y una caché finita de operaciones completadas

Version 2.656.0

Added

  • Se agregaron manejadores opcionales de documentos XPS, EPUB y CBZ con puntaje de contenido, registro thread-safe reemplazable, un escaneo validado del archivo por documento, ordenamiento de fixed-pages, spine e imágenes natural, caché inmutable de conversión a PDF, presupuestos compartidos de archivo, recursos, reflow, páginas, píxeles, DPI, salida y cancelación, y publicación de PDF segura ante rollback

Version 2.655.0

Added

  • Se agregó extracción acotada de tablas tipadas y exportación atómica a CSV o JSON con columnas canónicas, merging de fragmentos de la misma página y de páginas consecutivas, spans de celdas combinadas, encabezados repetidos, geometría de página, confianza, proveniencia, e inferencia de enteros, números, booleanos, fechas, fecha-hora, moneda y porcentajes controlada por locale

Version 2.654.0

Added

  • Se agregó exportación estructurada atómica de páginas cargadas a HTML, XHTML, XML y JSON mediante un solo modelo de orden de lectura con bloques, spans con estilo, tablas detectadas, coordenadas, orden de origen, imágenes PNG acotadas opcionales, escaping seguro para Unicode, cancelación y presupuestos finitos de recursos

Version 2.653.0

Added

  • Se agregó reescritura atómica de color de páginas cargadas a DeviceGray, DeviceRGB o DeviceCMYK con preservación de vectores buscables, conversión raster sin pérdida con gestión de color para imágenes y recursos complejos, salida segura ante rotación, presupuestos explícitos de fidelidad de render y recursos, y políticas de preservar, convertir a proceso o rechazar para placas spot

Version 2.652.0

Added

  • Se agregó detección de redacción review-first en páginas cargadas, con patrones de PII conscientes del checksum, detectores de entidades y rostros conectables, hallazgos en espacio de página con puntaje de confianza, telemetría de trabajo acotada, identidad obligatoria del revisor, staging atómico de anotaciones aprobadas, y una frontera explícita separada para el burn-in

Version 2.651.0

Added

  • Se agregó decodificación acotada de códigos de barras en páginas cargadas y regiones, con motores conectables, renderizado progresivo de baja resolución, escaneos de respaldo de cuarto de vuelta, payloads de texto y crudos validados, límites y orientación en espacio PDF, filtrado por confianza, deduplicación de solapamientos, cancelación y telemetría de recursos

Version 2.650.0

Added

  • Se agregaron capas de texto OCR buscables, acotadas y cancelables, con motores de reconocimiento conectables, validación de confianza y geometría, texto Unicode invisible alineado con la rotación, agrupación de optional-content, telemetría de recursos y publicación atómica multipágina

Version 2.649.0

Added

  • Se agregaron round trips completos del grafo de objetos a través de JSON versionado, con exportaciones snapshot en streaming e incrementales, payloads sidecar embebidos crudos o decodificados, importación acotada compatible con el schema, validación estructural y de longitud de streams, y publicación transaccional

Version 2.648.0

Added

  • Se agregó reparación acotada de documentos QDF de diagnóstico editados a mano, que preserva los bytes de objetos y streams, corrige longitudes de stream directas, indirectas, faltantes o desactualizadas, reconstruye offsets de cross-reference clásicos y trailers, rechaza estructura insegura, y verifica la salida a través del loader normal

Version 2.647.0

Added

  • Se agregó un registro thread-safe de filtros de stream personalizados, con contratos push y pull acotados, presupuestos de decodificación compartidos, cancelación cooperativa, requisitos de seek explícitos, fallos personalizados aislados, y telemetría de ejecución

Version 2.646.0

Added

  • Se agregaron APIs acotadas de visitor y eventos de operadores de contenido, con vistas de operandos de solo lectura, callbacks de estado deterministas, acciones inspect, measure, replace, delete, stop y reject, cancelación cooperativa, salida validada, y actualizaciones atómicas de páginas cargadas

Version 2.645.0

Added

  • Se agregó un contrato conectable de backend de render para páginas cargadas, con acceso compilado a display lists, implementación GDI nativa, dispatch paralelo thread-safe, política de fallback determinista, invalidación de caché, y telemetría de ejecución

Version 2.644.0

Added

  • Se agregó detección acotada de solapamientos de layout, rutas de elementos, mapeo de fuente opt-in, overlays nativos de desborde y solapamiento vectorial, callbacks de diagnóstico en vivo, y estadísticas de trabajo

Version 2.643.0

Added

  • Se agregaron gráficos vectoriales nativos acotados, con series de línea, barras, área, pastel y dispersión, ejes automáticos o manuales, temas, leyendas, etiquetas, alternativas Figure de PDF/UA, y estadísticas de render

Version 2.642.0

Added

  • Se agregó paginación acotada de RichEdit y RTF en el hilo de GUI, con salida EMF vectorial, imágenes, presentaciones OLE soportadas opt-in, cancelación, preservación de posición de stream, y presupuestos explícitos de entrada, caracteres, páginas y salida

Version 2.641.0

Added

  • Se agregó importación acotada de SVG 2 como Form XObjects de PDF reutilizables, con geometría y arcos nativos, cascade de CSS, gradientes vectoriales, soporte de clip y máscaras, texto Base 14, recursos de opacidad, anotaciones de enlace conscientes de la ubicación, y estadísticas de importación

Version 2.640.0

Added

  • Se agregó un perfil de importación versionado de paged-media HTML5, con parsing DOM tolerante, cascade de CSS de impresión, layout paginado de bloques y tablas, controles AcroForm opcionales, recursos acotados manejados por callbacks y estadísticas por operación

Version 2.639.0

Changed

  • Los mapeos de archivos locales grandes ahora adaptan el tope configurado de bytes mapeados entre ventanas secuenciales más grandes y hasta 16 ventanas MRU de acceso aleatorio más pequeñas, conservan una opción explícita de geometría fija, y reportan geometría activa, transiciones, conteos de patrones de acceso y pico de bytes mapeados

Version 2.638.0

Added

  • Se agregó entrenamiento acotado de símbolos JBIG2 entre páginas, con backends externos y nativos, un diccionario global compartido, reutilización exacta de páginas duplicadas, inserción directa de lotes de imágenes PDF, telemetría de backend y de tamaño, y un ahorro de compresión medido de 78.8 por ciento en el corpus de regresión de 100 páginas

Version 2.637.0

Changed

  • El renderizado paralelo de páginas cargadas ahora reduce los workers solicitados según el presupuesto de memoria de todo el proceso, reserva cada página reclamada, conserva las reservas de salida ordenada hasta la entrega por callbacks, despierta a los que esperan presupuesto ante cancelación o fallo, y reporta telemetría de concurrencia, reservas, admisión, demoras y esperas

Version 2.636.0

Changed

  • El prefetch de páginas cargadas ahora compila y renderiza fuera del lock de caché, se cancela cooperativamente a través de tokenization y playback, cede paso al renderizado de páginas en primer plano, y expone telemetría de progreso, fallos, preemption y latencia de cancelación

Version 2.635.0

Added

  • Se agregó renderizado paralelo de páginas en streaming ordenado, con callbacks en el hilo llamador, una cola acotada de bitmaps completados, backpressure del productor, cancelación cooperativa, lifetimes de bitmaps prestados, y telemetría de cola, bytes, esperas, completado y entrega

Version 2.634.0

Added

  • Se agregó un pipeline paralelo de dos etapas para páginas cargadas que compila display lists fuera del lock de render-cache, arranca el playback antes de que el set completo de páginas esté compilado, balancea dinámicamente workers acotados, preserva el orden de entrada, reduce la asignación de content tokens, y expone telemetría de etapas, caché, completado y latencia

Version 2.633.0

Added

  • Se agregaron handles inmutables con reference counting para bitmaps decodificados, con hits de caché sin copias, dibujo thread-safe directo del renderer, copias mutables aisladas bajo demanda, lifetimes independientes de la eviction, y telemetría acumulativa de handles y copias

Version 2.632.0

Changed

  • La ejecución de QuickJS ahora funciona tanto con objetos estáticos como con una DLL puente ABI-neutral en Win32 y Win64, con valores Unicode-safe, reporte de estado determinista, límites configurables de memoria, stack, script, tiempo e interrupciones, descubrimiento seguro de la DLL, recuperación tras scripts rechazados, y builds de runtime multiplataforma reproducibles

Version 2.631.0

Changed

  • La validación de reglas de negocio de Factur-X y ZUGFeRD ahora ejecuta la superficie completa revisada de Schematron XPath 2 con bases de datos de códigos externas, bindings secuenciales, cuantificadores, sumas FLWOR, identificadores de reglas fallback estables, parsing XML seguro y acotado, hallazgos explícitos de errores de evaluación, cero saltos silenciosos, y validación combinada fail-closed

Version 2.630.0

Added

  • Se agregó instancing integrado de fuentes variables TrueType, con ejes mapeados, tuples gvar compartidas y privadas, interpolación IUP, actualizaciones de outlines simples y compuestos, métricas de phantom points, baking de HVAR, VVAR y MVAR, reconstrucción compacta de glifos estáticos, salida con checksums correctos y registro de fuentes Unicode sin callbacks

Version 2.629.0

Added

  • Se agregó estimación de placeholders CMS sin efectos secundarios a partir de tamaños de firma explícitos, del proveedor o de certificados RSA, conformación exacta del contenedor estático, reservas conservadoras de payload dinámico, rebuilds previos a la firma, reintentos del proveedor gated por capacidades, garantías estrictas de invocación única para firmantes externos, dimensionamiento acotado y diagnósticos detallados de cada intento

Version 2.628.0

Added

  • Se agregó subsetting de fuentes embebidas en PDFs cargados basado en alcanzabilidad, incluyendo contenido de páginas, Form XObjects anidados, estados de apariencia de anotaciones, programas de fuente compartidos, formatos TrueType y CFF, selección de tamaño codificado, mapeos CID y ToUnicode estables, resultados detallados, y rechazo por defecto cuando hay firmas presentes

Version 2.627.0

Added

  • Se agregó generación automática de estructura PDF/UA para árboles de layout declarativos, incluyendo headings, listas, tablas, figuras, metadata de idioma y texto alternativo, artefactos de paginación, referencias de marked-content seguras para continuación, preservación del orden de lectura, validación semántica y estadísticas de estructura

Version 2.626.0

Added

  • Se agregó un DOM de documentos declarativo con estilos heredables, factories de componentes reutilizables, texto, spacers, stacks, contenedores, secciones, headers y footers repetidos, tablas ponderadas con filas de encabezado repetidas, profundidad de continuación acotada, estadísticas de paginación, fragmentos de texto y tablas sin copia, traversal lineal del nivel superior, flushing inmediato de páginas, y superficies Delphi y C++Builder equivalentes

Version 2.625.0

Added

  • Se agregó un performance gate estadístico repetible en Win32 y Win64 que aísla load, save, render y extracción de texto, registra warmups y 30 muestras crudas con p50, p95, varianza muestral, RSS, I/O del proceso, entorno e identidad determinista del fixture, y luego evalúa umbrales JSON estables y devuelve un exit code de fallo ante regresiones

Version 2.624.0

Changed

  • Se rehizo el parsing simple de dictionaries y arrays en torno a spans de fuente inmutables, conversión numérica directa, contenedores anidados de una sola pasada e inserción indexada en dictionaries, con telemetría pública de materialización; un fixture Win32 de 30,000 pares redujo los bytes asignados en cinco pasadas un 64.7 por ciento y el tiempo transcurrido de 3,656 ms a 46 ms

Version 2.623.0

Added

  • Se agregaron límites de parser configurables para bytes individuales de tokens, tokens agregados, entradas de arrays o dictionaries y tokens malformados, más un preset estricto de entrada no confiable, excepciones tipadas de límites y telemetría por carga; los gates de regresión rechazan un token de 2 MiB y un contenedor de un millón de tokens en menos de 250 ms y por debajo de un pico de proceso de 37 MiB

Version 2.622.0

Added

  • Se agregaron APIs explícitas de liberación del grafo de objetos de páginas cargadas y de telemetría, que descartan roots limpios propiedad de la página y cachés de render mientras preservan recursos compartidos indirectos y metadata de reload; el procesamiento secuencial de 100,000 páginas se mantiene en un pico estable de 69.3 MiB, y las páginas ordinarias o comprimidas liberadas se materializan de nuevo con su identidad de objeto original

Version 2.621.0

Changed

  • Los contenedores object-stream decodificados ahora usan una caché LRU configurable con tope de bytes, eviction inmediata por contenedor, reload respaldado por la fuente tras la eviction, un modo de retención cero, y telemetría de pico de bytes, eviction y reload

Version 2.620.0

Changed

  • Los árboles de páginas ordinarias grandes ahora se abren en placeholders compactos, resuelven páginas aleatorias mediante traversal guiado por /Count y un índice hash de objetos indirectos, cachean las páginas resueltas, exponen telemetría y controles de materialización, y se expanden automáticamente antes de mutaciones estructurales u operaciones de save

Version 2.619.0

Changed

  • Los campos AcroForm cargados, nombres calificados, widgets, anotaciones y páginas ahora comparten una caché perezosa bidireccional de relaciones con búsqueda inversa de anotaciones, búsqueda de página por widget, telemetría de actividad, invalidación explícita para ediciones crudas del grafo de objetos, y mantenimiento automático seguro ante mutaciones

Version 2.618.0

Changed

  • La búsqueda de objetos de página ahora usa un índice inverso reconstruido perezosamente y consciente de mutaciones para números de objeto y punteros de página resueltos, reemplazando los escaneos repetidos de la tabla de páginas en copia de páginas, outlines, destinos con nombre, actions, formularios, accesibilidad y reconciliación del árbol de páginas, a la vez que expone telemetría de validez y actividad

Version 2.617.0

Changed

  • La comparación de documentos renderizados ahora soporta DPI elegido por quien llama, tolerancia de color RGB o de luminancia, gates de similitud de ratio de píxeles cambiados y tipo SSIM, regiones cambiadas conectadas deterministas, overlays opcionales de diferencias PNG, y presupuestos fail-closed de píxeles por página y agregados con diagnósticos explícitos de renderizado

Version 2.616.0

Changed

  • La comparación de documentos ahora recorre grafos de objetos indirectos por rutas deterministas basadas en el catalog, hashea valores y streams dentro de límites explícitos de recursos, alinea páginas antes de clasificar inserciones, eliminaciones, movimientos y cambios, distingue objetos movidos de adiciones y remociones, y reporta comparaciones incompletas en lugar de tratar resultados limitados por presupuesto como idénticos

Version 2.615.0

Changed

  • La decodificación de imágenes cargadas ahora usa 16 shards de metadata de caché y coordinación singleflight exacta por clave, ejecuta en concurrente las decodificaciones costosas independientes preservando una única decodificación owner para solicitudes duplicadas, aplica los presupuestos configurados de bytes y entradas a través de todos los shards, y expone puntos de entrada de decodificación cacheada más telemetría de concurrencia; cuatro solicitudes JPEG independientes de 12,000 píxeles escalan 3.72 veces en cuatro workers Win64, mientras que ocho solicitudes de la misma clave decodifican una sola vez

Version 2.614.0

Changed

  • El renderizado JPEG de baja resolución en escala de grises y RGB ahora selecciona una escala acotada de inverse-DCT de 1/2, 1/4 u 1/8, streamea scanlines escaladas a través de un resampler de punto fijo directamente al bitmap objetivo exacto, preserva presupuestos de decodificación, cancelación y aislamiento de workers del codec, y expone telemetría de fuente, escalado, objetivo, scanline y memoria a través de GetLastJPEGReducedDecodeInfo; el fixture de regresión de 12,000 por 12,000 a 300 por 300 corre 24.05 veces más rápido que la decodificación completa sin asignar su raster fuente de 432 MB

Version 2.613.0

Changed

  • Los arrays /Contents de páginas cargadas ahora exponen un stream concatenado seekable perezoso, retienen segmentos sin filtrar en almacenamiento respaldado por la fuente, decodifican como máximo un segmento filtrado a la vez, usan acumulación de tokens y bytes lineal amortizada, preservan los streams originales al editar añadiendo un segmento nuevo, y mantienen una secuencia de 10,000 segmentos de 1 GiB por debajo de 64 MiB de memoria de trabajo adicional

Version 2.612.0

Changed

  • Las actualizaciones incrementales ahora mantienen el archivo fuente con lock de escritura y respaldado en archivo en lugar de retener los bytes completos de la fuente, visitan y emiten solo objetos cambiados, nuevos y eliminados en subsecciones xref dispersas, streamean el prefijo original hacia un nuevo destino, y agregan directamente con rollback para saves al mismo destino; una revisión de 4 GiB de un solo objeto se mantiene dentro de 128 MiB de memoria de trabajo adicional

Version 2.611.0

Added

  • Se agregó una caché acotada de decodificadores de fuentes cargadas con alcance de documento, con límite LRU de 32 MiB y 128 entradas, reutilización singleflight de parsing a través de páginas y extracción de texto cargado, exportación SVG y reemplazo de texto, resultados independientes de deep copy desde GetLoadedFontDecoder, APIs configurables de presupuesto de memoria y telemetría, e invalidación automática de configuración de grafo, página, reload, JSON Patch y CMap; el uso repetido de una fuente indirecta compartida ahora parsea su encoding, widths, ToUnicode, CIDToGIDMap y mapeos descendentes una sola vez mientras se retiene