HotPDF Notas de la versión

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

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

  • Eliminación de anotaciones de página por página exacta y nombre Unicode, incluidas las cascadas de popups y respuestas, 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

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

Version 2.972.0

Added

  • Renderizado de appearances por defecto de anotaciones con estado de texto preservado, ajuste automático, espaciado de rich text y clipping de texto, incluidos los modos de rendering 4 a 7

Version 2.971.1

Fixed

  • Prevención de fallos de comprobación de rango en la caché pública de shaped runs en builds de FPC 3.3.1 para Windows, preservando la multiplicación de hash modular de 32 bits explícita, el aislamiento exacto de claves de caché y la expulsión LRU

Version 2.971.0

Added

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

Version 2.970.0

Added

  • Evalúa grupos @supports nativos de rich text e importaciones supports() con consultas de declaraciones y selectores soportadas, condiciones anidadas acotadas, sondas conscientes de namespaces, recuperación de cancelación y appearances FDF/XFDF guardadas calculadas

Version 2.969.0

Added

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

Fixed

  • Admite dimensiones mínimas exactas de medios, resolución y tamaños de fuente iniciales de forma consistente entre targets de compilador, mientras sigue rechazando valores por debajo del bound soportado

Version 2.968.0

Added

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

Version 2.967.0

Added

  • Aplica style sheets de rich text enlazadas e importadas suministradas por el llamador, con conjuntos de títulos preferidos o alternativos compartidos, resolución acotada de URI y base de documento, y publicación transaccional nativa, Windows y Linux de FDF/XFDF

Version 2.966.0

Added

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

Version 2.965.0

Added

  • Crea, clona y edita árboles de formularios XFA nativos de forma transaccional, preservando identidades de nodos supervivientes, rollback de eventos, apariciones empty-merge soportadas y packets de formularios guardados independientemente de los templates del autor

Version 2.964.0

Added

  • Genera appearances nativas plain, rich, shaped y family a partir de fuentes OpenType CFF2 completas en coordenadas de variación por defecto, preservando identidad de glifos, Unicode, widths y permisos de incrustación en salida CFF 1 CID-keyed estática acotada

Version 2.963.0

Added

  • Aplica declaraciones de namespaces CSS con ámbito y selectores cualificados a campos nativos de rich text y transacciones de formularios Windows/Linux, preservando appearances calculadas, búsqueda de namespaces acotada, publicación no-op exacta y compatibilidad de checked builds

Version 2.962.0

Added

  • Hace wrapping del texto de anotaciones de fuente cruda generadas en límites de espacio y guion a través de runs de estilo, preservando caracteres codificados completos, saltos duros, dimensionado automático y cancelación acotada

Version 2.961.0

Added

  • Renderiza appearances de texto de anotaciones ausentes con programas de fuente originales Type1C, CIDFontType0C y Type1 desnudos, preservando mapeos Unicode, dimensionado automático, espaciado, altura de línea y recursos inmutables acotados

Version 2.960.0

Added

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

Version 2.959.0

Added

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

Version 2.958.0

Added

  • Accede a colecciones hijas vivas del Data DOM nativo mediante índices numéricos de solo lectura en JavaScript y FormCalc, preservando el orden actual de hijos, referencias de script objects retenidas, clones independientes, valores guardados y appearances PDF

Fixed

  • Rechaza asignación numérica, eliminación y 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 classes estructurales y posicionales, coincidencia de idioma heredada y negación compuesta a style sheets nativas internas de rich text, preservando valores calculados reales, fuentes, appearances guardadas e importaciones FDF/XFDF transaccionales

Version 2.956.1

Fixed

  • Resuelve rutas de listas hijas de nodos FormCalc mediante el compilador de eventos real, preservando colecciones vivas de formulario/propiedades, acceso a items del Data DOM, replay acotado, valores nativos guardados y appearances PDF

Version 2.956.0

Added

  • Genera appearances nativas plain, rich y shaped de campos a partir de fuentes OpenType CFF completas, preservando identidades de glifos name-keyed, charsets CID-keyed reales, mapeos Unicode, permisos de incrustación y recursos de fuentes compartidos; renderiza appearances FreeText ausentes usando defaults OpenType incrustados

Fixed

  • Acota el parseo CFF y las métricas de glifos, retiene cancelación y lectores inmutables por estilo, y preserva el comportamiento TrueType entre seis targets nativos de compilador

Version 2.955.1

Security

  • Rechaza secretos compartidos X25519 y X448 todo-cero tras la serialización canónica de bytes, incluidas entradas de bajo orden cuyos limbs de campo débiles son distintos de cero, y mantiene el resultado del acuerdo en false con un secreto 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 claves cuando están habilitadas las comprobaciones de overflow entero y de rango, incluidos intercambios P-256, P-384 y P-521 de ancho completo en Free Pascal de 32 bits

Version 2.955.0

Added

  • Añade colecciones hijas vivas de formulario/propiedades en JavaScript con length, lecturas indexadas, item, namedItem, iteración y clones independientes; retiene identidad del propietario entre eventos, ediciones de instancias repetidas y creación implícita de propiedades, con valores nativos guardados y appearances PDF

Fixed

  • Mantiene las listas vivas retenidas adjuntas a su propietario de evento actual, rechaza propietarios eliminados sin redirigir a otra instancia, y preserva valores nativos, estado retenido y rollback de journal ante fallos de asignación de colecciones, operaciones y plazos

Version 2.954.0

Added

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

Fixed

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

Version 2.953.0

Added

  • Añade colecciones independientes de nodos de consulta XFA con all, classAll, classIndex, clone y operaciones de pertenencia, 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 paths y predicados SOM ordinarios dentro de los límites originales de pila por defecto y de operaciones

Version 2.952.0

Added

  • Preserva destinos de anotaciones GoToR remotas mediante intercambio XFDF nativo, Windows ordinario y por callbacks versionado, incluidas coordenadas exactas, especificaciones de archivos Unicode y comportamiento opcional de ventana

Fixed

  • Autentica las importaciones ordinarias de anotaciones de documentos cargados contra permisos de cifrado originales, firmas y bloqueos de campos, reteniendo ediciones permitidas del llamador y vida útil independiente del origen; lee los enteros ByteRange de firmas sin redondeo Single y separa el almacenamiento compartido de strings RC4 antes de cifrar

Version 2.951.0

Added

  • Renderiza bordes nubosos acotados para anotaciones Square, Circle, Polygon y FreeText sin appearances normales, preservando width, dash, opacidad y grafos de origen; comparte bytes de fuentes generados inmutables entre vistas FreeText sin cargas repetidas de bytes decodificados, reteniendo presupuestos de parseo y cancelación

Version 2.950.0

Added

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

Version 2.949.0

Added

  • Preserva la distinción entre ninguna opción de choice seleccionada y un export value vacío seleccionado mediante intercambio XFDF nativo, Windows y Linux, con publicación no-op exacta, validación acotada y carga comprobada de documentos cifrados

Version 2.948.0

Fixed

  • Renderiza máscaras de glifos rellenos con cobertura de clip fraccional capturada preservando paths PDF, patrones, alpha y operadores de blend, 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 XFA, impidiendo que subtrees de datos sin cualificar hereden un namespace de un ancestro tras guardar y recargar

Version 2.947.0

Added

  • Renderiza bordes rectangulares de anotaciones beveled e inset y captions de líneas Unicode o ricas medidas, preservando opacidad, offsets de endpoints, appearances existentes, recursos de fuentes acotados y clipping de anotaciones

Version 2.946.3

Fixed

  • Aplica xfa.host.resetData mediante eventos nativos sin malinterpretarlo como una importación de XML de datos, preservando defaults de plantilla, valores enlazados, ámbitos repetidos, ediciones pendientes y 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 digests válidos y autenticación de contraseñas AES-256 sin cambiar interfaces públicos

Version 2.946.1

Fixed

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

Version 2.946.0

Added

  • Renderiza texto de anotaciones ricas temporales con permisos de fuente explícitos de solo lectura Preview/Print y bytes completos de fuente sin cambios, preservando políticas de incrustación editables y appearances Screen existentes sin placeholders de medios implícitos

Version 2.945.0

Added

  • Preserva páginas de anotaciones locales y destinos con nombre mediante intercambio XFDF nativo y legacy, con tokens decimales exactos acotados, XML Adobe cualificado, validación de atributos duplicados y publicación transaccional por callbacks Windows/Linux

Version 2.944.0

Added

  • Gestiona items de display y export de choices XFA vivos mediante JavaScript y FormCalc, preservando alias supervivientes, selecciones duplicadas o vacías exactas, listas nativas por instancia y appearances PDF nativas o legacy 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 scalars y rich text tipado o lotes vacíos no hacen cambios, reteniendo ediciones pendientes del grafo, políticas autenticadas de firmas y cifrado, límites de recursos y publicación atómica

Version 2.943.0

Added

  • Intercambia XFDF de anotaciones mapeadas mediante file jobs de Windows y callbacks V1 originales con transacciones autenticadas de anexado, datos binarios y Unicode acotados, bytes no-op exactos y publicación atómica

Version 2.942.0

Added

  • Renderiza anotaciones soportadas sin appearances normales mediante geometría temporal acotada, finales de línea, iconos y FreeText Unicode, reteniendo recursos de origen, texto rico, flags view/print y cancelación

Version 2.941.1

Fixed

  • Valida la unicidad de selección de choices XFA nativas con ordenación acotada cancelable, preservando export values exactos sensibles a mayúsculas, orden de selección original y comportamiento transaccional de fallo

Version 2.941.0

Added

  • Aplica espaciado de letras y palabras nativo CSS e independiente en cascada y tipado original a runs con shaping, líneas físicas, ajuste y appearances guardadas, con serialización de puntos calculada, redondeo decimal exacto y publicación transaccional JSON 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 enriquecidos Unicode, callouts, colores transparentes, adjuntos binarios, enlaces de popup y de reenvío-respuesta, permisos autenticados y publicación transaccional de anexado

Version 2.939.0

Added

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

Version 2.938.0

Added

  • Renderiza las cuatro intenciones de color estándar en estados gráficos, formularios, imágenes, sombreados, 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, activada 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 texto enriquecido 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 portátiles de campos password de 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 texto enriquecido, 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 y 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 reales Unicode para campos de texto, numéricos, de fecha y password de XFA legacy, con familia y estilo de fuente efectivos por instancia, recursos de fuente incrustados editables, enmascaramiento escalar de contraseñas 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 de cuatro nodos existente, 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 setters nativos como en jobs de Windows y 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 comentarios, validación estricta de operandos, geometría de trazado heredada, cancelación y arrays de texto ordinarios

Version 2.927.0

Added

  • Pinta las captions escalares y enriquecidas de los botones de 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 fuente AcroForm genuinos

Version 2.926.0

Added

  • Expande el shorthand font de 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 fuente guardadas reales

Version 2.925.0

Added

  • Selecciona familias de fuentes suministradas por el llamador y ordenadas para grafemas completos de texto enriquecido 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 fuente del texto enriquecido en las apariencias nativas y el JSON V1 de Linux, y enlaza 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 botones XFA nativos con programas de familia y estilo suministrados genuinos, separadores inline conservados y padding original, apariencias reales normal/down/rollover, visibilidad de caption 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 tipados originales de texto enriquecido en una única transacción atómica e independiente del documento, retiene valores de apariencia precisos y programas de fuente suministrados, conserva políticas autenticadas y 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 de fuentes real 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 caption con las extensiones lógicas finales de las líneas de texto

Version 2.917.0

Added

  • Selecciona programas de familia y estilo con nombre genuinos para las importaciones FDF y XFDF de Windows mediante rutas de archivo anidadas o callbacks de fuente versionados ya existentes, y aísla las lecturas aleatorias sincronizadas del origen 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 fuente e índices superiores persistidos, conserva los arrays completos de opciones y valores, y retiene los cambios de fuente por instancia repetida y el rollback de eventos con una preparación acotada de glifos visibles

Version 2.914.1

Fixed

  • Solapa los aciertos en primer plano de la caché de memoria con la cancelación cooperativa del prefetch tras adquirir la reserva real de memoria, conserva la telemetría de la caché de operaciones y recomprueba la cancelación después de las esperas de lock de caché o de reserva, manteniendo el orden estricto de los miss 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 caption y fuentes de caption 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 patrones finder 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 en el tope de operaciones de scripts, conservando los plazos transaccionales originales y el comportamiento de enlace 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 no guardado actual, apariencias rich reales de cuatro fuentes, políticas AES firmadas y autenticadas, y commit del contexto solo cuando ambos callbacks de salida tienen é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 por 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 texto enriquecido 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 de glifos CID-keyed CFF reales 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 fuente 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 espacio en blanco en la carga ordinaria de Windows

Version 2.905.0

Added

  • Crea árboles de páginas PDF nativos, campos editables repetidos, botones 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, diario de eventos, Data DOM, XML, FormCalc y locales ICU de XFA nativo en Linux con concesiones 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 de espaciado de caracteres cero, 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 ricas con estilo ajustadas, expone APIs acotadas de ordenación derivada 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 sombreados 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 valores del host en tiempo lineal y retiene una concesión exacta 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 reales GPOS de base, ligadura y marca con escalas de fuente independientes, conserva los contornos de glifos con origen negativo dentro de los recortes de widgets rich y reserva extensiones de línea ajustadas para las marcas apiladas visibles

Version 2.898.0

Added

  • Lee y escribe texto enriquecido acotado de FDF y XFDF, decodifica spans de estilo XHTML nativos en cuatro estilos de fuente incrustados 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 de 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 de eventos compactos completos, conservando closures, respuestas del host registradas, aislamiento de instancias, presupuestos originales del diario y 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 texto enriquecido tipado demasiado ancho en límites completos de grafemas Unicode entre estilos de fuente y color, 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 sellos de tiempo RFC3161 genuinos de documentos antes de aceptar actualizaciones de formulario protegidas por políticas de firma, conservando el rechazo transaccional ante evidencia ausente, revocada, caducada o no confiable

Version 2.893.0

Added

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

Version 2.892.0

Added

  • Renderiza sombreados 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 texto enriquecido 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 tras 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 portátiles de propiedades en bruto o resueltas con LB1, conserva los ordinales de enum 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 sellos de tiempo 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 anchura de 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 imagen FPC que antes se renderizaban en negro

Version 2.882.0

Added

  • Hereda recursos de fuente reales 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 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 mapas de bits parciales

Version 2.880.0

Added

  • Renderiza valores reales de draw y caption escalares XFA nativos tras 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 sombreado, con y sin color, con orígenes de patrón heredados, celdas anidadas, solape, pinturas de trazado y estarcido, 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 de 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 texto enriquecido con runs tipados de estilos Unicode, fuentes incrustadas reales regular, bold, italic y bold-italic, líneas base de apariencia 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, contraseña 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 consienta

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 enlaces de formulario estables por instancia con rollback exacto y regenera las apariencias opcionales de widgets tras 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 de sello de tiempo requeridas 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 texto enriquecido XFA entre estilos inline con límites de palabra medidos, saltos de línea explícitos, líneas base y alineación compartidas, huecos justificados reales entre palabras y geometría de enlaces 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 de huella de mensaje soportado real, 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 texto enriquecido 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 sellos de tiempo 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 formulario cifradas

Version 2.862.0

Added

  • Renderiza sombreados 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, máscaras suaves, fusión 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 sellos de tiempo 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 texto enriquecido, 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 fuente, borde y draw en la salida real AcroForm y PDF aplanado

Version 2.854.0

Added

  • Expone objetos de propiedades y atributos XFA nativos con enlaces 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 sellos de tiempo 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 trazado neutro y colorimetría relativa

Version 2.848.0

Added

  • Resuelve sufijos completos de rutas de descendientes XFA dentro de cada contexto de comodín, 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 documento bloqueado

Version 2.846.0

Added

  • Expone datasets y nodos de datos XFA nativos con enlaces 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 lock 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 fusión 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 comodín 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 portátil 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, fusión calibrada de grupos y páginas, bases Indexed, muestras de imagen de 16 bits y máscaras suaves 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 rellenado 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 sellos de tiempo 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 tras una publicación con éxito

Version 2.831.0

Fixed

  • Aplica de forma consistente las restricciones seed, de lock 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 fusión, 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 choice con valores de array 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 máscaras 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 sellos de tiempo 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 sello de tiempo 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 resto 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/formulario/render/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, máscaras suaves, colores Indexed/ICC, modos de fusión PDF, grupos de transparencia RGB aislados, glifos Type3 y recorte de texto, y decodifica streams de imagen 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, anchuras de glifos exactas 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 anchuras PDF, evitando la deriva acumulativa de la posición de texto por métricas de fuentes sustitutas, conservando las anchuras explícitas 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, e informa de 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 anchura, inspecciona informes de colisiones conservadores, y usa previsualizaciones selladas con commit o rollback transaccional

Fixed

  • Conserva las ediciones del documento cargado en guardados repetidos tras 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 añade OCR buscable, informa de 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 de Tesseract confiable, 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

  • Compara párrafos de contratos y ediciones de palabras u oraciones con registros de operaciones insert, delete, replace y move, ubicaciones de página para las dos versiones, conservación de las cláusulas repetidas, exclusiones explícitas de boilerplate, revisión HTML acotada y salida PDF anotada verificada contra el documento de origen

Version 2.805.0

Added

  • Importa plantillas HTML de negocio con paneles flex/grid anidados, filas con ajuste de línea, columnas de grid que abarcan varias pistas, imágenes y controles de formulario en cajas paralelas, además de recursos font-face suministrados explícitamente que se conservan durante la incrustación diferida y un presupuesto de caché independiente para las imágenes decodificadas

Version 2.804.0

Added

  • Compila el objeto PDF compartido, la E/S directa de archivos, la decodificación de contenidos y fuentes, la compresión, la criptografía y el núcleo de escritura como código Linux nativo con mapeo y sincronización POSIX, conservando las APIs de Windows y serializando correctamente las entradas xref clásicas

Version 2.803.0

Added

  • Registra capas versionadas de perfiles de factura y de reglas por país, valida facturas CII XML explícitas o híbridas con informes que delimitan el alcance, y ejecuta las reglas oficiales de facturas XRechnung 3.0.2 y CTC francesas mediante un motor Saxon configurado explícitamente, con selección de perfil publicada y diagnósticos fail-closed

Version 2.802.0

Added

  • Exporta tablas tipadas a libros XLSX independientes de Office mediante APIs nativas, jobs JSON y la C ABI, conservando tipos de valores, formatos de moneda y porcentaje, celdas combinadas, enteros grandes exactos y metadatos opcionales del origen, con preparación acotada 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, preparación acotada, cancelación, compatibilidad con campos de firma, conservación del estado del origen y publicación atómica de archivos

Version 2.800.2

Fixed

  • Invalida las cachés de relaciones de formularios cargados antes del rollback del grafo, de modo que los jobs de firma y las ediciones de documento fallidas dejan el documento original seguro para consultarlo y reutilizarlo

Version 2.800.1

Fixed

  • El renderizado paralelo ordenado admite ahora las reservas de memoria en el orden de entrada, así que las páginas posteriores no pueden agotar el presupuesto mientras la entrega espera a una página anterior, conservando 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 conservan ahora las características de shaping del documento, los flags de auto-shaping de la escritura y las selecciones de escritura e idioma del GSUB, usando los datos OpenType de cada fuente seleccionada y manteniendo los mapeos Unicode entre cambios de fuente

Version 2.799.0

Changed

  • Las importaciones vectoriales de SVG retienen ahora los arrays de dash heredados, los offsets de dash y los límites de miter en los trazos sólidos y degradados, mientras que el renderizado nativo conserva los patrones de dash con fase y de longitud cero

Version 2.798.0

Changed

  • El texto Unicode con estilo conserva ahora las fuentes en negrita y cursiva a través del layout de fallback; las sobrecargas de ResolveFontForCodePoint y AnalyzeUnresolvedGlyphs conscientes del estilo 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 de SVG componen ahora la opacidad de objetos y grupos mediante Forms de transparencia vectorial aislados, conservan el alfa independiente de relleno y trazo y mantienen el comportamiento anidado de recursos, recortes, máscaras y enlaces bajo presupuestos explícitos

Version 2.796.0

Added

  • Expone a través de jobs JSON y la C ABI la conversión acotada a PDF/A-4 ráster para archivado, con aceptación explícita de la pérdida de información, fallos de presupuesto estructurados, cancelación cooperativa, restauración del estado del origen y salida atómica de archivos

Version 2.795.0

Added

  • Los PDF cargados se normalizan ahora en documentos PDF/A-4 ráster validados, con renderizado nativo estricto, color sRGB verificado, decodificación y recursos ráster acotados, cancelación, protección de los alias del origen y publicación atómica de archivos; el informe de conversión identifica el contenido interactivo y adjunto eliminado deliberadamente

Version 2.794.0

Changed

  • La importación HTML5 usa ahora 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 imagen de la LCL

Version 2.793.0

Changed

  • Añade eventos acotados de adición y eliminación dinámica de instance-managers XFA y de presencia de plantillas, con reenlace del layout, conservación del estado de edición, rollback atómico, límites de recursos y salida XDP persistente

Version 2.792.0

Changed

  • Amplía la importación SVG con fuentes Unicode incrustadas medidas, recursos PNG/JPEG, trazos degradados y soft masks Alpha y Luminosity reales, y corrige el alfa nativo de grupos y la composición de superficies bitmap en FPC

Version 2.791.0

Changed

  • Añade reemplazo previsualizable de texto Unicode en documentos cargados con fuentes incrustadas, políticas de ajuste de línea y de ancho, diagnósticos por coincidencia, detección de planes obsoletos, recursos acotados, commits atómicos y operaciones de previsualización y aplicación por JSON y C ABI

Version 2.790.0

Changed

  • Implementa en el renderizado de glifos las operaciones estándar de pila y de arrays transitorios de CFF Type 2 y conserva las dependencias de subrutinas locales y globales derivadas por aritmética durante el subsetting de fuentes

Version 2.789.0

Changed

  • Amplía la decodificación de códigos de barras incorporada 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 soporta ahora TIFF nativo, conversión JPEG/JPX e ICC, JBIG2 y Zopfli mediante un puente de codecs validado por ABI, y usa threads de trabajo reales para el renderizado de páginas, de páginas ordenadas, de tiles, de bandas y de 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 comparten ahora operaciones de documento 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 archivo atómicas; las entradas multipágina de los callbacks se cargan correctamente

Version 2.786.0

Changed

  • La edición de FreeText cargados reconstruye ahora atómicamente las apariencias incrustadas Unicode y de texto enriquecido, 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, así que el rollback de la transacción restaura el texto original

Version 2.785.0

Added

  • El demo de consola SearchableOCR añade 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 hacen ahora rollback de las actualizaciones anteriores de campos y anotaciones tras un fallo de importación, respetan las transacciones propiedad del llamador y limpian los metadatos de resultado del intercambio fallido

Version 2.782.0

Added

  • El adaptador local de OCR Tesseract acepta segmentación de página configurable, modo del motor de reconocimiento, límites de píxeles y timeouts a través de THPDFTesseractOptions para el 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, evitando que la longitud de las palabras verticales infle los tamaños de texto del PDF buscable

Version 2.781.0

Changed

  • Las colecciones de demos de Delphi y C++Builder incluyen ahora una guía de campos de códigos de barras de varias páginas con etiquetas de negocio y un manual completo de navegación con marcadores jerárquicos, destinos nombrados y enlaces funcionales a documentos acompañantes; las recetas mínimas de PDF/A se trasladan a Miscellaneous y los proyectos redundantes independientes de contornos y metadatos se retiran

Version 2.780.1

Fixed

  • La página de anotaciones del Showcase separa los rótulos de vista previa de contenido de las apariencias reales de free-text y de stamps, evitando etiquetas superpuestas en los lectores de PDF y manteniendo los ejemplos identificables cuando las apariencias de las anotaciones están ocultas

Version 2.780.0

Changed

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

Version 2.779.0

Added

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

Version 2.778.1

Removed

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

Version 2.778.0

Changed

  • Los demos de páginas e informes de cliente ofrecen ahora flujos de trabajo prácticos: PageOperations edita PDFs reales mediante comandos extract, delete, move, insert y append con verificación al recargar, mientras que DBTable usa el motor de tablas para filas con ajuste, cabeceras repetidas y paginación automática con un ejemplo por defecto sin base de datos

Version 2.777.1

Fixed

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

Version 2.777.0

Fixed

  • El OCR incorporado trata las páginas en blanco o no reconocidas como resultados vacíos con éxito para que los lotes de documentos escaneados puedan continuar, conserva los píxeles de bitmap de Windows FPC y comprueba la cancelación y los límites de tiempo a lo largo del análisis de imagen
  • La clasificación de ángulos del RapidOCR nativo conserva las relaciones de aspecto de las líneas cortas y exige predicciones fiables de texto del revés antes de rotar los recortes de texto
  • El adaptador local de RapidOCR en Python conserva el espaciado de línea y la puntuación reconocidos en lugar de publicar caracteres sueltos 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 los PDF escaneados pueden reemplazar atómicamente los streams OCR de HotPDF marcados tras guardar y recargar, conservan las capas existentes cuando el reconocimiento falla o queda vacío, informan de las páginas reemplazadas y usan un ejemplo de consola nativo multilingüe de RapidOCR para convertir sin sobrescribir archivos existentes

Fixed

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

Version 2.775.0

Added

  • El RapidOCR nativo estrena 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 emparejados, instalación verificada de modelos, 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 la terminación del worker

Version 2.774.0

Added

  • Un adaptador DLL nativo de RapidOCR mantiene los modelos ONNX locales dentro del proceso, reconoce snapshots de bitmap sin Python, admite clasificación de ángulos opcional y PDF con texto buscable Unicode, y valida los presupuestos de salida con cancelación cooperativa en las compilaciones de Delphi, C++Builder y Windows FPC/Lazarus

Version 2.773.0

Added

  • El adaptador local de RapidOCR estrena 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 PDF con texto buscable Unicode en las compilaciones de Delphi, C++Builder y FPC/Lazarus

Version 2.772.1

Fixed

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

Version 2.772.0

Added

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

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 de 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 con los PDF que no se pueden leer y rechazan los argumentos de comando no válidos, en lugar de informar de una inspección vacía con éxito

Version 2.770.174

Fixed

  • LoadedImageExport valida todos los destinos de imagen antes de exportar cualquier página, de modo que los alias de ruta no pueden sobrescribir el PDF de entrada u otra página seleccionada, y rechaza los nombres de formato no admitidos

Version 2.770.173

Fixed

  • La caché en disco de páginas renderizadas omite las carpetas de documentos vinculados durante la recuperación, la búsqueda, el almacenamiento, la invalidación y el desalojo, preservando así los archivos que están fuera de la caché

Version 2.770.172

Fixed

  • Los jobs JSON rechazan la sintaxis mal formada, el contenido sobrante al final, los números fuera del rango finito de Double y el anidamiento excesivo antes de ejecutar cualquier operación, y liberan los valores parcialmente parseados cuando fallan

Version 2.770.171

Fixed

  • PreflightCLI comprueba el plan completo de salidas de informes antes de escribir, protegiendo los PDF de entrada de los alias de archivo y rechazando los destinos de informe en conflicto; los escaneos recursivos omiten los subdirectorios vinculados para evitar ciclos

Version 2.770.170

Fixed

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

Version 2.770.169

Fixed

  • Los valores de los jobs JSON conservan los caracteres null escapados, serializan números finitos fuera del rango de 64 bits con signo sin desbordamiento de enteros y devuelven los valores por defecto de los 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 corchetes de cierre sueltos en cuerpos de array sin corchetes y conserva los números válidos y las claves de diccionario situadas justo después de delimitadores mal formados

Version 2.770.167

Fixed

  • HotPDFCLI rechaza las rutas de salida que son alias de los archivos de entrada y comprueba todas las rutas generadas antes de comenzar la exportación por lotes, de modo que los comandos no pueden truncar ni reemplazar sus datos de origen

Version 2.770.166

Fixed

  • El ejemplo ExtractText protege su PDF de entrada cuando una salida usa una junction de directorio o un hard link, y LoadedImageExport informa de fallo con los documentos ilegibles o las 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 con seguridad los rangos de read-ahead cerca del límite de offset de 64 bits con signo

Version 2.770.164

Fixed

  • La decodificación RunLength asigna solo el tamaño del payload decodificado y valida los runs mal formados antes de asignar la salida, evitando reservas de memoria excesivas 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 con ellos tanto en las carpetas de proyecto como en directorios de salida de compilación anidados

Version 2.770.162

Fixed

  • Los ejemplos HugeFileBenchmark rechazan las rutas de los PDF generados que coinciden con algún documento de entrada antes de iniciar un lote de benchmark
  • El ejemplo de C++Builder conserva los subdirectorios de entrada relativos para los PDF 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 no válidas de cero páginas producen ahora un código de salida distinto de cero, conservando el informe de benchmark

Version 2.770.161

Fixed

  • Las CLI de Preflight de Delphi y C++Builder rechazan las rutas de salida de informes y agregados que coinciden con un PDF de entrada, evitando que los informes 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 admitido en lugar de aceptar un número de tag desbordado

Version 2.770.159

Fixed

  • La CLI de Preflight de C++Builder conserva los subdirectorios relativos para los informes recursivos y los enlaces del dashboard, así que los PDF con el mismo nombre ya no se sobrescriben entre sí
  • Los dashboards de Preflight de Delphi y C++Builder codifican correctamente los enlaces de informes con caracteres especiales y nombres de directorio no ASCII
  • Los fallos de validación estándar de C++Builder devuelven ahora el código de salida 3 y aparecen como no válidos en el dashboard con todos los formatos de informe, incluidas las entradas que no llegan a cargarse

Version 2.770.158

Fixed

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

Version 2.770.157

Fixed

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

Version 2.770.156

Fixed

  • La compresión de streams LZW informa del número real de bytes escritos con una entrada vacía
  • La compresión y la descompresión LZW hacen el round-trip correctamente con InitialCodeSize a 2, y la compresión rechaza los literales fuera de un alfabeto reducido antes de escribir la salida

Version 2.770.155

Fixed

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

Version 2.770.154

Fixed

  • DecodeLoadedPageBarcodes informa ahora de los límites correctos de los códigos de barras en las páginas cuyo CropBox difiere del MediaBox cuando no se ha establecido región de decodificación; 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 activada) caen ahora sobre los rostros detectados en tales 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 remapean las posiciones detectadas a través de esa misma área; el page box que se pasa a un IHPDFFaceDetector personalizado coincide ahora 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 coincide con el MediaBox, quedan igual

Version 2.770.153

Fixed

  • ApplyLoadedOCRTextLayer coloca ahora correctamente la capa de texto invisible en las 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 OCR se renderiza desde el área visible de la página (el CropBox recortado al MediaBox), y las posiciones de las palabras reconocidas se remapean ahora 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, en correspondencia con el bitmap que recibe
  • Las páginas sin CropBox, o cuyo CropBox coincide con el MediaBox, quedan igual

Version 2.770.152

Fixed

  • GetLoadedInvoiceSummary devuelve ahora el nombre del comprador (BT-44) como texto decodificado, así que los nombres con letras no ASCII como "Müller & Söhne" ya no vuelven como bytes UTF-8 en crudo con el escape XML todavía en su sitio
  • El nombre del comprador se lee ahora siempre de la parte comercial del comprador propiamente dicha, al 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 se compara ahora con el texto visible de la página tal cual está escrito

Version 2.770.151

Fixed

  • THPDFTable mantiene ahora en una misma página las filas atadas entre sí por un RowSpan: cuando el grupo no cabe en el espacio restante, el grupo entero 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 con row-span más alto que una página entera sigue partiéndose fila a fila, con sus celdas de expansión cortadas en el margen inferior de cada página
  • TotalHeightRendered refleja el grupo trasladado en la última página

Version 2.770.150

Fixed

  • Las celdas de THPDFTable con un ColSpan o un RowSpan de cero o menos se dibujan ahora como celdas simples, tal como las dejó colocadas 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 sobrepasan la última columna o fila se cortan en el borde de la tabla también al medir y al 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 necesita el texto ajustado

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 las entidades internas se limita a 16 MB por documento
  • Un valor de una sola entidad interna de más de 1 MB se rechaza
  • Los documentos que superan cualquiera de los dos límites fallan al cargar con un EHPDFXFAError en lugar de expandirse hasta gigabytes de texto; el uso ordinario de entidades no se ve afectado
  • El texto con muchas referencias a entidades o a caracteres también se decodifica en tiempo lineal

Version 2.770.148

Fixed

  • RecalculateLoadedFormFieldsIncremental trata ahora igual todos los campos que se le pasan como cambiados, sea cual sea el orden en que se listan los nombres
  • Un campo calculado que se escribió directamente junto con uno de sus campos de origen conserva el valor escrito en lugar de recalcularse solo cuando se lista después de ese origen
  • 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 (tipo 20 de THPDFBarcode) codifican ahora sus datos en el code set A, como hace Code 128 A
  • Las letras minúsculas en tales códigos de barras se escriben ahora con un SHIFT al code set B en lugar de un codeword del set B que los escáneres leen como un carácter de control del set A
  • Así, los símbolos GS1-128 A escaneados que contienen texto en minúsculas devuelven el texto original

Version 2.770.146

Fixed

  • Los códigos de barras add-on EAN-2 y EAN-5 (tipos 18 y 19 de THPDFBarcode) ya no añaden un dígito calculado a Text cuando Checksum está activado
  • Dibujar uno de estos códigos de barras repetidamente produce ahora 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 comprobación por definición, así que Checksum se ignora en ellos; el patrón de paridad se sigue derivando del valor como hasta ahora

Version 2.770.145

Fixed

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

Version 2.770.144

Fixed

  • Los nombres y el resto del texto del resumen de factura se decodifican ahora del XML de factura en UTF-8, así que un vendedor como "Müller GmbH" ya no vuelve con caracteres multibyte ilegibles
  • Los caracteres de marcado escapados y las referencias a caracteres se resuelven, de modo que "A & B" en el XML se informa como "A & B"
  • ValidateVisualXmlConsistency ya no informa de que falta en el texto visible de la página un nombre de vendedor con letras acentuadas o un ampersand cuando está impreso en ella
  • El texto del resumen se devuelve en la code page ANSI del sistema, ya que los campos del record de resumen son strings ANSI; los caracteres que esa code page no puede representar se convierten en interrogantes

Version 2.770.143

Fixed

  • GetLoadedInvoiceSummary informa ahora del total neto a nivel de factura (BT-106) a partir de la sumación monetaria del encabezado, en lugar del importe de la primera línea
  • El total de impuestos, el total general y el importe pendiente se leen igualmente de la sumación del encabezado, también en las facturas ZUGFeRD 1.0
  • La fecha de emisión (BT-2) se devuelve ahora como el valor de fecha en claro, por ejemplo 20260305, en lugar de incluir el marcado DateTimeString anidado
  • HPDFFacturXXMLElementText devuelve ahora los datos de carácter del elemento completo sin los tags hijos, y ya no hace coincidencia con elementos cuyo nombre solo empieza por el nombre solicitado

Version 2.770.142

Fixed

  • La exportación XFDF escribe ahora los caracteres fuera del Basic Multilingual Plane, como emojis o ideogramas CJK poco frecuentes, como UTF-8 válido de cuatro bytes en lugar de codificar cada mitad surrogate por separado, de modo que los lectores XML estrictos aceptan el archivo
  • La importación XFDF decodifica ahora 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 al exportar, se convierten ahora en U+FFFD en lugar de corromper el texto
  • Los archivos XFDF escritos por versiones anteriores siguen importándose 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, sobreviven ahora sin cambios a una exportación e importación XFDF, en lugar de ver sus secuencias de dígitos convertidas en caracteres de control
  • Cuando un backslash se volvería a leer como un escape, la exportación XFDF lo escribe ahora como el escape octal \134, como en un string 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 tal cual
  • El texto SVG leído a través del mismo lector XML ligero tampoco pierde ya las secuencias de backslash

Version 2.770.140

Fixed

  • La caché persistente de páginas renderizadas que activa RenderCacheFolder funciona ahora con los documentos abiertos con LoadFromFile, LoadFromStream y LoadFromRandomAccessSource; antes el nivel de disco se saltaba en las cargas ordinarias, así que nunca se escribía ni se leía página alguna de la carpeta
  • Los documentos cargados desde un archivo se identifican por su tamaño, su hora de última escritura y sus bytes iniciales y finales, así que reabrir un archivo sin cambios lee sus páginas de la caché sin hashear el archivo entero
  • Los documentos cargados desde un stream o una fuente de acceso aleatorio se identifican por el SHA-256 de su contenido; establezca 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 durante el resto de esa carga, así que las páginas editadas nunca se sirven desde las páginas cacheadas del archivo original ni se almacenan como ellas
  • Las entradas de disco dependen ahora también del backend de renderizado de páginas y del flujo de proofing ICC, de modo que un backend o un perfil de salida distinto no reutiliza páginas renderizadas con otros ajustes; los documentos cifrados nunca se escriben en la caché de disco

Version 2.770.139

Fixed

  • Importar archivos XFDF grandes ya no se ralentiza con el cuadrado del tamaño del archivo: uno con miles de campos o anotaciones se parsea ahora en milisegundos en lugar de en segundos o minutos
  • Los valores de campos con muchos saltos de línea u otras referencias a caracteres 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 a través del 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 que se entrega al decodificador se gira ahora en sentido horario, como documenta AttemptRotationDegrees
  • Los símbolos hallados solo en esos reintentos se informan ahora en su posición real en la página en lugar de en la posición reflejada especularmente
  • La orientación informada de tales símbolos coincide ahora 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 se apoyan en el giro horario documentado reciben ahora rasters girados correctamente

Version 2.770.137

Fixed

  • Copiar páginas entre documentos (CopyPageFromDocument, CopyPageByPhysicalIndex, importación de páginas y métodos de fusión) ya no convierte en diccionarios o arrays los strings de texto que contienen "<<" y ">>" o "[" y "]"; un comentario de anotación como "Read <<this>> [now]" se copiaba como un diccionario roto
  • Los strings hexadecimales, como los nombres y los identificadores de anotaciones, se copian en su forma hexadecimal en lugar de escribirse como strings 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 anotación de THPDFPage) escriben ahora /Rect con la esquina inferior izquierda primero, [llx lly urx ury]; varios de ellos escribían el borde superior antes que el inferior, por ejemplo [395 712 575 652], cosa 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 es ahora un string (UnicodeString en Delphi 2009 y posteriores, UnicodeString en C++Builder) en lugar de un AnsiString, de modo 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 interrogantes
  • 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 escribe ahora el rango de zoom como los números /min y /max, tal como los define la especificación PDF; todo el valor se escribía como un string de texto bajo /Min, que los visores ignoran, así que el rango de zoom de la capa no tenía ningún efecto
  • El valor de Zoom es la ampliación mínima seguida opcionalmente de la máxima, separadas por un espacio (por ejemplo '0.5 4'); un valor que no empieza por un número lanza ahora una excepción

Version 2.770.133

Fixed

  • El subsetting de fuentes CFF/OpenType incrustadas ya no descarta subrutinas que los glifos siguen usando; los glifos con más de ocho hints, hints hstemhm o counter masks se escaneaban incorrectamente, de modo que una subrutina en uso podía sustituirse por una vacía y el glifo renderizarse con contornos ausentes o rotos

Version 2.770.132

Fixed

  • RegisterNChannelColorSpace (la sobrecarga con definiciones de colorantes spot) escribe ahora 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 de la misma manera sus claves de colorantes de solidity y de datos espectrales

Version 2.770.131

Fixed

  • Los metadatos XMP escritos con EnableXMPMetadata llevan ahora 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 que el packet fuera XML inválido, cosa 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 añade símbolos que las anteriores no usaron; tales páginas seguían refiriéndose al stream de globals de la primera página, que carece de los nuevos símbolos, así que los visores las mostraban corruptas o directamente no las mostraban
  • Cada vez que una página añade símbolos se escribe un stream de globals con el diccionario completo hasta esa página y se usa a partir de entonces; las páginas que no añaden 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 escribe ahora números de objeto coherentes: una reescritura completa (SaveLoadedDocument y métodos relacionados) escribe cada objeto, referencia y entrada de cross-reference con generación 0, mientras que antes los encabezados de objeto y el trailer conservaban la generación antigua al tiempo que las referencias y la tabla de cross-reference usaban 0
  • Las actualizaciones incrementales (SaveIncrementalUpdate y métodos relacionados) se refieren ahora a los objetos existentes con su número de generación real; las referencias siempre se escribían con generación 0 y por tanto 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 negrita o cursiva, su fuente, su tamaño, su offset de sub/superíndice y su enlace. Cada run conserva ahora su propio formato en la línea nueva

Version 2.770.127

Fixed

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

Version 2.770.126

Fixed

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

Version 2.770.125

Fixed

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

Version 2.770.124

Fixed

  • GetLoadedTrailerID devuelve ahora 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 informaba de identificador para prácticamente ningún archivo

Version 2.770.123

Fixed

  • SetLoadedOpenActionPage escribe ahora un destino que nombra la página solicitada; la referencia de página se escribía como 0 0 R, de modo 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 escribe ahora 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 ningún efecto

Version 2.770.121

Fixed

  • CheckLoadedSignatureSeedValue aplica ahora el valor seed /Reasons de un campo de firma cuando los flags /Ff del campo lo marcan como obligatorio (bit 4, valor 8); antes una razón no listada pasaba
  • Las razones se comparan de forma exacta, como los strings 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 da ahora a cada estampa su propia opacidad, y a cada estampa de texto su propia fuente estándar; la segunda estampa y las siguientes reutilizaban la transparencia y la fuente de la primera estampa de la página
  • Una estampa con la misma opacidad y fuente que una anterior sigue compartiendo sus recursos, de modo que las estampas idénticas repetidas no hacen crecer los recursos de la página

Version 2.770.119

Fixed

  • ExtractLoadedPageStructureText sigue ahora 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 los PDF etiquetados; tales elementos se ignoraban, así que el método no informaba de orden de estructura en muchos documentos etiquetados o devolvía su texto en orden de dibujo
  • El método ya no lee una entrada de catálogo no vá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; les daban a tales páginas un diccionario /Resources nuevo y vacío, que ocultaba las fuentes y las imágenes heredadas, de modo que el texto y las imágenes originales de la página dejaban de mostrarse
  • La página recibe ahora su propia copia de los recursos heredados antes de añadir la nueva fuente, imagen o form

Version 2.770.117

Fixed

  • ComposeLoadedPagesNUp, ImposeLoadedPagesNUp, ImposeLoadedPagesBooklet y los métodos de stitching de páginas trasladan ahora los recursos que una página de origen hereda de su nodo /Pages padre; tales páginas se colocaban sin sus fuentes ni sus 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 ya puede escribir de vuelta al archivo desde el que se inició la actualización incremental; la actualización aceptada no podía reemplazar el destino porque el documento seguía manteniendo el origen abierto, y la llamada fallaba siempre con un error de commit por acceso denegado
  • Al igual que con un SaveIncrementalUpdate in situ, el origen se libera antes del reemplazo, se reabre si el reemplazo falla, y hay que volver a llamar a BeginIncrementalUpdate antes de otro guardado incremental

Version 2.770.115

Fixed

  • RepairPDFUA2Structure ya no tarda un 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 la herencia de idioma, la reparación del orden de encabezados y el escaneo de marked-content que hay detrás de la reparación de texto alternativo recorren ahora cada elemento de estructura una sola vez. Un árbol manipulado de 24 elementos en el que cada uno lista dos veces el siguiente tardaba antes unos 40 segundos

Version 2.770.114

Fixed

  • HPDFPaginateTable ya no añade páginas hasta agotar la memoria cuando una fila indivisible no cabe debajo de las filas de encabezado repetidas; en una página que solo contiene encabezados repetidos, la fila ahora se parte (o, cuando los encabezados llenan la página, se coloca y se deja que desborde)
  • HPDFLayoutFootnotes y HPDFLayoutEndnotes ya no entran en un bucle infinito cuando el separador no deja sitio en una página o la altura mínima de fragmento de una nota no se puede cumplir 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 columna; pasaba a la siguiente columna eternamente. Una línea así se coloca ahora 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 security handler estándar 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"
  • Para tales documentos se acepta cualquier valor de /Length de nivel superior, ya que la clave del archivo siempre es de 128 bits

Version 2.770.111

Fixed

  • ProcessObjectStreamsForDecompression y ExtractRawObjectFromStream ya no se fían del conteo /N declarado de un object stream: un conteo por encima de diez millones se rechaza y el conteo se limita a los pares de números de objeto que el encabezado del stream puede albergar de verdad, de modo que un archivo manipulado ya no puede hacer que asignen o recorran millones de entradas vacías

Version 2.770.110

Fixed

  • La Direct File API (DADirectEncryptFileAES256, DADirectDecryptFileAES256 y métodos relacionados) lee ahora /Root, /Info, /Encrypt, /Prev y /XRefStm de una sección de cross-reference clásica únicamente del diccionario trailer de la propia 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 vuelve a una sección ya leída se detiene ahora en lugar de leer otra vez las mismas secciones

Version 2.770.109

Security

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

Version 2.770.108

Changed

  • GetLoadedOCGCount, GetLoadedOCGName, GetLoadedOCGVisibility y SetLoadedOCGVisibility usan ahora todos el mismo índice: la posición del grupo de contenido opcional 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 informa ahora de un grupo como oculto cuando está listado en /OFF, o cuando no está en ninguno de los dos arrays y el /BaseState de la configuración por defecto es /OFF

Fixed

  • SetLoadedOCGVisibility ya no mete 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 reemplazarse la entrada de destino, lo que podía corromper la memoria
  • La página de destino recibe ahora su propia referencia al contenido y a los recursos del origen (los valores directos se copian), y su entrada en la 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 palabra clave endstream, o uno cuyo diccionario o datos no se pueden cargar; abrir repetidamente tales archivos hacía crecer el proceso 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 entero, dejando la página en blanco
  • Los números con un signo más delante, con una parte entera vacía como ".5", o con una parte entera fuera del rango de 32 bits también se leen correctamente

Version 2.770.104

Fixed

  • Demo PDFmerge: con los marcadores activados, cada marcador por origen abre ahora la primera página fusionada de ese origen; antes todos los marcadores apuntaban a la primera página del archivo fusionado
  • Demo PDFmerge: las fuentes de muestra por defecto y el nombre de salida, y cualquier nombre relativo tecleado en el formulario, se resuelven contra la carpeta del demo; añadir 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 usa ahora de verdad streams de contenido comprimidos, como prometen los comentarios del demo; establece Compression a cmFlateDecode en lugar de fiarse del argumento de BeginDoc, que no controla la compresión

Version 2.770.102

Fixed

  • Las imágenes dibujadas con AlphaBlend en un metafile mejorado conservan ahora 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, de modo 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, se omiten ahora 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 por completo

Version 2.770.101

Fixed

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

Version 2.770.100

Fixed

  • Los Form XObjects se recortan ahora a su /BBox al renderizar, como exige ISO 32000-1; el contenido que un form dibuja fuera de su bounding box ya no aparece en la página
  • Los Form XObjects anidados a más de cuatro niveles de profundidad se dibujan ahora; se descartaban como si estuvieran recursando. 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 de cada página de texto se traza ahora, 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 informados del PDF de texto cambian ligeramente como consecuencia

Version 2.770.98

Fixed

  • Los strings literales que contienen paréntesis equilibrados sin backslashes, como /Title (Report (draft) v2), se leen ahora completos al cargar un documento; el string acababa 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 de string o de name contiene las letras "stream" al final de una línea, como un diccionario Info con /Title (Livestream); el objeto se leía como un stream y se perdían sus entradas
  • La palabra clave stream ahora solo se reconoce como token propio tras el >> de cierre del diccionario y al final de una línea, tal como la especificación PDF define los objetos stream

Version 2.770.96

Fixed

  • Demo Stamp: los archivos PNG y BMP que ofrece el selector de imágenes ya se pueden usar como sello de imagen; antes solo funcionaba JPEG y los demás archivos fallaban con un error de bitmap no válido
  • Demo Stamp: la anotación de sello de goma se coloca en la zona superior derecha de cada página como estaba previsto, debajo de un sello de imagen de la esquina superior, en lugar de la esquina inferior derecha, donde se solapaba con un sello 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 peticiones de timestamp construidas con un OID de política (HPDFRFC3161BuildRequest, y firmar con una política de autoridad de timestamp) codifican ahora la política solicitada como el object identifier en claro que especifica RFC 3161
  • La política antes se envolvía en un context tag que RFC 3161 reserva para extensiones de la petición, de modo que una autoridad de timestamp estricta rechazaba la petición o ignoraba la política
  • Las peticiones sin OID de política quedan igual

Version 2.770.94

Fixed

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

Version 2.770.93

Fixed

  • Demo FileAttach: las anotaciones de adjunto a nivel de página se crean ahora cuando el demo se ejecuta 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 sencillo en lugar de por una ruta absoluta

Version 2.770.92

Fixed

  • Demo HTMLText: una ruta de salida con caracteres fuera de la code page ANSI del sistema (por ejemplo un nombre de carpeta en griego o cirílico) se escribe ahora correctamente en lugar de fallar
  • Demo HTMLText: el PDF generado ya no se abre automáticamente en un lector externo, en línea con 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, ni con números largos combinados con un exponente grande; tales valores se rechazan como cualquier otro número fuera de rango
  • Afecta a las imágenes SVG colocadas a través de las APIs de importación SVG y a la geometría de rutas XPS, en los compiladores cuyas excepciones de coma flotante no están enmascaradas
  • Los números ordinarios, incluidas las mantisas largas con exponentes negativos, se leen como hasta ahora

Version 2.770.90

Fixed

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

Version 2.770.89

Fixed

  • Demo CJKAnnotations: cuando Arial Unicode MS no está instalada, el demo ahora sí recurre a Microsoft YaHei; comprueba las fuentes instaladas en lugar de esperar una excepción que una fuente ausente 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, de modo que el texto y los gráficos tras el 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 tales páginas
  • Los estados guardados crecen ahora con la profundidad del anidamiento; un anidamiento muy profundo sigue emparejándose correctamente

Version 2.770.87

Fixed

  • ImageDemo: el marcador "Image zoom" salta ahora al encabezado IMAGE ZOOM en lugar de a un punto cerca del final 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) borra ahora el shared secret en bruto y los buffers intermedios de derivación de clave tan pronto como dejan de hacer falta, incluso 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 necesaria

Version 2.770.85

Security

  • Trazar el contorno de un glifo Type 1 cuyo charstring usa sbw con demasiado pocos operandos ya no lee por delante 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 se toma ahora de la longitud de sus strings 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 los códigos de dos bytes al renderizar y extraer texto
  • Los rangos de codespace cargados de CMaps incorporados llevan también su longitud de código

Version 2.770.83

Fixed

  • Incrustar 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 tal transformación se leía mal, así que podía desaparecer del subconjunto o tener su referencia de glifo escrita sobre los bytes de la transformación
  • Los glifos compuestos cuyos componentes se remiten entre sí en un ciclo, remiten más allá del conteo de glifos de la fuente o apuntan a un glifo vacío ya no provocan un crash ni cuelgan el subsetting de fuentes
  • En un subconjunto, un glifo compuesto anidado dentro de otro compuesto renumera sus referencias de componente una vez en lugar de dos

Version 2.770.82

Fixed

  • Los números reales de los diccionarios de fuentes CFF (FontMatrix, FontBBox, valores blue y similares) se leen correctamente cuando un byte contiene un signo, un punto decimal o un exponente junto a un dígito; el dígito del mismo byte se perdía, así que -2.25 se convertía en -0.5
  • Estos valores se parsean con punto como separador decimal, sean cuales sean las opciones regionales 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 un string multicarácter obsoleto para los códigos de una entrada de array beginbfrange que sigue a otra entrada de array con destinos multicarácter; tales códigos se mapean ahora a su propio carácter único

Version 2.770.80

Fixed

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

Version 2.770.79

Security

  • AddTiffFromFile rechaza ahora una página TIFF cuyo ancho por alto necesite un raster de más de 2 GB, lanzando una excepción en lugar de asignar un buffer cuyo tamaño había dado la vuelta y dejar que el decodificador escribiera más allá de su final (heap overflow)
  • Una página TIFF de ancho o alto cero se rechaza de la misma manera
  • Las páginas TIFF altas (1200 filas o más) informan ahora de un fallo de asignación en lugar de decodificarse hacia un buffer nil

Version 2.770.78

Fixed

  • Los glifos de fuentes Type 3 siguen ahora la escala horizontal (Tz): un run dibujado al 200 % de escala horizontal se dibuja el doble de ancho en lugar de a su anchura natural
  • Los glifos de fuentes Type 3 siguen ahora la elevación del texto (Ts), así que los superíndices y subíndices puestos en fuentes Type 3 se elevan o se 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 construidas por HPDFRFC3161BuildRequest codifican siempre el nonce como un DER INTEGER mínimo; cuando el nonce aleatorio empezaba por un byte 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 los llamadores que 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 una etiqueta de autenticación válida se acepta ahora, mientras que una etiqueta manipulada sigue rechazándose

Version 2.770.76

Fixed

  • Demo Hyperlink: los rótulos de enlaces y las URL con caracteres fuera de la code page ANSI del sistema (por ejemplo texto griego, cirílico o acentuado) ya no se convierten en interrogantes; los rótulos se dibujan como texto Unicode con un enlace URI colocado encima
  • Demo Hyperlink: los caracteres no ASCII de una URL se codifican en porcentaje como UTF-8 antes de guardarse en la action del enlace, así que los lectores abren la dirección prevista

Version 2.770.75

Fixed

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

Version 2.770.74

Fixed

  • Las reescrituras de la Direct File API (por ejemplo DADirectEncryptFileAES256 y DADirectDecryptFileAES256) en varios hilos a la vez ya no se corrompen la salida unas a otras; la copia por byte ranges que comparten usaba un buffer de todo el proceso

Version 2.770.73

Fixed

  • La caché de revocación compartida de THPDFSignatureValidationBatch encuentra ahora las respuestas OCSP de certificados de firmante cuyo número de serie tiene el bit superior a 1; tales respuestas se guardaban bajo un serial sin el byte cero inicial y se buscaban con él, así que toda firma posterior perdía la caché
  • Las respuestas OCSP firmadas por un responder delegado, o que identifican al responder por key, se guardan ahora bajo el emisor del certificado y pueden reutilizarse por firmas posteriores del lote; antes se guardaban bajo el nombre del responder o no se guardaban
  • Las firmas que se apoyan en evidencia guardada en caché por una firma anterior del mismo lote llegan ahora 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 incrustado por nombre (GetLoadedEmbeddedFileSpec, ExtractEmbeddedFileBytes, SaveLoadedEmbeddedFileToDisk y métodos relacionados) ya no desborda la pila cuando el árbol de nombres /EmbeddedFiles del documento tiene nodos que se listan entre sí o a sí mismos como /Kids
  • Cada nodo del árbol de nombres se busca una vez, así que los nombres alcanzables a través de un nodo compartido se siguen encontrando

Version 2.770.71

Fixed

  • Demo PageSizes: las páginas de los formatos chinos 8K y 16K imprimen ahora su descripción completa en cualquier sistema; 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 interrogantes en las code pages no CJK

Version 2.770.70

Fixed

  • Los shadings axiales (Type 2) cubren ahora toda el área pintada cuando el eje del shading queda lejos de ella, por ejemplo un degradado definido fuera del borde de la página con /Extend [true true]; tales áreas se quedaban sin pintar
  • Se 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 named destinations chapter-1 y chapter-2 abren ahora sus páginas arriba, 60 puntos por debajo del borde superior, en lugar de hacer scroll hasta el final de la página; las coordenadas de destino están en el espacio de usuario por defecto del PDF, con el origen abajo a la izquierda

Version 2.770.68

Fixed

  • La extracción de texto de un PDF con una fuente TrueType incrustada ya no se queda minutos atascada cuando el cmap de la fuente está truncado pero dice tener miles de segmentos o grupos; la longitud de la tabla se comprueba ahora antes de leer los segmentos y los grupos
  • Construir el mapa de glifo a Unicode de una fuente TrueType incrustada recorre cada subtabla cmap una vez por segmento o grupo en lugar de buscar los 65.535 code points BMP uno a uno, lo que también acelera la extracción con fuentes CJK grandes
  • Las búsquedas de glifos a través de una subtabla cmap de formato 4 o formato 12 truncada se detienen al final de los datos de la fuente en lugar de recorrer segmentos que no están

Version 2.770.67

Fixed

  • Las funciones exponenciales (Type 2) y de stitching (Type 3) respetan ahora un /Domain de una entrada como [0 0.5]; se ignoraba y se sustituía por [0 1], así que las entradas se recortaban al intervalo equivocado
  • Una función exponencial sin /C1 usa ahora el valor por defecto [1.0]; los colores Separation y los shadings definidos así se renderizaban en negro
  • Las funciones exponenciales evalúan ahora C0 + x^N (C1 - C0) con la propia entrada en lugar de reescalarla a 0..1, conforme a ISO 32000-1 para dominios distintos de [0 1]
  • Las salidas de las funciones exponenciales se recortan al /Range solo cuando está presente; los spot colours con un espacio alternativo Lab (L* hasta 100) se recortaban a 0..1 y se renderizaban casi negros
  • 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 coma 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 abren ahora con una contraseña vacía en HPDFParsePFX, HPDFParsePFXByLocalKeyID, HPDFEnumeratePFXIdentities y los métodos de firma PFX; antes fallaban con un error de autenticación
  • Con una contraseña vacía se prueba primero el encoding estándar de RFC 7292 y en segundo lugar la forma de longitud cero, tanto en la comprobación de integridad como en el descifrado de la clave, así que los archivos que ya abrían siguen abriendo igual

Version 2.770.65

Fixed

  • La cabecera de página del demo DBTable de C++Builder dice ahora "Page 1" en lugar de "Page1"
  • Un error mientras el demo DBTable de C++Builder escribe su tabla cierra ahora 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 cambian a la carpeta del ejecutable al arrancar sin argumentos, como los demos Delphi, así que sus archivos de entrada se encuentran y sus PDF se escriben allí 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 no relacionadas
  • El demo ImageMask de C++Builder funciona ahora como la versión Delphi: comprueba que Mask.bmp e Image.jpg existen, comprime su salida, no abre visor y informa de los errores en lugar de terminar con una excepción no manejada
  • El demo EmfDraw de C++Builder informa de un error, por ejemplo un Sample.emf que falta, 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 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 Delphi y el readme, en lugar de Output.pdf en el directorio de trabajo, y guarda su adjunto FileAttach.txt en la misma carpeta

Version 2.770.62

Fixed

  • La Direct File API (DADirectEncryptFileAES256, DADirectDecryptFileAES256 y los demás métodos de reescritura directa) lee ahora correctamente los offsets de cross-reference stream por encima de 2 GiB; tales offsets se truncaban y se 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 por encima de 2 GiB en el trailer o en el cross-reference stream se siguen en lugar de leerse como 0, así que las revisiones antiguas y las secciones de referencias cruzadas híbridas de archivos grandes ya no se saltan
  • Lo mismo se 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 cross-reference stream cuyos anchos de campo /W son negativos o mayores de 8 bytes se rechaza ahora en lugar de decodificarse; la carga recurre a escanear el archivo en busca de sus objetos
  • Los métodos de la Direct File API (por ejemplo DADirectEncryptFileAES256) ya no leen memoria fuera de la tabla decodificada, y ya no pueden provocar un crash, con tal archivo; en su lugar lo rechazan

Version 2.770.60

Fixed

  • La extracción de texto, la búsqueda y las posiciones de glifo leen ahora correctamente el operador de texto ": su primer operando es el espaciado de palabra y el segundo el espaciado de carácter; estaban intercambiados
  • Las líneas escritas con " y un espaciado de palabra o de carácter distinto de cero ya no informan de posiciones de glifo desplazadas, lo que podía fusionar o partir palabras en el texto de página extraído 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 de "Group A" muestran ahora su elemento y su nota en las columnas Item y Notes; antes el texto de la nota se desplazaba una columna y se perdía
  • Demo Table: el PDF generado ya no se abre automáticamente en un lector externo, igualando a los demás demos de consola, y las rutas de salida fuera de la code page ANSI del sistema se conservan intactas

Version 2.770.58

Fixed

  • Descomprimir datos Flate hacia un stream ya no pierde el estado del decodificador (unos 40 KB cada vez) cuando el stream de origen o de 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 un string ya no pierde su buffer temporal si la compresión lanza una excepción
  • La compresión y descompresión con éxito se comportan exactamente como antes

Version 2.770.57

Fixed

  • Los certificados cuya extensión de restricciones de nombre no está marcada como critical ya se rechazan como ilegibles durante la validación del certificado de firma; un certificado de CA de ese tipo hacía que toda cadena que pasara por él no pudiera construirse
  • Las restricciones de tal certificado se aplican ahora al resto de la cadena como si fueran critical, así que los nombres de firmante fuera de los subárboles permitidos se siguen informando como una violación de restricción de nombre

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; tal función se trata como inservible y el color recurre al fallback como ante cualquier otra función no válida
  • El anidamiento 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 ordinarios se renderizan como antes
  • Evaluar funciones de calculadora necesita menos pila por nivel de anidamiento

Version 2.770.55

Fixed

  • Demo E-Invoice: el XML Factur-X / ZUGFeRD extraído se decodifica como UTF-8, así que los caracteres acentuados y demás caracteres no ASCII de nombres y direcciones ya no salen corruptos en el panel XML
  • Demo E-Invoice: en Delphi XE2 y posteriores, el veredicto combinado de la factura electrónica decide ahora 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: una discrepancia entre el texto visible y el XML del chequeo heurístico de consistencia se informa como advertencia y ya no invalida por sí sola la validación global

Version 2.770.54

Security

  • La verificación de firmas CMS (HPDFVerifyCMSSignature, HPDFVerifyCMSSignatureEx y las firmas PDF cargadas) informa ahora de una firma mal formada cuando los signed attributes carecen del atributo content-type o nombran un tipo de contenido distinto del contenido firmado, como exige RFC 5652; tales firmas solían verificarse como válidas, lo que permitía presentar unos signed attributes hechos para un tipo de contenido como si firmaran otro
  • Las firmas con el atributo content-type repetido se rechazan como antes
  • Las countersignatures, que por definición no llevan atributo content-type, y los tokens de timestamp RFC 3161 siguen verificándose como antes

Version 2.770.53

Fixed

  • Pulsar por segunda vez el botón del demo Annotations de C++Builder ya no escribe de nuevo el documento anterior antes de empezar el nuevo
  • Un error mientras el demo Annotations de C++Builder construye su PDF cierra ahora 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 comparten ahora 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 número de documentos y de tamaño total de la caché de renderizado en disco se aplican a todas las instancias que comparten carpeta, así que la carpeta ya no crece más allá de su presupuesto cuando varios visores o hilos de render la usan a la vez
  • La misma carpeta se reconoce con independencia de mayúsculas y minúsculas o de un delimitador de ruta final

Version 2.770.51

Fixed

  • Remuestrear un bitmap con el kernel bicúbico o Lanczos3 funciona ahora para cualquier formato de píxel de origen; una fuente de 32 bits, 8 bits o 1 bit se leía como si contuviera píxeles de 3 bytes, lo que mezclaba sus canales de color o leía más allá del final de sus filas
  • Tales orígenes se convierten primero a 24 bits, así que la imagen remuestreada tiene los mismos colores que la fuente; el resultado sigue siendo un bitmap de 24 bits como antes
  • Los orígenes de 24 bits y el kernel de medio tono no se ven afectados

Version 2.770.50

Fixed

  • Demo PreflightCLI: -d sobre un único PDF escribe ahora el índice del dashboard incluso cuando el archivo no pasa el preflight
  • Demo PreflightCLI: los archivos que lanzan un error durante el preflight se listan como fallidos en el índice del dashboard, y el código de salida refleja todos los archivos fallidos
  • Demo PreflightCLI: con -r, los informes de PDF 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 producen ahora el mismo esquema con o sin --profile / --preset / --aggregate, incluida la columna spec del CSV
  • Demo PreflightReport: los informes CSV generados con un profile rellenan ahora la columna spec como los informes sin él

Version 2.770.49

Fixed

  • El demo LargeFile de C++Builder genera ahora el conjunto de entrada de benchmark que describe su readme, como la versión 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; 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 escribe ahora Outlines.pdf junto al ejecutable, el archivo que nombra el readme, en lugar de Output.pdf en el directorio de trabajo, e informa de dónde se ha guardado en lugar de abrir un visor
  • El demo Outlines de C++Builder construye ahora el mismo documento de 10 páginas con etiquetas de página Arial que la versión Delphi; las etiquetas al pie de la página en y = 830 quedaban cortadas en el borde de la página y los marcadores "Bottom" de la última página apuntaban por debajo de ellas
  • Un error mientras el demo Outlines de C++Builder escribe el PDF ya no deja el demo incapaz de crear otro documento

Version 2.770.47

Fixed

  • La caché de renderizado en disco persistente funciona ahora bajo carpetas cuyos nombres contienen 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 allí y la caché nunca producía un acierto
  • THPDFDiskPageCache toma su carpeta raíz como string Unicode y mantiene todas las rutas de caché en Unicode, incluida la sustitución atómica de los archivos de página y del índice de caché

Version 2.770.46

Fixed

  • El renderizado por regiones y tiles (RenderLoadedPageRegionToBitmap, RenderLoadedPageTiles, el renderizado progresivo de regiones) ya no deja un tile en blanco cuando su único contenido procede de un form XObject colocado lejos del origen; un form cuenta ahora como cubridor de su /BBox tal como lo coloca su /Matrix y la transformación en curso
  • El texto colocado con TD, T*, ' o " cae ahora en la línea correcta al decidir qué tiles lo contienen, así que las líneas posteriores de un párrafo ya no se descartan de los tiles en los que aparecen
  • Los offsets de Td se escalan por la matriz de texto y se miden desde el principio de la línea, igual que se dibuja el texto de verdad
  • El espaciado de carácter, el espaciado de palabra, la escala horizontal y la elevación del texto se tienen en cuenta al estimar dónde termina un text run, y ya se asume que los glifos son más estrechos 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 Delphi, en lugar de Memory.pdf en el directorio de trabajo
  • El demo MemStream de C++Builder recarga ahora el PDF en memoria con LoadFromStream y comprueba que tiene una página antes de guardarlo
  • Un error mientras el demo MemStream de C++Builder escribe el PDF ya no deja el demo incapaz 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 al arrancar, lo que podía cerrar ventanas no relacionadas como un editor o un gestor de archivos
  • El demo HelloWorld de C++Builder escribe HelloWorld.pdf junto al ejecutable y solo lo abre cuando se le pasa --open; como la versión 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 por debajo de esos nodos; tales documentos antes solo informaban de las páginas listadas directamente bajo la raíz del árbol
  • Las páginas conservan su orden del árbol de páginas, así que los índices de página, las page boxes y el contenido coinciden con lo que muestran otros visores
  • Una página cuyo /Type se guarda como objeto indirecto se reconoce como página durante este paso de ordenación

Version 2.770.42

Fixed

  • Cargar un PDF cuyo árbol de páginas se remite a sí mismo (un nodo /Pages listado entre sus propios /Kids, o dos nodos que se listan mutuamente) ya no provoca 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 cuyo nombre /Type se guarda como objeto indirecto carga ahora sus páginas en lugar de fallar o leer memoria no válida

Version 2.770.41

Fixed

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

Version 2.770.40

Fixed

  • El JSON de job que se pasa a THPDFJobProcessor.Execute, HPDFDocRunJob y HPDFDocRunJobWithCallbacks se lee ahora como UTF-8 de principio a fin: los escapes \uXXXX ya no se colapsan a la code page ANSI, y los pares surrogate escapados como 😀 producen el carácter previsto en lugar de dos rotos
  • Los nombres de archivo de entrada y salida en los jobs de merge, split, optimise, encrypt y validate conservan los caracteres fuera de la code page del sistema, ya se escriban como UTF-8 crudo o como escapes \u, así que tales archivos se encuentran y se escriben con su nombre real
  • Un escape \u mal formado con menos de cuatro dígitos hexadecimales se descarta sin tragarse los caracteres siguientes ni la comilla de cierre
  • Una marca de orden de bytes UTF-8 al principio del texto del job se ignora

Version 2.770.39

Fixed

  • Los object identifier que facilita el llamador al construir firmas y peticiones de timestamp (política de firma, commitment type, rol reclamado, política de timestamp y OID similares) se codifican ahora correctamente cuando el primer arco es 2 y el segundo es 48 o mayor; el primer valor combinado se recortaba a un solo byte, produciendo un identificador distinto y equivocado
  • Un arco de object identifier demasiado grande para representarse se rechaza ahora 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 PDF que comparten nombre de archivo en subdirectorios distintos ya no se sobrescriben los archivos generados unos a otros; el directorio de trabajo replica ahora el árbol de carpetas de entrada

Version 2.770.37

Security

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

Version 2.770.36

Fixed

  • Una función de stitching (Type 3) que se remite a sí misma, de forma directa o a través de otras funciones, ya no recursa hasta desbordar la pila; se trata como una función inservible
  • Afecta a las tint transforms de 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 anidamiento 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 ejecuta ahora el mismo flujo de trabajo que la versión 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 contienen ahora las mismas páginas que los de la versión 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; los enlaces por debajo del final 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 desactivan mientras se escribe el PDF, así que la lista de enlaces ya no puede cambiar, y el documento no puede iniciarse una segunda vez, en mitad de la generación

Version 2.770.33

Fixed

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

Version 2.770.32

Fixed

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

Version 2.770.30

Security

  • La validación de rutas de certificados (HPDFValidateCMSCertificatePath, la variante en línea y los lotes de firmas) ya no puede quedar bloqueada por una firma que incrusta muchos certificados que comparten un nombre y una key; tal conjunto hacía que la búsqueda de rutas probara todas las ordenaciones posibles, lo que crece factorialmente y podía tener una validación ocupada durante horas
  • Cada firma de emisor en una cadena candidata se verifica ahora 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 tiene un tope de trabajo fijo; al alcanzarse el tope, la validación informa de que ninguna ruta válida llega a un trust anchor, y las cadenas ordinarias se quedan muy por debajo

Version 2.770.29

Fixed

  • ImportLoadedInterchangeFromFDF empareja ahora nombres de key completos cuando lee las 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 key más larga que empieza igual, así que las anotaciones importadas conservan su autor y sus flags
  • Las keys de diccionarios anidados dentro de una anotación importada, y el texto con pinta de key dentro de strings, ya no se toman por entradas propias de la anotación
  • Los literal strings de las anotaciones y estados FDF importados decodifican todos los escapes que define ISO 32000-1: \t, \b, \f, octal \ddd y 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 buffer interno; el texto de más de 256 bytes salía corrupto y muchísimo más largo, y los chunks grandes podían provocar un crash
  • El método de compresión de un chunk de texto comprimido se lee ahora del byte correcto, así que los chunks con un método no soportado se ignoran en lugar de decodificarse como si fueran datos deflate
  • Un texto comprimido truncado o mal formado ya no arriesga un bucle de decodificación sin fin
  • 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 funciona ahora como la versión Delphi: crea un PDF de muestra, lo carga, encuentra el término de búsqueda con SearchLoadedDocumentText y añade 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 comprueba la copia guardada en busca de las nuevas anotaciones

Fixed

  • Los resaltados del demo SearchAndSelect de C++Builder cubren ahora las palabras encontradas; 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 superior del texto

Version 2.770.26

Fixed

  • El demo DigiPrint de C++Builder arranca ahora en sistemas cuyo separador decimal es el punto; los decimales con coma de demo.xml se parseaban con la locale del sistema y lanzaban un error mientras se creaba el formulario
  • El demo DigiPrint lee demo.xml y sus dos iconos JPEG de la carpeta del ejecutable y escribe allí demo.pdf, y el proyecto coloca ahora el ejecutable en la carpeta del demo junto a esos archivos
  • Los iconos de página del pie del demo DigiPrint se dibujan dentro de la fila del pie en lugar de por 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 informe
  • Pulsar el botón DigiPrint más de una vez ya no desplaza 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 que falta, ya no deja el demo incapaz de crear otro documento

Version 2.770.25

Fixed

  • Demo Showcase: las bandas de cabecera, el fondo de portada, las muestras de degradado y el acento de la contraportada se alinean ahora con las formas que rellenan; las coordenadas de degradado se dan en el espacio de usuario por defecto del PDF (origen abajo a la izquierda), así que los colores ya no salen desplazados 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 la generación de la galería falla, 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 sin cambios

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 coloca ahora el rojo, el verde, el azul y el alfa en los bytes correctos del bitmap de 32 bits; antes los canales de color estaban desplazados un byte y el canal alfa sobrescribía uno de ellos
  • Esto corrige también un viaje de ida y vuelta 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

  • Un text string cuyo valor empieza por << y termina por >> (por ejemplo un título, un autor, un valor de campo de formulario o el texto de una anotación como "<<URGENT>>") se guarda ahora siempre como string; se escribía tal cual, lo que rompía la sintaxis del archivo y permitía que un texto artificioso inyectara un diccionario, como una action, en el documento guardado
  • Se 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 de en el 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 PDF tras ejecutarse, y como la versión 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 informan con el texto de su mensaje; la consola mostraba una dirección de memoria

Version 2.770.21

Fixed

  • En la ABI C estable, llamar a hpdf_document_destroy mientras otra llamada sobre el mismo handle sigue en marcha (desde otro hilo, o desde dentro de un callback de lectura, escritura, progreso o cancelación) ya no libera el documento bajo esa llamada
  • El handle deja de ser válido en cuanto hpdf_document_destroy retorna; el documento en sí 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 a texto con una fuente TrueType/OpenType cuyos contextual lookups de GSUB se remiten a sí mismos ya no desborda la pila y provoca un crash; la profundidad de anidamiento se acumula ahora de verdad entre niveles
  • Una regla contextual que dispara muchos lookups anidados ya no puede multiplicarlos en un bucle casi infinito: cada coincidencia de nivel superior ejecuta como mucho 1024 lookups anidados

Fixed

  • Una sustitución contextual de encadenamiento (GSUB lookup type 6) alcanzada desde otro contextual lookup ahora se aplica; se leía con el layout contextual simple y nunca coincidía, así que faltaban algunas ligaduras y formas contextuales
  • Una sustitución de encadenamiento 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 una access violation cuando la página contiene una image XObject o una imagen inline; las imágenes se dibujan en el contexto de dispositivo del llamante
  • GetLoadedPageMetafile ya no falla en páginas con imágenes, y las imágenes quedan registradas en el metarchivo devuelto
  • El recorte de imágenes contra la superficie visible usa ahora el tamaño pasado a RenderLoadedPageToDC cuando el contexto de dispositivo no tiene región de recorte

Version 2.770.18

Fixed

  • Las regiones de medio tono JBIG2 con grid skipping activado ya no pierden celdas de la rejilla que empiezan a la izquierda de la región o por encima de ella pero aún se solapan con ella; tales celdas se trataban como si quedaran muy lejos, se saltaban sus valores de gris y las celdas restantes de la región se decodificaban desincronizadas
  • Las coordenadas de rejilla negativas que no son píxeles enteros se redondean ahora hacia menos infinito, como exige la especificación JBIG2, así que las celdas parcialmente visibles caen en el píxel correcto
  • Las regiones de medio tono cuya rejilla está por completo 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 (una etiqueta [2] explícita rodeando el key hash) se vuelven a aceptar; la validación de rutas de certificados las descartaba, así que la revocación permanecía desconocida para todo responder que se nombra a sí mismo por key
  • Se emparejan tanto los responders directos (la CA emisora) como los certificados de firma OCSP delegados identificados por key, y la forma antigua con etiquetado implícito sigue funcionando
  • HPDFDescribeValidationEvidence indexa ahora los descriptores OCSP por el DN del emisor del certificado nombrado en cada respuesta, resuelto a partir del issuer name hash de la respuesta, en lugar de por el DN del responder; las respuestas de responders delegados y las respuestas identificadas por key producen ahora descriptores que una búsqueda por emisor del certificado encuentra
  • Se añade un overload de HPDFDescribeValidationEvidence que recibe la firma CMS y certificados de emisor adicionales, para las respuestas que identifican al responder por key y no incrustan certificado

Version 2.770.16

Fixed

  • Demo Viewer: el formulario ya no lanza una access violation al arrancar; la barra de estado existe ahora antes de que el visor se enlace con el documento y empieza a informar de los cambios de página
  • Demo Viewer: pulsar Enter en el cuadro de búsqueda activa ahora la primera coincidencia en lugar de saltar directamente a la segunda
  • Demo Viewer: los marcadores sin página de destino resoluble se listan sin un sufijo falso "(p0)", 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 abre ahora de verdad 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

  • Una ruta de recorte establecida con W o W* surte ahora efecto después de pintar la ruta, como exige ISO 32000-1, y no antes
  • Trazar una ruta que también establece el recorte (re W S) pinta ahora todo el ancho de línea; la mitad exterior del trazo quedaba cortada por el propio recorte de la ruta
  • El relleno con trazo y recorte even-odd (W* B) rellena ahora con la regla de winding del propio operador de pintado; el recorte even-odd solía abrir agujeros en el relleno
  • B* y b* rellenan ahora siempre con la regla even-odd, con independencia de la regla de relleno que hubiera dejado una operación anterior

Version 2.770.13

Fixed

  • Las regiones de medio tono JBIG2 cuyos planos de escala de grises se codifican con MMR ahora se decodifican; antes los planos salían invertidos, solo se leía una de cada ocho columnas y el final de cada plano se localizaba en el byte equivocado, así que los planos siguientes se decodificaban desde una posición errónea
  • El marcador de fin de bloque tras cada plano MMR se reconozca tanto si sigue directamente a la última fila como si va después de bytes de relleno, y cada plano empieza ahora en el límite de byte que le sigue
  • Las regiones de medio tono codificadas aritméticamente no se ven afectadas
  • Se aplica a las imágenes PDF con el filtro JBIG2Decode que se cargan, extraen o renderizan con el decodificador incorporado

Version 2.770.12

Fixed

  • El JSON producido por el procesador de jobs (THPDFJobProcessor.Execute, HPDFDocRunJob, HPDFDocRunJobWithCallbacks) y por la comparación de documentos escapa ahora las comillas y las barras invertidas como \" y \; las formas anteriores \x22 / \x5C no son JSON válido y hacían que 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 es siempre UTF-8 bien formado: los bytes que no son UTF-8 válido se sustituyen por U+FFFD en lugar de copiarse al resultado
  • Los mensajes de error de los resultados de jobs y del objeto de error de la comparación se codifican como UTF-8, así que el texto de excepciones y nombres de archivo que no están en inglés ya no llegan en la code page ANSI

Version 2.770.11

Fixed

  • RedactLoadedRect, StampLoadedPageText, StampLoadedPageImage, StampLoadedPageShape, StitchLoadedPage y FlattenLoadedAnnotations ya no descartan el contenido existente de una página cuyo /Contents es un array de streams; los nuevos operadores se añaden como un stream extra al final del array, o al principio en el caso de un underlay
  • Los stamps de underlay sobre una página cuyo contenido está repartido en varios streams conservan cada stream original
  • Las páginas cuyo único stream de contenido usa un filtro distinto del FlateDecode simple (ASCIIHex, ASCII85, LZW, RunLength, cadenas de filtros o Flate con predictor) se decodifican ahora antes de añadir los nuevos operadores, así que el stamp, la caja de redacción o la apariencia aplanada se pinta de verdad 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 nuevos operadores se escriben en un stream separado en lugar de añadirse a los bytes codificados

Version 2.770.10

Security

  • Renderizar un PDF cuya fuente CFF incrustada (FontFile3, Type1C o CIDFontType0C) guarda un offset de INDEX de 0x80000000 o superior ya no lee memoria fuera de los datos de la fuente; tales offsets se trataban como negativos y pasaban las comprobaciones de límites
  • Las fuentes TrueType incrustadas reciben el mismo tratamiento para localizaciones de glifo y longitudes de tabla de 0x80000000 o más: el glifo o la fuente se saltan en lugar de leerse desde el 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 tiene ahora un presupuesto fijo de operaciones 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 refinamiento de símbolos en la plantilla de 13 píxeles ahora se decodifican; los bytes de píxel adaptativo del refinamiento en la cabecera de la región se saltaban, así que el conteo de instancias y todos los campos siguientes se leían desde un offset equivocado y la imagen se rechazaba
  • Las regiones de texto con codificación aritmética, o con la plantilla de refinamiento de 10 píxeles, no se ven afectadas y se decodifican exactamente como antes
  • Se aplica a las imágenes PDF con el filtro JBIG2Decode que se cargan, extraen o renderizan con el decodificador incorporado

Version 2.770.8

Security

  • Con el aislamiento de codecs activado, el tamaño de una imagen decodificada devuelta por el worker aislado se comprueba ahora contra el límite de salida configurado y la memoria compartida que asignó el proceso anfitrión, en lugar de contra 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; tal respuesta se rechaza como error de protocolo y la imagen no se dibuja a partir de ella
  • La respuesta del worker se copia una vez y se valida desde esa copia, así que su cabecera no puede cambiar entre las comprobaciones y la copia de píxeles

Version 2.770.7

Fixed

  • Las peticiones OCSP construidas para la comprobación de revocación en línea (HPDFCollectCMSRevocationRequests y la validación de rutas de certificados en línea) codifican ahora correctamente el identificador de algoritmo SHA-256 del CertID; antes, los dos primeros arcos del object identifier se escribían como bytes separados, así que el algoritmo de hash no era válido
  • Los responders OCSP que rechazan peticiones mal formadas responden ahora a estas peticiones con un estado normal en lugar de un error, así que las comprobaciones de revocación en línea ya no recurren a evidencia sin conexión por culpa de la codificación de la petición

Version 2.770.6

Fixed

  • Renderizar una fuente Type 3 pinta ahora cada aparición de un glifo; antes, un glifo repetido dentro del mismo text run, o en cualquier otro lugar de la página con el mismo tamaño y orientación, solo se pintaba la primera vez y quedaba en blanco a partir de entonces
  • Afecta a RenderLoadedPageToBitmap, RenderLoadedPageToDC, los metarchivos de página y las rutas de exportación de imagen, con o sin la caché de renderizado compartida
  • Los glifos Type 3 repetidos siguen usando la caché de glifos, así que la corrección no vuelve a leer el procedimiento del glifo en cada aparición

Version 2.770.5

Fixed

  • La ABI C estable ya no libera dos veces la fuente de entrada cuando hpdf_document_load_from_io falla mientras el documento se está parseando, por ejemplo cuando el callback de lectura informa de un error o la operación se cancela a mitad; tal carga podía corromper el heap o hacer crash del proceso anfitrión
  • Una carga fallida devuelve ahora el estado del callback o de la 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 se ha hecho cargo

Version 2.770.4

Fixed

  • Los resultados de códigos de barras de DecodeLoadedPageBarcodes en páginas con /Rotate 90 o /Rotate 270 informan ahora de los bounds en la posición real del símbolo en lugar de una posición espejada respecto a la página
  • La orientación del código de barras informada en esas páginas coincide ahora con la dirección en la que el símbolo se lee de verdad en el espacio de página
  • El texto invisible que coloca ApplyLoadedOCRTextLayer en páginas giradas un cuarto de vuelta queda ahora sobre las palabras reconocidas, así que la selección y la búsqueda resaltan el lugar correcto
  • Los hallazgos de caras 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 girar y las giradas media vuelta 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 provoca un stack overflow; seleccionar el codec construía sus tablas de companding, que caían en un helper de exponencial recursivo sin fin
  • Las imágenes TIFF SGILog (LogLuv) en builds de 32 bits pasan por los mismos helpers matemáticos corregidos
  • El helper de 32 bits que redondea a la baja usado por los codecs TIFF redondea ahora los valores negativos hacia menos infinito y acepta magnitudes grandes sin error de overflow, igualando a 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 reduce justo tras la decodificación al tamaño exacto de dibujo promediando por áreas, en lugar de mantenerse a tamaño completo y estirarse al dibujarla
  • La imagen reducida cabe en la caché de imágenes decodificadas: un grupo de transparencia que se dibuja dos veces, sobre negro y sobre blanco, para recuperar su alfa decodifica ahora tal imagen una sola vez en lugar de una por pasada, y lo mismo ocurre al 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 de dibujo, donde la máscara también se reduce; 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 tal grupo, renderizar tardaba unos 1.8 segundos en lugar de 4.5
  • Las stencil image masks conservan su resolución completa, y los métodos públicos de decodificación de regiones 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 estableciera una soft mask propia, una regresión de la versión 2.769.3; tales páginas se renderizan de nuevo

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 mezcla basado en CIE (CalGray, CalRGB, Lab o ICCBased)
  • Establecerla a true toma el Y de CIE tal como describe ISO 32000-1 11.5.3; los bitmaps renderizados bajo los dos ajustes se guardan en caché por separado

Changed

  • Por defecto, una máscara de luminosidad pondera ahora el color resuelto de su grupo como DeviceRGB sea cual sea el espacio de mezcla, como hacen los visores PDF comunes. El Y de CIE se mide en una escala lineal, así que un gris medio en un grupo ICC o calibrado quedaba enmascarado en torno a 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 el mismo ajuste 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 proyectadas Multiply que exportan las herramientas de diseño, mezcla ahora su propio color y su 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 se aplica al grupo en su conjunto (11.6.6). Conservaba el modo con el que se pintaba el grupo, así que un grupo aislado multiplicaba su contenido sobre su inicio vacío y pintaba en negro
  • Una soft mask establecida en el mismo graphics state que un blend mode dibuja su grupo de máscara con mezcla 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; tales páginas se renderizan algo más despacio

Version 2.769.2

Changed

  • Una imagen con soft mask se decodifica al tamaño con el que se dibuja, como ya ocurría con una imagen sin ella, y su máscara se decodifica también a ese tamaño; una máscara JPEG pasa por el decodificador JPEG de tamaño reducido en lugar de decodificarse completa
  • La imagen y su máscara se decodifican siempre enteras, así que la máscara no puede desplazarse respecto a la imagen, y el recorte conserva lo dibujado dentro de 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 tardaba 1.6 segundos en lugar de 3.7
  • DecodeLoadedImageRegionAtResolution devuelve entera una imagen de un formato sin decodificador de regiones tal como ha quedado 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 entera con la que comparar, algo que las páginas con muchas máscaras, como los degradados y las sombras proyectadas que exportan las herramientas de diseño, pagaban una vez por máscara
  • Las luminosity masks sobre un espacio de mezcla calibrado o basado en ICC consultan la curva sRGB en una tabla en lugar de calcularla para cada canal de cada píxel, y el contenido de máscara en grises, que es el caso común, se convierte mediante una única tabla
  • Una página de 1125 x 1600 con una veintena de soft masks se renderiza aproximadamente un quinto más rápido; los píxeles renderizados no cambian

Version 2.769.0

Changed

  • Establecer el Width o el Height de una página ya no oculta los errores: un fallo lanza ahora una excepción en lugar de dejar el tamaño sin aplicar en silencio, y establecer el tamaño de una página cuyo canvas ya se ha cerrado lanza la nueva EHPDFPageClosedError con un mensaje que explica por qué
  • Tras un fallo así, la página ya no se queda en un estado en el que los 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 escribe ahora 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 en un Form XObject que se pinta a sí mismo, de forma directa o a través de otros forms; tal form se volvía a leer en cada nivel de anidamiento, repitiendo su texto hasta doce veces, y uno que se pintaba dos veces a sí mismo necesitaba 4096 pasadas
  • El texto de un Form XObject que cae fuera del bounding box del form, que es lo que lo recorta, ya no forma parte del texto de la página

Version 2.768.19

Changed

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

Version 2.768.18

Fixed

  • El renderizado de páginas encuentra ahora las fuentes instaladas que Windows registra con un nombre localizado, como Microsoft YaHei en un Windows chino o Yu Mincho en un Windows japonés; el texto en tales fuentes se dibujaba con una fuente sustituta cuando el PDF no las incrustaba
  • Los nombres de fuente escritos sin espacios coinciden ahora con familias de Windows que mantienen algunas palabras unidas, como MicrosoftYaHei para Microsoft YaHei, MicrosoftJhengHei para Microsoft JhengHei y MSPGothic para MS PGothic; se buscaban insertando un espacio delante 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 sondean 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 muestrea ahora la memoria como mucho una vez cada 10 ms dentro de una operación, en lugar de hacerlo en cada objeto que lee el parser, un muestreo que recorría todos los bloques del gestor de memoria. El PDF Reference 1.6 de 1236 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 ralentización crecía con el tamaño del heap propio de la aplicación, así que las aplicaciones que retienen mucha memoria son las que más se benefician
  • UpdateOperationTelemetrySample gana un parámetro opcional Force que toma una muestra con independencia del intervalo; el final de cada operación sigue tomando la suya

Version 2.768.16

Fixed

  • Cargar un archivo vacío ya no se cuelga; LoadFromFile solía entrar en un bucle infinito leyendo hacia atrás desde el principio del archivo
  • Un archivo en el que no se encuentra ninguna página, como un archivo vacío, texto plano o bytes aleatorios, ya no se carga como una o tres páginas en blanco adivinadas a partir de su tamaño; LoadFromFile devuelve ahora 0 o lanza una excepción, como con los demás archivos ilegibles
  • Un archivo cifrado cuyas páginas están dentro de object streams cifrados lanza ahora una excepción que indica que hace falta la contraseña cuando se carga sin ella, en lugar de cargarse como una página en blanco; hay que cargarlo con el overload de contraseña

Version 2.768.15

Fixed

  • El texto de página ya no repite los caracteres que se pintan de nuevo sobre sí mismos, como ocurre en los logos superimpresos y en la negrita simulada dibujando el texto dos veces con un pequeño offset; tal texto se extraía dos veces, por ejemplo "Bold wordsBold words", y las búsquedas sobre él podían fallar
  • Las cuatro extracciones de texto, plain, column, layout y semantic, leen tal carácter una sola vez; la lista de glifos sigue informando de cada glifo pintado

Version 2.768.14

Fixed

  • Los nombres de glifo de la lista Adobe Glyph List completa se resuelven ahora 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 antiguas cirílicas, hebreas y arábigas; un encoding 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, a través de un buffer 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 coloca ahora los glifos de fuentes CID-keyed (Type 0) cuyo array de anchos /W no está ordenado por CID; la mayoría de los glifos tomaban el ancho por defecto de un em entero, así que las líneas se pasaban del borde de la página y sus finales se perdían en el texto extraído y en la búsqueda

Version 2.768.11

Fixed

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

Version 2.768.10

Fixed

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

Version 2.768.9

Fixed

  • Las imágenes marcadas con /Interpolate false se promedian ahora al dibujarse más pequeñas que su propia resolución; se muestreaban un píxel de cada varios, así que los gráficos colocados como imágenes mostraban etiquetas de ejes dentadas y oscuras y líneas finas rotas donde otros visores las muestran suaves
  • Las imágenes ampliadas 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 fino que un píxel, como usan los documentos para la negrita simulada, se renderiza ahora a ese ancho; el trazo solía ser de un píxel entero, así que tales titulares se veían emborronados y mucho más pesados que en otros visores
  • Los glifos pequeños de fuentes incrustadas e instaladas se trazan con antialiasing en los modos de render de texto 1 y 2, con el color de trazo, tras el relleno

Version 2.768.7

Fixed

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

Version 2.768.6

Fixed

  • El demo Stamp vuelve a compilar correctamente para Win64

Version 2.768.5

Fixed

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

Version 2.768.4

Fixed

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

Version 2.768.3

Fixed

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

Version 2.768.2

Fixed

  • EncryptFile y DecryptFile con AES-256 ya no dañan los archivos de fuentes incrustadas cuyo diccionario lista /Length1 antes de /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 tal stream 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, cargan ahora completos; antes, cada stream de contenido de página de tal archivo se descartaba, así que las páginas se renderizaban en blanco y no daban texto
  • Un stream cuya longitud remite a un objeto que no existe, o que no tiene longitud alguna, se lee ahora hasta su marca de fin en lugar de descartarse

Version 2.768.0

Added

  • BuildLoadedPageSVG y SaveLoadedPageAsSVG aceptan un parámetro opcional EmbedFonts; viene desactivado por defecto, y las llamadas existentes exportan exactamente igual que antes
  • Con EmbedFonts a True, el texto en fuentes cuyo programa TrueType o CFF está incrustado en el PDF se dibuja a partir de los contornos de glifo de la propia fuente, así que el SVG se ve igual en sistemas donde esas fuentes no están instaladas
  • Cada contorno de glifo se escribe una vez y se reutiliza dondequiera que aparece el carácter, lo que mantiene pequeño el archivo en las páginas con mucho texto
  • El texto permanece en el SVG como texto transparente sobre los contornos, así que se puede seguir seleccionando, buscando y leyendo con lectores de pantalla
  • El texto de relleno, de trazo y de relleno y trazo, los anchos de línea, el texto girado o escalado y el texto usado como path de recorte salen como salen en la página renderizada
  • Las fuentes no incrustadas, los programas de fuente Type 1 y el texto CJK vertical se quedan como texto SVG ordinario

Version 2.767.4

Fixed

  • El texto con contorno y con relleno y contorno (modos de render de texto 1 y 2) en fuentes no incrustadas respeta ahora el ancho de línea al renderizarse; antes, cada contorno salía de un píxel de ancho, fuera cual fuera el ancho de línea
  • Tales contornos se dibujan ahora a partir de las formas exactas de glifo de la fuente instalada, en sus posiciones exactas, como ya hacía el texto relleno
  • Los caracteres que a la fuente instalada le faltan, que Windows toma de una fuente de reserva, también conservan el ancho de línea al dibujarse con contorno

Version 2.767.3

Fixed

  • El texto en fuentes no incrustadas se dibuja ahora con los caracteres que sus nombres de encoding indican. Los códigos de carácter iban a la fuente instalada sin cambios, y la fuente instalada los lee en su propio juego de caracteres, así que cada entrada /Differences y los códigos donde StandardEncoding o MacRomanEncoding difieren del juego 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 en 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 incrustadas se dibujaban como interrogantes desde la versión 2.766.83; vuelven a leerse en el juego 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 fuentes incrustadas se renderizan también con antialiasing. Los glifos de más de 64 píxeles, como titulares y títulos en resoluciones de impresión, se rellenaban sin antialiasing y mostraban bordes dentados; ahora se les aplica antialiasing hasta 256 píxeles, mientras que el texto grande de fuentes instaladas conserva la salida de texto con antialiasing del sistema

Version 2.767.1

Fixed

  • La extracción de texto layout, column y semantic mide ahora la página en unidades de página. Comparaban las posiciones con el tamaño de fuente dado a Tf y con los avances en espacio de texto, que son una fracción de las distancias reales en los muchos documentos que dimensionan el texto mediante la matriz de texto, así que el texto layout repartía cada letra por 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 devuelven ahora solo el texto dentro de la caja visible y separan las palabras que un documento espacia moviendo la posición del texto, como el texto de página plain
  • El texto layout mantiene juntas las letras de una palabra, donde letras anchas como la m o la W solían colar un espacio dentro de la palabra
  • El texto semantic ya no mete una línea en blanco tras 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 column muestra su sintaxis completa

Version 2.767.0

Added

  • LoadFromFile y LoadFromStream tienen overloads con un parámetro AutoDecrypt. Con AutoDecrypt a 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 al modo en que lo abren los visores, así que se puede extraer su texto y renderizar y exportar sus páginas sin facilitar ninguna contraseña
  • Los documentos que necesitan contraseña y los no cifrados cargan exactamente como los cargan los overloads normales, y si la contraseña vacía abre el documento se comprueba a partir de unos cuantos rangos pequeños del archivo antes de cargarlo
  • Como con los overloads con contraseña, un documento abierto así 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 incrustadas, como las 14 fuentes estándar y las fuentes Office y chinas instaladas, se renderiza ahora a partir de los contornos de glifo sin hinting en su posición exacta, con el mismo antialiasing que las fuentes incrustadas. 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í que el texto pequeño quedaba espaciado de forma desigual y con un aspecto manchado; las páginas renderizadas se ajustan ahora mucho más a las formas y al espaciado de otros visores
  • Los glifos que a la fuente instalada le faltan y los glifos grandes se siguen dibujando con la salida de texto del sistema, que puede tomar los caracteres ausentes de fuentes enlazadas

Fixed

  • Los glifos pequeños de fuentes incrustadas 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 usa ahora antialiasing en escala de grises. Seguía el ajuste ClearType del sistema, así que el texto negro en bitmaps renderizados arrastraba flecos rojos y azules que dependían de la máquina y permanecían en las imágenes guardadas, impresas o escaladas

Version 2.766.81

Fixed

  • El texto pequeño en fuentes CFF y OpenType CFF incrustadas se renderiza ahora con antialiasing, como ya ocurría con el texto TrueType. Esos glifos se rellenaban sin antialiasing, así que a tamaños pequeños y resoluciones normales de pantalla los trazos verticales más finos que un píxel desaparecían y el texto de cuerpo se rompía en fragmentos; los formularios y documentos compuestos en fuentes como Helvetica Neue son ahora 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 fuera, así que las marcas de imprenta, las líneas de slug y el resto del contenido fuera de una página recortada ya no aparecen en el texto extraído. La extracción a nivel de glifo 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 ligeramente desplazada en texto dimensionado mediante la matriz de texto. Se empezaba una línea nueva cada vez que el texto subía o bajaba la mitad del tamaño de fuente dado a Tf, que suele ser 1 en tales documentos, así que bastaba un salto de medio punto
  • El texto girado, como etiquetas que corren por el lateral de una página o marcas de agua diagonales, ya no pone cada carácter en su propia línea. Las líneas se distinguen ahora por el movimiento transversal a 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 recurre a una familia de fuentes genérica para una fuente que no está instalada, nombra ahora primero una cara común de ese tipo: Times New Roman antes de serif, Arial antes de sans-serif y Courier New antes de monospace. Un navegador elige la cara para una familia genérica a secas según su configuración de idioma, y los navegadores en chino o japonés elegían fuentes CJK cuyas letras latinas anchas se solapaban en las posiciones tomadas del PDF

Version 2.766.77

Fixed

  • La exportación SVG nombra ahora las familias de fuentes chinas instaladas para las fuentes conocidas por sus nombres legacy GB2312, como KaiTi_GB2312 o su grafí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í que ese texto se mostraba en la fuente por defecto del navegador
  • Una fuente nombrada en un solo idioma recibe también 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 punto final, en espacio de página, del ancho propio del glifo a lo largo de la línea base, sin espaciado de carácter ni de palabra

Fixed

  • La extracción de texto de página separa ahora las palabras que un documento espacia 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 quedar pegadas como PDFReference
  • Se añade un espacio donde el hueco tras el ancho propio de un glifo supera el 0.15 de la altura del texto, medido en unidades de página para que el texto dimensionado mediante la matriz de texto se trate igual que el texto dimensionado por el tamaño de fuente
  • El kerning, el espaciado ligeramente holgado, el espaciado de carácter estrechado que los ajustes de posición devuelven, el texto superimpreso y los caracteres de espacio reales se dejan como están, y no se añade espacio entre dos caracteres chinos, japoneses o coreanos por mucho que la justificación los separe

Version 2.766.75

Fixed

  • La extracción de texto, la exportación SVG y el renderizado reconocen ahora 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 en subconjunto suelen recodificar estos nombres, y los caracteres salían como códigos de control en bruto
  • También se reconocen todos los nombres de glifo de ITC Zapf Dingbats (a1 a a206), así que las marcas de verificación, las cruces, las flechas y los números circundados que una fuente selecciona mediante estos nombres, como suelen hacer los campos de formulario y las listas con viñetas, se extraen como sus caracteres Unicode
  • Al buscar el nombre de glifo de un carácter se sigue prefiriendo el nombre común, como arrowright o spade, a 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 gestiona por recuento de referencias, y la función también lo liberaba explícitamente, así que cada llamada acababa liberando el dispositivo por segunda vez

Version 2.766.73

Fixed

  • La extracción de texto restaura ahora 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í que una fuente, un espaciado de carácter o un interlineado establecidos dentro de q ... Q seguían afectando al texto posterior
  • Cuando la fuente seleccionada dentro de q ... Q usaba códigos de dos bytes y la de fuera códigos de un byte, el texto tras Q se decodificaba como códigos de dos bytes y se perdía. Word y productores similares escriben páginas así, y lo típico era perder los puntos de relleno del índice y las palabras latinas 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 dispositivo

Version 2.766.72

Fixed

  • El texto dibujado tras RestoreState tiene ahora siempre 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 tras RestoreState en la fuente elegida dentro del par salía sin fuente o con la fuente equivocada, así que los visores podían descartarlo y la extracción de texto no podía leerlo
  • El espaciado de carácter, el de palabra, la escala horizontal y el interlineado siguen SaveState y RestoreState de la misma manera, así que un valor que se vuelve a establecer tras RestoreState se escribe en lugar de saltárselo cuando el lector ya ha vuelto 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 tramo de glifos se dibuja dentro de su propio estado gráfico 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 cada fuente. Los códigos de las fuentes simples son siempre de un byte (ISO 32000-1 9.6.6), así que cada par de caracteres se tomaba como un código desconocido y desaparecía la mayor parte del texto, dejando solo strings 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 espacio de texto (ISO 32000-1 9.4.2). El texto cuyo tamaño viene de la matriz de texto, con 1 Tf y una Tm escalada como suelen escribirlo los procesadores de texto, tenía las líneas apiladas unas sobre otras junto a la primera línea base; ahora se compone como en el PDF
  • La misma corrección se aplica al extractor de texto por dispositivo 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í que las fuentes no incrustadas nombradas así, habitual en fuentes CJK como KaiTi_GB2312 escrita en caracteres chinos, no coincidían con ninguna fuente instalada y se dibujaban con una cara sustituta. Los escapes se decodifican ahora; 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 propios escapes, así que los nombres de fuente CJK guardados como bytes UTF-8 (como el nombre KaiTi_GB2312 en caracteres chinos) llegaban a font-family como #e6#a5#b7... y jamás coincidían con una fuente instalada. Los escapes se decodifican ahora; 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: fuente, tamaño, espaciado, escala, interlineado, rise y modo de render establecidos dentro de q ... Q se arrastraban al texto posterior. Las páginas que engruesan un titular con 2 Tr dentro de un estado guardado dibujaban todo el texto de cuerpo siguiente con trazo y pesado. El estado de texto se guarda y restaura ahora junto con el resto del estado gráfico (ISO 32000-1 9.3.1)

Version 2.766.66

Fixed

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

Version 2.766.65

Fixed

  • Los documentos cuyo trailer da /Encrypt como diccionario directo en lugar de referencia, como producen algunos generadores de PDF, se cargaban como si no estuvieran cifrados: incluso con la contraseña correcta sus páginas se renderizaban en blanco y la extracción de texto y la exportación SVG no devolvían nada, y SaveLoadedDocument escribía un archivo dañado que perdía /Encrypt pero conservaba los streams cifrados. Ahora se abren, descifran y guardan como los documentos con diccionario de cifrado indirecto
  • El cargador de referencias cruzadas cortaba el trailer en el primer >>, así que las entradas tras 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 e imprime por su /CropBox, recortado al /MediaBox (ISO 32000-1 14.11.2), así que las páginas con crop box salían demasiado grandes, desplazadas y con contenido pensado para permanecer oculto
  • RenderLoadedPageToBitmap, los renderizadores por tiles, bandas, metarchivo y contexto de dispositivo, BuildLoadedPageSVG, la geometría de página del visor, los resaltados y las capturas de región, y la impresión cubren ahora la caja visible; las páginas sin /CropBox no cambian

Added

  • THotPDF.GetLoadedPageVisibleBox devuelve la caja visible de una página cargada, su /CropBox recortado a su /MediaBox
  • THPDFPageDisplayList.CropBox da la misma caja para una display list compilada

Version 2.766.63

Fixed

  • La lista de glifos incorporada se buscaba hasta un conteo 13 entradas corto respecto de la tabla, así que los nombres de glifo que quedan al final del orden (y, z, zero, zeta, yen, ydieresis, zcaron y otros) jamás 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 incrustadas con WinAnsiEncoding o MacRomanEncoding con una fuente del sistema sustituta
  • Al buscar el nombre de glifo de un acento como U+0060 se devolvía el nombre de versalita de MacExpertEncoding (Gravesmall) en lugar de grave, así que esos acentos también se perdían en fuentes CFF incrustadas

Version 2.766.62

Fixed

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

Version 2.766.61

Fixed

  • La exportación SVG omitía los sombreados Type 1 basados en función (ISO 32000-1 8.7.4.5.2), tanto si se pintaban con sh como si se usaban en un shading pattern; ahora muestrea la función del sombreado sobre su /Domain en una imagen PNG incrustada, colocada mediante la /Matrix del sombreado y 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 sombreado de malla mostrado con el operador sh, que PDF ignora (ISO 32000-1 8.7.4.5.1), así que toda el área de recorte alrededor de la malla tomaba ese color
  • El renderizador de páginas no pintaba el color de fondo de los shading patterns basados en función, axiales y radiales; ahora rellena el área del pattern antes del sombreado, así que se ve allí donde el sombreado no llega
  • La exportación SVG pinta ahora el color de fondo de los shading patterns de la misma manera y, como el renderizador, lo ignora para sh

Version 2.766.59

Fixed

  • El renderizador de páginas ignoraba la /BBox de los sombreados basados en función, axiales y radiales (ISO 32000-1 8.7.4.5.1); un sombreado extendido pintado con sh o usado en un shading pattern cubría toda el área de recorte en lugar de detenerse en su caja. Los sombreados de malla ya la 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í que 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 mediante 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 em, aunque están en espacio de glifo 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 fundía 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 su propio CID. Las fuentes codificadas con los CMaps UCS2 y UTF16 predefinidos de las colecciones china, japonesa y coreana, como UniGB-UCS2-H, o con un CMap incrustado mapean ahora sus códigos a CIDs, así que los anchos /W y los glifos incrustados se buscan en los CIDs correctos; antes, por ejemplo, las letras latinas minúsculas de un texto STSong-Light se espaciaban un em entero
  • Los códigos se leen por los rangos de codespace del CMap, así que los códigos de un byte y de cuatro bytes (pares sustitutos) se leen enteros, y los nombres terminados en -V seleccionan escritura vertical

Version 2.766.55

Fixed

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

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 componían a un avance fijo de medio em al renderizar una página cargada, exportarla a SVG o extraer su texto, así que las letras se apiñaban; las familias Helvetica, Times y Courier, también bajo los nombres Arial, TimesNewRoman y CourierNew, toman ahora 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 decodifica ahora por su StandardEncoding implícita, así que, por ejemplo, el código 39 se lee como comilla simple derecha

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 componía el texto a un avance fijo de medio em; ese texto se espacia ahora por sus anchos
  • Los descriptores de fuente dados como objetos indirectos se leen ahora al renderizar, así que los flags ForceBold e Italic y el ángulo itálico de las fuentes no incrustadas surten efecto
  • El flag SmallCap ya no pone el texto en negrita: la negrita se rige ahora por el flag ForceBold (ISO 32000-1, tabla 123)

Version 2.766.52

Fixed

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

Version 2.766.51

Fixed

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

Version 2.766.50

Fixed

  • Los sombreados axiales, radiales y basados en función cuyo /Function es un array de funciones de una 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 de forma directa o como objetos indirectos
  • La exportación SVG escribe tales sombreados axiales y radiales como gradientes, incluidos los que 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 recibe ahora font-weight="bold" y font-style="italic" a partir de la parte de estilo del nombre de fuente, como Arial-BoldMT, Helvetica-Oblique o MinionPro-It, y del peso, los flags y el ángulo itálico del descriptor de fuente
  • 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 se nombra ahora por su cuenta y con espacios entre sus palabras (SegoeUI, Segoe UI), seguida de una familia genérica según los flags del descriptor o el 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 restaura ahora también esos colores
  • Los dispositivos de contenido pueden iniciar contenido anidado con los colores del llamador mediante la nueva interfaz IHPDFContentInheritedColorDevice

Version 2.766.47

Added

  • La exportación SVG rellena ahora los paths que usan un tiling pattern con un <pattern> de SVG que repite la celda del pattern a sus espaciados XStep y YStep, recortado a la /BBox de la celda; antes, tales 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 rellenos con un shading pattern reciben el sombreado 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í que los patterns no escalan ni se desplazan con la matriz de transformación actual, y Q recupera un pattern guardado con q
  • Los dispositivos de contenido pueden recibir selecciones de pattern mediante la nueva interfaz IHPDFContentPatternDevice

Version 2.766.46

Added

  • Las imágenes con array /Mask de clave de color (ISO 32000-1 8.9.6.4) se enmascaran ahora al renderizar una página cargada: los píxeles cuyas componentes caen todas dentro de los rangos de clave quedan sin pintar, así que la página se ve a través
  • La exportación SVG aplica las mismas máscaras de clave de color y escribe tales imágenes como imágenes PNG con canal alfa
  • La clave se compara con las muestras tal y como están almacenadas, así que una imagen Indexed se enmascara por índice de paleta aun cuando dos entradas compartan 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 códecs 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 y más grandes comprimen mejor y necesitan menos diccionarios
  • Los PDF cargados que ya se escribieron compactos con object streams salen ahora con un tamaño aproximado al del original, la mayoría ligeramente menores, en lugar de ligeramente mayores
  • Un límite establecido mediante ConfigureAdaptiveObjectStreamPacking se conserva, CompressDocument restaura el límite en EndDoc, y los guardados con object streams normales mantienen 100 objetos por contenedor

Version 2.766.44

Changed

  • El flujo de referencias cruzadas de los archivos escritos con object streams usa el ancho de campo mínimo que necesita cada columna, de modo que 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 flujo de referencias cruzadas pero sin object streams no cambian

Version 2.766.43

Changed

  • Los archivos sin cifrar escritos con object streams guardan ahora también 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 excluye de ahí 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 diccionarios y arrays de forma compacta, sin los espacios y saltos de línea que la sintaxis PDF no necesita (ISO 32000-1 7.2.2); quienes más ganan son los diccionarios de stream, que no pueden entrar en object streams y siguen sin comprimir
  • Los diccionarios de firma y el diccionario de cifrado conservan su formato con espacios, así que firmar un documento escrito con object streams funciona como antes
  • Los archivos escritos sin object streams salen byte a byte iguales

Version 2.766.41

Fixed

  • Los archivos PDF escritos con object streams ya no empiezan dos veces con la cabecera %PDF- y la línea de comentario binario; le pasaba a cada guardado con UseObjectStreams, CompressDocument o CompressLoadedDocument
  • Los visores toleraban la cabecera repetida, pero validadores estrictos podían marcarla, y costaba 15 bytes por archivo

Version 2.766.40

Fixed

  • Los PDF cargados que guardan un número suelto dentro de un object stream, como almacenan la longitud del stream muchos productores, ya se pueden editar y guardar; antes, cualquier cambio detenía el guardado con el error "Cannot rewrite compressed object N: the source member could not be loaded"
  • Ese número se lee ahora como un 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
  • Guardar ese archivo sin cambios nunca estuvo afectado, porque un archivo sin modificar 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 se dibuja ahora en la fuente actual de la página, que se incrusta 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 componen más pequeños para que quepan en el ancho del rectángulo
  • Los documentos siguen pasando la validación PDF/A; los sellos de 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 su aspecto: descarta los recursos de página sin usar, fusiona las fuentes y los formularios idénticos, aplica subsetting a las fuentes incrustadas, recomprime los 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 incrusta las fuentes Arial y SimSun completas pasa de unos 10 MB a unos 20 KB, y otros tres PDF de muestra se redujeron entre un 15 y un 50%
  • Los documentos con campos de firma se rechazan por defecto y se dejan sin cambios, porque cada paso reescribe bytes firmados; AllowSignatureInvalidation los comprime igualmente
  • 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 fuentes de color y las fuentes con /CIDSet conservan el subconjunto normal
  • La CompressLoadedDocument sin parámetros conserva su comportamiento de recomprimir solo los streams sin filtrar

Version 2.766.37

Added

  • Nueva propiedad CompressDocument, desactivada por defecto: un único interruptor que escribe el siguiente documento lo más pequeño posible sin cambiar su aspecto
  • Para ese documento activa la compresión Flate al nivel máximo, un flujo de referencias cruzadas con object streams (ISO 32000-1 7.5.7 y 7.5.8), el subsetting de fuentes y los subconjuntos compactos de fuentes; un documento de tres páginas con texto mezclado en inglés y chino pasa de unos 10 MB a unos 20 KB
  • Los object streams necesitan PDF 1.5, así que una Version anterior se sube a 1.5 salvo que la versión esté bloqueada; la salida PDF/A-1 conserva su tabla de referencias cruzadas clásica
  • Tus propias configuraciones no se tocan: tras EndDoc, Compression, CompressionLevel, UseXRefStream, UseObjectStreams, las opciones de subsetting de fuentes y la versión se leen de vuelta tal como las estableciste
  • 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í que la fuente incrustada ya no lleva una entrada por cada glifo de la fuente original; 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 encogen: dos caracteres chinos en SimSun ocupan unos 3 KB de datos de fuente en lugar de unos 25 KB, y un documento con Microsoft YaHei pasa 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 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 pueda compactar recurre a él

Version 2.766.35

Fixed

  • El texto dibujado con un avance explícito por 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. Antes, cada carácter siguiente tomaba el avance de su vecino; ahora el carácter avanza la suma de sus dos entradas
  • Las cajas de texto Unicode justificado que contienen esos caracteres terminan alineadas en el borde de la caja, y el subrayado o el tachado de ese texto es tan largo como el texto

Version 2.766.34

Added

  • La exportación SVG dibuja ahora las máscaras de imagen (/ImageMask), incluidas las inline, como stencils en el color de relleno actual: las partes no pintadas 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í que sus partes enmascaradas ya no tapan lo que hay detrás
  • Se respeta un /Decode [1 0] en una máscara o máscara de imagen, y una máscara más fina que su imagen conserva su detalle

Version 2.766.33

Fixed

  • El renderizado de páginas respeta ahora el stencil /Mask explícito de una imagen: las partes que la máscara cubre quedan sin pintar en lugar de dibujarse la imagen entera, también 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í que 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 dibuja ahora 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 reflejadas y todas las imágenes de una página con /Rotate ya no se dibujan derechas y sin reflejar dentro de su bounding box
  • Las máscaras de imagen (/ImageMask true) se pintan ahora como stencils en el color de relleno actual, con bordes con antialiasing cuando se reducen, en lugar de dibujarse como una imagen gris
  • Las máscaras de imagen con /Decode [1 0] pintan ahora las muestras de valor 1, como especifica PDF
  • Las máscaras de imagen inline (BI /IM true) vuelven a dibujarse, y se respeta su array /D
  • 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 convierte ahora 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 establece ahora su color inicial, por ejemplo la tinta completa para un spot color, y restaurar el estado gráfico con Q recupera un color establecido así
  • Los espacios de color que remiten a perfiles ICC, tablas de búsqueda o funciones de tinta por referencia se resuelven a través del documento exportado durante la exportación SVG
  • La enumeración de paths informa ahora de los colores de relleno y trazo CMYK en lugar de mantener el color anterior

Version 2.766.30

Fixed

  • THPDFEmfPatcher.RenderEmfDirect dibuja los bitmaps de un metarchivo mejorado 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 aplica ahora los paths de recorte W y W*: cada uno se convierte en un clip path de SVG que recorta lo que se dibuja después de él hasta que se restaura el estado gráfico, así que las imágenes, los sombreados y los paths que un PDF recorta ya no se dibujan enteros
  • Los Form XObjects se recortan a su /BBox en la exportación SVG, y los sombreados axiales y radiales a su /BBox
  • El recorte even-odd (W*) conserva su regla de relleno, y un path pintado junto con W se dibuja antes de que el nuevo recorte entre en vigor, como especifica PDF

Version 2.766.28

Fixed

  • Los gráficos 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 a través de CurrentPageNumber sigue dibujándose en las unidades con las que se maquetó. Con una Resolution distinta de 72 cambiaba a puntos, así que todo lo dibujado en ella después salía con tamaño y posición equivocados
  • La página también conserva su propia Resolution cuando se vuelve 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 de tamaño y desplazadas
  • ExtTextOut coloca cada carácter en los avances indicados en una página así, en lugar de a la mitad de ellos
  • Las secuencias de glifos incrustadas conservan sus offsets y avances de glifo en una página así

Version 2.766.24

Added

  • La exportación SVG respeta ahora la entrada /Extend de los sombreados axiales y radiales: un extremo sin extensión, que es lo habitual por defecto, se deja sin pintar como en PDF en lugar de extender su color final por todo el recorte
  • En los sombreados radiales esto deja además 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 gira ahora los streams de apariencia de las anotaciones con la página, así que 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 del widget (/MK /R) se ajusta según el giro de la página, así que las apariencias de los campos de formulario regeneradas tras el aplanado conservan su orientación
  • Las anotaciones con el flag 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 etiquetado ya no gira dos veces el rectángulo de una anotación cuando el árbol de estructuras se alcanza 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 se modifican 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 recoge un /BleedBox, /TrimBox o /ArtBox colocado en un nodo /Pages padre; estas cajas no son heredables en PDF, así que una página sin entrada propia informa ahora de 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 metarchivo 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 era 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 justificado terminan ahora en el borde de la caja cuando hay espaciado de caracteres. Cada carácter recibía el espaciado por 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 justificado con escalado horizontal vuelven a llenar todo el ancho de la caja en lugar de quedarse cortas por el factor de escalado
  • El espaciado de palabras cuenta ahora dentro del 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 carácter cae en esas posiciones sin importar el espaciado de caracteres o el escalado horizontal activos

Version 2.766.18

Fixed

  • El aplanado de la rotación de página gira ahora las páginas con /Rotate 90 y /Rotate 270 en sentido horario, así que la página aplanada se ve exactamente igual que la original rotada en lugar de quedar patas arriba respecto a ella
  • Las anotaciones, los destinos de enlace y la geometría de estructuras se mueven con la página de la misma manera
  • Aplanar una página sin CropBox ya no añade uno que recortaba la página hasta dejarla cuadrada; solo se rotan las cajas de página que la página realmente tiene

Version 2.766.17

Fixed

  • Las cadenas de fallback de fuentes encuentran ahora caras como SimSun y Microsoft YaHei en sistemas Windows que las reportan por un nombre localizado, así que el texto CJK mezclado 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 estas caras ya no se parte en secuencias de fallback ni se reporta como sin resolver en el diagnóstico de glifos sin resolver
  • Una cara puede figurar en una cadena por cualquiera de sus nombres de familia, en cualquier idioma; una cara que Windows solo sustituye por otra fuente se sigue saltando

Version 2.766.16

Fixed

  • La composición N-up coloca ahora las páginas con /Rotate 90 y /Rotate 270 giradas en sentido horario dentro de sus celdas; antes se giraban al otro lado y salían empujadas fuera de la celda, a menudo fuera de la hoja
  • Las páginas con /Rotate 180 se giran ahora sobre la hoja en lugar de componerse derechas
  • La composición N-up respeta ahora las cajas de página 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 devolver su contador a cero: los tokens que quedaban de la pasada anterior se liberan primero, así que sus cadenas ya no hacen leak y sus elementos de array o datos de imagen inline ya no aparecen en los tokens nuevos
  • Añadir muchos content streams pequeños a un mismo array de tokens hace ahora que el array crezca al menos al doble en lugar de realojarlo y moverlo en cada añadido, lo que mantenía lentas de compilar las páginas construidas a partir de miles de streams pequeños

Version 2.766.14

Fixed

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

Version 2.766.13

Fixed

  • La exportación SVG de páginas escribe ahora el texto como UTF-8, como declara el documento, así que los caracteres acentuados y CJK sobreviven en lugar de convertirse en interrogaciones o en bytes que dejan el archivo ilegible; los códigos de control que XML no permite se convierten en U+FFFD
  • El texto tras la primera secuencia de una línea, y el texto tras un ajuste de interletraje TJ, se coloca ahora correctamente cuando la matriz de texto escala o rota el texto, que es como muchos productores de PDF fijan el tamaño de fuente
  • La elevación del texto y el escalado horizontal siguen ahora una matriz de texto escalada o rotada, y los ajustes TJ respetan el escalado horizontal
  • El texto dibujado con los modos de render 4 a 6 (pintar y recortar) se exporta en lugar de descartarse, el texto invisible sigue moviendo la posición del texto, y el texto con contorno conserva la opacidad de su trazo
  • El espaciado de palabras ya no se aplica a códigos de dos bytes que resultan valer 32, y las secuencias de espacios se conservan para que cada carácter permanezca en su posición
  • Los glifos de ligadura exportan todos los caracteres que representan, y las fuentes con códigos mezclados de uno y dos bytes se leen código a código
  • Las páginas cuyo /MediaBox no empieza en el origen caen ahora dentro del lienzo SVG en lugar de desplazarse fuera de él

Version 2.766.12

Fixed

  • Dibujar en THPDFPage.Canvas, y los metarchivos reproducidos como gráficos vectoriales con ShowMetafile en una posición y escala dadas, ya no pierden parte de sus bordes izquierdo y superior cuando establecen una región de recorte. Cada región de recorte se metía una unidad por esos dos lados, así que un borde o relleno junto al borde izquierdo o superior salía más fino que el mismo en el derecho o el inferior
  • Las regiones de recorte coinciden ahora 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 cubren ahora exactamente el texto. Se medían sobre el texto convertido a la code page del sistema, así que las secuencias con letras cirílicas, hebreas, griegas, CJK u otras fuera de esa code page recibían barras que se quedaban cortas o se pasaban del texto
  • Las barras también siguen el espaciado de caracteres, el espaciado de palabras, el escalado horizontal y los desplazamientos pasados a ExtTextOut

Version 2.766.10

Fixed

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

Version 2.766.9

Fixed

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

Version 2.766.8

Fixed

  • El dispositivo de ReportBuilder (TppHotPDFDevice) dibuja ahora el texto nativo dentro de su caja de texto. El texto se posicionaba como si su posición fuera la línea base, así que cada objeto de texto empezaba una 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í que el texto con letras fuera de la code page del sistema, como el chino en un sistema occidental, se alinea correctamente

Version 2.766.7

Fixed

  • La exportación de FastReport coloca ahora el texto del memo dentro de su memo. El texto se posicionaba como si su posición fuera la línea base, así que el texto de cada memo empezaba una altura de fuente más abajo, y el texto alineado abajo se dibujaba bajo el memo, donde el recorte lo escondía
  • Las alineaciones verticales superior, centrada e inferior miden todas desde la parte superior de la primera línea, tanto en memos planos como con etiquetas HTML

Version 2.766.6

Fixed

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

Version 2.766.5

Fixed

  • El add-on de DBGrid mide ahora el texto de las celdas con los anchos de texto Unicode con los que lo dibuja antes de cortarlo para que quepa en una columna. El texto con letras fuera de la code page del sistema, como el chino en un sistema occidental, se medía como interrogaciones y se 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 par sustituto antes del ...

Version 2.766.4

Fixed

  • El add-on de DBGrid (TDBGridHotPDFExport y DBGridHotPDFExportToFile/ToStream) dibuja ahora el texto de las celdas dentro de sus celdas. El texto se colocaba como si su posición fuera la línea base, así que el texto de cada fila se apoyaba en el borde inferior de la celda y la línea de cuadrícula de la fila siguiente lo cortaba
  • El texto de las cabeceras se centra en su fila, y el título ya no toca la parte superior de la tabla

Version 2.766.3

Fixed

  • GetLoadedPDFVersionString devuelve ahora %PDF-1.7 y similares en sistemas cuya configuración regional escribe la coma decimal; allí devolvía %PDF-1,7
  • El campo pdfVersion de GetLoadedDocumentReport está corregido de la misma manera

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 de tamaño
  • El texto y los gráficos que dibujes 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 de tamaño en la esquina superior izquierda de la página
  • El texto y los gráficos que dibujes 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 página en las unidades con las que dibujas, 1/Resolution de pulgada, así que 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 en un valor distinto de 72, los párrafos parten ahora las 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 a 144 un párrafo con márgenes anchos podía partir tras cada carácter y ocupar muchas más páginas de la cuenta
  • 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. A 144 la página de continuación cambiaba a coordenadas en puntos y su texto salía a la mitad de tamaño
  • THPDFTable empieza una página nueva solo cuando una fila alcanza el margen inferior; a 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 metarchivos dibujados centrados en la página, y las regiones de recorte de metarchivos que cubren toda la página, usan la página completa con cualquier Resolution
  • Los diagnósticos de layout de las capas de página y de las páginas volcadas informan del 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 ya 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 china o con tildes; tanto la revisión 5 como la 6 están corregidas
  • Las contraseñas AES-256 de más de 127 bytes se cortan ahora a 127 bytes como define el estándar, así que los lectores que lo siguen las aceptan
  • HotPDF abre ahora archivos AES-256 de otros productores cuya contraseña tiene letras no ASCII
  • Los archivos que versiones anteriores cifraron 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 en 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 AES-256 de PDF 2.0) ya se 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 en el lado del propietario, así que qpdf, MuPDF y otros lectores rechazaban ambas contraseñas; HotPDF solo aceptaba sus propios archivos
  • HotPDF abre ahora los archivos de revisión 6 creados por otros productores con su contraseña de usuario o de propietario en lugar de reportar una contraseña incorrecta
  • El ejemplo AES-256 R6 de la demo Security se abre en otros lectores

Version 2.765.49

Fixed

  • Las cajas de texto Unicode justificado ya no separan sus letras ni se pasan del borde derecho de la caja. Con una fuente elegida por nombre, como Arial, cada línea justificada salía unas dos veces más ancha que la caja y se solapaba con 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 carácter cae ahora donde se le pide en el mismo escenario, en lugar de empujarse cada carácter una anchura de carácter extra a la derecha

Version 2.765.48

Changed

  • Las demos HelloWorld, CJKAnnotations, TextOut y RtLTextOut para Delphi y C++Builder incrustan ahora solo los glifos que usan. Incrustaban fuentes del sistema enteras como Arial Unicode MS, así que un hello world de una página salía a unos 15 MB y el ejemplo de derecha a izquierda a unos 30 MB; las mismas páginas están ahora 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 el 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 en absoluto, porque los números de glifo de esas fuentes se confundían con marcas de tilde al poner la línea en orden visual
  • Las líneas hebreas de la demo RtLTextOut se leen ahora correctamente

Version 2.765.46

Fixed

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

Version 2.765.45

Fixed

  • SetWordSpacing funciona ahora con fuentes incrustadas. El texto en una fuente incrustada se escribe con códigos de carácter de dos bytes, y PDF aplica el espaciado de palabras solo al código de espacio de un byte, así que el espaciado se ignoraba en silencio siempre que FontEmbedding estuviera activado o el texto necesitara una fuente Unicode
  • El espaciado se añade tras cada espacio como un ajuste de posicionamiento de texto, que todo visor PDF respeta; el texto sin espaciado de palabras se escribe exactamente igual que antes
  • La fila de word-spacing de la demo TextOut muestra ahora el espacio extra

Version 2.765.44

Fixed

  • Las demos AnnotationInteraction de Delphi y C++Builder hacen ahora caber cada leyenda de enlace dentro de su rectángulo de enlace. El texto empezaba 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) se tacha ahora por el medio de las minúsculas. La línea se dibujaba media línea por debajo de la línea base, bajo el subrayado, así que el texto tachado parecía doblemente subrayado; esto afectaba también a <s> en TextOutHTML
  • El texto rotado recibe ahora el subrayado por debajo de la línea base en lugar de por la parte superior de las letras, y el tachado atraviesa las letras
  • Las líneas de tachado son tan gruesas como los subrayados en todos los caminos de texto; los caminos Unicode y el latino simple dibujaban una línea mucho más fina

Version 2.765.42

Fixed

  • La demo HTMLText produce ahora una sola página con las cinco muestras. Añadía una segunda página después de aquella con la que el documento ya empezaba, dejando la primera página vacía, y empezaba a escribir cerca de la parte inferior 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

  • Las demos Layer de Delphi y C++Builder muestran ahora 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
  • La leyenda de las demos Patterns se dibuja en negro en lugar de rellenarse con el patrón de teselado, que la rompía en fragmentos del patrón
  • La leyenda de las demos AlphaTransparency ya no se dibuja en verde semitransparente con el modo de fusión Multiply; las formas transparentes conservan ahora su transparencia para sí mismas

Version 2.765.40

Fixed

  • Las demos GraphicDraw de Delphi y C++Builder dibujan ahora correctamente las líneas tangentes de sus ejemplos de curvas. La primera línea de 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 desde su punto de inicio a través de su punto de control hasta su punto final
  • Los títulos 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 dibujados después de PrintHyperlink conservan los colores establecidos antes. Un color gris volvía como 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 hipervínculo se aplica ahora solo al texto del enlace, sin importar el espacio de color que estuviera usando la página

Version 2.765.38

Fixed

  • TextOutOutline dibuja ahora los contornos de glifo al tamaño de fuente con cualquier Resolution. Con una Resolution distinta de 72 los contornos se escalaban a la baja una vez más, por ejemplo a la mitad de su tamaño a 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

  • Las demos CJKUnicode de Delphi y C++Builder muestran ahora 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 se 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 amontona sus caracteres unos encima de otros. Cuando la misma fuente se usaba para una segunda secuencia de texto, a muchos ideogramas se les asignaban anchos de unas pocas unidades en lugar de un em completo
  • Las fuentes afectadas guardan menos anchos de avance que glifos; los glifos posteriores al último ancho guardado usan ahora ese ancho, como exige el formato TrueType

Version 2.765.35

Fixed

  • El texto Unicode en fuentes cuya rejilla de diseño tiene menos de 1000 unidades por em, como SimHei y SimSun con 256, se espacia ahora correctamente. Los anchos de glifo escritos en el PDF eran unas cuatro veces demasiado grandes, así que los visores dejaban huecos anchos tras los espacios y otros caracteres usados por primera vez

Version 2.765.34

Fixed

  • El escenario de imagen escaneada de la demo PDFOptimize comprime ahora una página de texto real. Su imagen de prueba de 1 bit salía totalmente negra, así que CCITT G4 y JBIG2 se comparaban sobre un rectángulo sólido
  • Los escenarios de imagen de la demo PDFOptimize incrustan ahora 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 imagen en lugar de venir dominados por una fuente entera incrustada

Version 2.765.33

Fixed

  • La demo E-Invoice maqueta ahora la página visible de la factura desde arriba: el título está en la parte superior de la página y la factura, las partes y los importes siguen por debajo. La página se dibujaba del revés en cuanto al orden, con el título cerca del borde inferior y la nota al pie arriba

Version 2.765.32

Fixed

  • Las imágenes JBIG2 codificadas estrictamente sin pérdidas (Lossless con LossyLevel = 0) conservan ahora cada píxel. El borrado 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 escaneos (LossyLevel = 5 con RemoveIsolatedBlackPixels) siguen quitando las motas 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 cada banda una fila de píxeles más alta de lo previsto, así que las bandas sumaban más filas que la imagen

Version 2.765.30

Fixed

  • TextWidth, TextHeight, GetWideTextWidth y GetWideCharAdvances responden ahora en las unidades de página de la Resolution, las unidades en las que se dibuja el texto. Con una Resolution distinta de 72 respondían en puntos, así que el texto medido no encajaba con las coordenadas donde se colocaba
  • Con una Resolution distinta de 72, el texto dibujado con TextOut empieza ahora en su Y en lugar de demasiado arriba, y los subrayados y tachados cubren todo el texto a la distancia y 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 las secuencias con estilo de TextOutHTML ya no se solapan
  • Una secuencia de fallback de fuente dentro de WideTextOutBoxEx conserva el tamaño de fuente con cualquier Resolution en lugar de encoger
  • La salida con Resolution 72 no cambia

Version 2.765.29

Fixed

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

Version 2.765.28

Fixed

  • Mostrar un metarchivo EMF ya no imprime líneas de diagnóstico como [WMF_DEBUG] EMR_POLYGON16 record found en la salida estándar de las aplicaciones de consola. La traza del metarchivo quedó activada en la compilación release

Version 2.765.27

Fixed

  • El texto de los metarchivos EMF mostrados con ShowMetafile queda ahora a la altura a la que lo dibuja Windows. El texto alineado arriba, el comportamiento por defecto de TCanvas.TextOut, se dibujaba una altura de línea más arriba, y el texto alineado abajo también quedaba demasiado alto
  • El texto de metarchivos alineado a la línea base y el rotado no cambian

Version 2.765.26

Fixed

  • ShowMetafile con posición y escala dibuja ahora el metarchivo con su esquina superior izquierda en el punto indicado y escalado como se pide. Antes ignoraba estos argumentos y siempre dibujaba el metarchivo 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 de los metarchivos EMF mostrados con ShowMetafile trazan ahora el arco que describen, en cualquier dirección, 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 metarchivo tuviera un offset

Version 2.765.24

Fixed

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

Version 2.765.23

Fixed

  • Con AutoShapeArabic activado, TextOut y UnicodeTextOut unen ahora las letras árabes, persas y urdú 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 se aplica a AutoShapeSyriac, AutoShapeNko, AutoShapeAdlam, AutoShapeHanifiRohingya y al reordenado de puntos hebreos (sfHebrewReorder en ShapingFeatures)
  • Con estas opciones activadas, el texto cuyos números de glifo cayeran por casualidad en los rangos de caracteres árabes o hebreos podía mostrarse con glifos equivocados; esto ya no ocurre
  • Las anotaciones de texto libre dibujadas en la fuente de la página se modelan de la misma manera que el texto de la página
  • La salida con estas opciones desactivadas no cambia

Version 2.765.22

Fixed

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

Version 2.765.21

Fixed

  • Los sectores de tarta dibujados con Pie o DrawPie son ahora formas cerradas únicas, así que su contorno tiene esquinas propias donde los bordes rectos encuentran el arco en lugar de dos extremos de línea sueltos
  • Las cuerdas de los metarchivos EMF mostrados con ShowMetafile se cierran ahora por la línea recta entre los extremos de su arco. Antes la línea iba a parar a un punto lejos de la forma

Version 2.765.20

Fixed

  • DrawArc y DrawPie dibujan ahora la parte de la elipse que describe su documentación: en sentido antihorario desde el punto inicial al final, como hacen las llamadas Arc y Pie del GDI de Windows. Antes dibujaban la otra parte, así que un arco de un cuarto salía como tres cuartos
  • Los sectores de tarta, las cuerdas y los arcos ArcTo de los metarchivos EMF mostrados con ShowMetafile coinciden ahora con el dibujo que traza Windows, para ambas direcciones de arco. Antes mostraban la parte opuesta de la elipse; los arcos simples ya eran correctos
  • Los métodos basados en ángulos Arc, Pie, Chord y ArcTo no cambian

Version 2.765.19

Fixed

  • Los rectángulos rotados dibujados con RectangleRotate son ahora formas cerradas, como los dibujados con Rectangle. Trazar el contorno de 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 PDF generados se redondean ahora correctamente. Valores como -50 se escribían antes como -49.99, así que coordenadas, offsets y posiciones negativos en el contenido de página, rectángulos de anotación y entradas similares podían desviarse hasta 0.01 unidades
  • Los valores negativos se redondean ahora con las mitades alejadas de cero, en espejo exacto de los positivos; un valor negativo que redondee 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 chinos, japoneses, coreanos, árabes, cirílicos u otros no ASCII muestran ahora su texto en todos los visores. Antes confiaban en 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 llevan ahora su propia apariencia (ISO 32000-1 12.5.5): el texto se dibuja en la fuente actual de la página, incrustada y con subsetting junto con el texto de la página, se ajusta a la caja de la anotación (entre palabras, o entre caracteres para texto sin espacios), se alinea según la justificación elegida y se coloca sobre el mismo marco y relleno que antes
  • La apariencia también se escribe bajo PDF/A, donde la fuente incrustada mantiene el documento conforme y el texto de la anotación es ahora visible en lugar de una caja vacía
  • Las anotaciones de texto libre con contenidos solo ASCII se escriben exactamente igual que antes

Version 2.765.16

Fixed

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

Version 2.765.15

Fixed

  • En la demo Table el importe del subtotal abarca ahora las columnas Qty y Price como estaba previsto; usaba el í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 se dibujan ahora dentro de su celda y respetan la alineación vertical; antes se colocaban una altura de imagen más abajo, fuera de la celda y fuera de la tabla

Version 2.765.13

Fixed

  • Los anchos del texto Unicode (GetWideTextWidth y la medida de justificación) coinciden ahora con la fuente; con fuentes como Arial salían casi el doble de grandes
  • 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 se maquetan de nuevo correctamente: el texto corto de las celdas ya no se parte en varias líneas, los valores alineados a la derecha llegan hasta el borde de la celda y el texto 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 listan ahora la fuente ZapfDingbats (/ZaDb) en los recursos por defecto del formulario. Los visores que dibujan estos campos por sí mismos (el comportamiento por defecto 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 la demo CJKAnnotations el primer icono de nota de cada fila de idioma queda ahora alineado con los demás iconos de esa fila; estaba colocado 5 puntos más arriba

Version 2.765.10

Fixed

  • Las fuentes solicitadas por su nombre en inglés se encuentran ahora 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 una fuente ausente, porque Windows informa del nombre en el idioma del sistema, y el texto se establecía silenciosamente 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, se incrustan ahora como fuentes independientes válidas. Antes, cada tabla de la fuente incrustada apuntaba a datos equivocados, de modo que los visores la rechazaban y recurrían a una fuente del sistema, y en ordenadores sin esa fuente el texto mostraba glifos incorrectos
  • Esto afectaba también 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 se guardan de nuevo como UTF-8 con una marca de orden de bytes (BOM). Sin ella, Delphi lee el archivo fuente en la página de código del ordenador 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 las demos salía con caracteres ilegibles en los PDF generados, y los mensajes de error de la biblioteca mostraban caracteres equivocados
  • Las demos CJKAnnotations, Annotations, HelloWorld, RtLTextOut, PageSizes, TextOut, Showcase y ViewerPref vuelven a producir el texto previsto dondequiera que se compilen

Version 2.765.7

Fixed

  • La información del documento dada como UTF-8 (Title, Author, Subject, Keywords, los títulos de los article threads y SetLoadedDocumentInfo con la familia SetLoadedTitle) se almacena ahora como Unicode, de modo 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 página de código del sistema (por ejemplo un título chino en un sistema Windows en chino) también se almacena correctamente, ya que los bytes que no forman UTF-8 válido se leen en esa página de código

Version 2.765.6

Fixed

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

Version 2.765.5

Fixed

  • Las etiquetas de página que no empiezan en la primera página cubren ahora también 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 ello los visores podían mostrar etiquetas equivocadas
  • SetLoadedPageLabel mantiene ahora los rangos en orden de página y reemplaza un rango que empieza en la misma página, de modo que los visores muestran las etiquetas previstas; antes, los rangos nuevos se añadían fuera de orden y podían repetirse
  • SetLoadedPageLabel ya no descarta las etiquetas existentes de los documentos que las guardan en un objeto aparte, y actualiza también los árboles de etiquetas repartidos en varios nodos
  • Los prefijos de etiquetas de página dados como UTF-8 se almacenan ahora 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) se escriben ahora como Unicode, de modo que los lectores de pantalla y los visores muestran texto acentuado y CJK en lugar de caracteres ilegibles
  • Lo mismo se aplica al texto y al autor de las anotaciones añadidas a documentos cargados con los métodos AddLoaded...Annotation, al igual que en las anotaciones creadas en documentos nuevos

Version 2.765.3

Fixed

  • AddGoToLink puede enlazar ahora a una página que se añade más adelante en un documento nuevo, de modo que un índice en la primera página puede contener enlaces hacia delante; antes, tales enlaces se descartaban sin ningún error
  • Un enlace cuya página de destino nunca se añade conserva su área pero se queda sin acción, en lugar de apuntar a una página inexistente

Version 2.765.2

Fixed

  • SetLoadedOutlineOpen abre y cierra ahora los marcadores de los documentos cargados; antes escribía una clave que los visores ignoran y el marcador conservaba su estado
  • AddLoadedOutline, SetLoadedOutlineURI y SetLoadedOutlineDestination actúan ahora sobre el marcador solicitado; con cualquier índice superior a 0 cambiaban el marcador equivocado o no hacían nada
  • Añadir un marcador a un documento cargado actualiza ahora los contadores de elementos visibles de su padre, sus ancestros y el outline, así que los visores ya no muestran estados de despliegue ni totales de elementos equivocados
  • Poner un enlace web en un marcador cargado elimina ahora su destino de página, y fijar un destino elimina su acción, ya que un marcador solo puede llevar una de las dos cosas
  • Los títulos de marcadores dados como UTF-8 a AddLoadedOutline y SetLoadedOutlineTitle se almacenan ahora como Unicode en lugar de como bytes ilegibles

Version 2.765.1

Fixed

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

Version 2.765.0

Added

  • HPDFTokenizeContentStreamAppend tokeniza un content stream directamente en un array de tokens existente, de modo que quienes combinan varios streams se ahorran un array temporal por stream

Changed

  • Compilar una página para renderizarla ya no reserva memoria por cada número y operador de su content stream, y el contenido de la página se tokeniza directamente en la display list de la página en lugar de copiarse ahí
  • El renderizado paralelo de páginas escala mucho mejor en un documento frío: en un documento de prueba vectorial de 128 páginas, 4 workers terminan ahora entre 3 y 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 un 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 a menudo el estado gráfico (q/Q) ya no reserva memoria por cada guardado, lo que hacía que los hilos worker del renderizado paralelo de páginas se esperaran unos a otros dentro del gestor de memoria
  • El renderizado paralelo en frío de un documento de prueba vectorial de 128 páginas es un 7–10% más rápido con 4 workers y en torno a un 5% más rápido con un solo worker; la salida renderizada no cambia

Version 2.764.6

Fixed

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

Version 2.764.5

Fixed

  • SetStructureClassMapEntry puede registrar ahora un diccionario de atributos bajo varios nombres de clase, o de nuevo bajo el mismo nombre, sin liberarlo
  • Antes, eliminar o reemplazar una de esas entradas liberaba el diccionario compartido, de modo que las entradas /ClassMap restantes apuntaban a memoria liberada y guardar el documento podía escribir basura o lanzar una violación de acceso
  • Un diccionario de atributos creado directamente se convierte ahora en un objeto indirecto al registrarse, y cada entrada /ClassMap hace referencia a él; el documento es propietario del diccionario, así que los llamadores no deben liberarlo

Version 2.764.4

Fixed

  • RemoveUnusedLoadedPageResources ya no escribe en una tabla de recursos después de eliminarla, cuando la tabla de recursos /Font, /XObject u otra de una página está escrita directamente dentro de /Resources y todas sus entradas están sin usar
  • Antes, esa escritura iba a memoria ya liberada, lo que normalmente pasaba desapercibido pero podía corromper la memoria o lanzar una violación de acceso 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) mediante PubSecKeyMaterial, por LoadFromFile o BeginIncrementalUpdate, ya no lee sobres de destinatarios de memoria que ya había sido liberada durante la recuperación de la clave del archivo
  • El fallo dependía de cómo se reutilizara la memoria: el documento normalmente se 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 sobres corregida

Version 2.764.2

Fixed

  • Las apariencias de campos generadas para formularios cargados, por AddLoadedTextField y los demás métodos de campos AddLoaded*, EnsureLoadedFieldAppearanceStream o FlattenFormFields, ahora conservan su propia referencia a la fuente /DR del AcroForm en lugar de compartir la entrada /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 después el documento podía toparse con una violación de acceso 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 de /DR se convierte en un objeto indirecto la primera vez que una apariencia la usa, de modo que la apariencia del campo y /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 flujo de archivo que la carga ya había cerrado; en su lugar vuelve a escanear el archivo cargado, de modo que los miembros de los flujos de objetos siguen disponibles para ExtractObjectFromStream
  • El fallo dependía de cómo estuviera dispuesta la memoria: normalmente pasaba desapercibido, pero podía provocar una violación de acceso o escanear memoria sin relación, sobre todo en compilaciones de 64 bits
  • FindAllObjectStreams, ScanAndLoadReferencedObjects y ForceLoadMissingReferencedObjects ya no hacen nada si se llaman fuera de una carga, en lugar de tocar el flujo cerrado

Version 2.764.0

Changed

  • Una instancia de THotPDF, por ejemplo un componente colocado en un formulario, ya puede escribir cualquier número 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, 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 archivo siguiente; con ReproducibleOutput activado, un segundo documento de una instancia reutilizada es byte a byte igual que ese documento producido por una instancia nueva
  • Los registros hechos entre EndDoc y el siguiente BeginDoc, como AddPDFAOutputIntent o los scripts añadidos a través de Names, pertenecen al documento siguiente y BeginDoc ya no los borra
  • Las configuraciones de propiedades como FileName, Compression, PDFACompliance, Author y Title, junto con las capas de página y las cadenas de fallback de fuentes, se mantienen para el documento siguiente; una versión PDF subida 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 una vez que un documento protegido se cifra, BeginDoc lanza una excepción cuando ActivateProtection sigue activo y no se ha definido una contraseña nueva, en lugar de proteger el archivo siguiente con contraseñas vacías
  • Empezar 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 arriesga una violación de acceso cuando un párrafo no cabe en la página actual; el párrafo ahora se dibuja siempre en la página nueva
  • La misma corrección cubre párrafos, elementos de lista y líneas horizontales en el renderizador de bloques compacto que usa HPDFRenderHTMLDocument
  • El fallo dependía de cómo estuviera dispuesta la memoria, así que solo aparecía 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 sobre una instancia de THotPDF que ya ha escrito un documento nuevo ya no acaba en una violación de acceso; se lanza una excepción que pide una instancia nueva, porque la instancia sigue conteniendo los objetos, imágenes, fuentes y campos de formulario del documento terminado
  • Más allá del fallo, 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 se ve afectado

Version 2.762.0

Fixed

  • Las anotaciones de texto, texto libre, línea, cuadrado, círculo, sello y adjunto de archivo son visibles en documentos PDF/A-2, PDF/A-3, PDF/A-4 y PDF/X-6; llevaban un flujo de apariencia vacío que solo satisfacía al validador y, como los visores dibujan la apariencia, no se veía nada
  • Estas apariencias dibujan ahora la anotación: los marcos del cuadrado y del círculo, la línea, un icono de nota y un icono de adjunto en el color de la anotación, el marco del sello y el cuadro de texto libre relleno con su color de fondo
  • La salida PDF 2.0 da a cada una de estas anotaciones, a las anotaciones de marcado extendidas y a los campos de formulario nuevos un flujo de apariencia, como exige la Tabla 166 de ISO 32000-2, y escribe /NeedAppearances false; fuera de PDF/A y PDF/X el texto libre y el nombre del sello se dibujan en Helvetica
  • En PDF/A y PDF/X las apariencias del texto libre y del sello no dibujan texto, porque cada fuente usada ahí tiene que ir incrustada; el texto permanece en la anotación para que lo muestren los visores

Version 2.761.6

Fixed

  • Las anotaciones de adjunto de archivo (AddFileAttachmentAnnotation) se pueden abrir y volver a guardar en los visores: la especificación de archivo escribía el propio flujo del archivo incrustado como /EF, cuando ISO 32000-1 Tabla 44 exige un diccionario /EF que contenga el flujo bajo /F, de modo que los lectores reportaban que faltaba la entrada del archivo
  • El flujo del archivo incrustado de ese tipo de adjunto lleva el tipo /EmbeddedFile, y el texto de la anotación también se guarda como 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 árbol de nombres en orden clasificado, 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 perderse 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 árbol de nombres editado no se escribía de vuelta cuando vivía en un diccionario directo, de modo que las entradas nuevas se perdían. Ambos insertan en la posición que marca el orden, también en árboles repartidos en nodos /Kids, y reemplazan una entrada existente del mismo nombre
  • AddLoadedDocumentJavaScript guarda una acción JavaScript como valor del árbol de nombres en lugar de un flujo de script pelado, y AddLoadedNamedDestination escribe el operando de zoom de su destino /XYZ
  • RemoveLoadedJavaScript y RemoveLoadedJavaScriptAll quitan los scripts del propio documento; antes solo cambiaba la lista devuelta por los getters y los scripts seguían en el archivo guardado
  • SetDocumentAttachmentMetadata renombra el adjunto que se le da; antes renombraba la clave del último adjunto del árbol, y la entrada renombrada ahora se mueve a la posición que marca 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 faltaba la fuente, de modo que los visores que construyen las apariencias de los campos no tenían fuente con la que construirlas
  • AddLoadedComboBox crea un combo box de verdad; activaba la marca Edit en lugar de la marca Combo, de modo que el campo era un list box que los visores mostraban como una lista con todas las opciones
  • Los campos añadidos 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 remiten sus cadenas /DA
  • AddLoadedTextField, AddLoadedCheckBox, AddLoadedComboBox, AddLoadedListBox y AddLoadedPushButton dan al campo nuevo un flujo de apariencia, de modo que se muestra en los visores que no construyen apariencias y en los documentos cuyo formulario pone /NeedAppearances false
  • Las apariencias generadas para los push buttons cargados (al añadirlos, redibujarlos o aplanarlos) dibujan la leyenda, 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 de list boxes de selección múltiple regeneran el flujo de apariencia, donde el archivo guardado seguía mostrando el texto antiguo en todos los visores y en 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 en campos nuevos con AutoFormAppearances como en campos cargados que se redibujan o aplanan
  • AnalyzeLoadedSignatureRevisions clasifica como relleno de formulario el nuevo diccionario de apariencia, el flujo de apariencia y sus recursos que un relleno añade tras firmar, igual que ya hacía con el propio campo, de modo que rellenar 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 añadidos 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 incrustan a su propia profundidad de bits con su propia paleta, lo que además hace los datos de imagen más pequeños
  • Los bitmaps de 1 bit cuya paleta lista el blanco antes del negro ya no salen como un negativo con compresión CCITT Group 3, CCITT Group 4 o JBIG2, incluidos los caminos de JBIG2 por lotes y entre páginas; el color de paleta más oscuro siempre se codifica como negro
  • icAutoMono y AddMonochromeImageAuto mantienen en Flate un bitmap de 1 bit con paleta con colores 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 añadidas con compresión DCT conservan su propio modelo de color: los JPEG en escala de grises se escriben como DeviceGray y los JPEG CMYK como DeviceCMYK, donde antes todo JPEG se declaraba DeviceRGB; los lectores mostraban entonces los archivos en escala de grises con caracteres extraños o truncados y los CMYK con colores equivocados
  • Los JPEG CMYK que llevan la marca Adobe (la salida habitual de Photoshop) reciben el array /Decode invertido que necesitan sus valores de muestra (ISO 32000-1 8.9.5.2 y 7.4.8)
  • Las comprobaciones de espacio de color de PDF/A ven ahora 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 firma en lugar de por 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 añade a un documento cargado un campo de firma listo para firmar, de modo que 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 rellenan SignPDFWithPFX, PreparePDFForSigning e InsertSignatureHex; tras BeginIncrementalUpdate y SaveIncrementalUpdate la nueva firma cubre el archivo completo mientras las firmas anteriores siguen siendo válidas
  • El motivo, la ubicación y la información de contacto opcionales, el SubFilter y el tamaño de firma reservado se pueden establecer por campo; el AcroForm se marca como firmado y de solo adición, y al documento firmado no se le añade ninguna marca de regeneración de apariencia

Fixed

  • El flujo de trabajo multi-firma documentado para BeginIncrementalUpdate describe ahora pasos que funcionan; la descripción anterior se apoyaba en una página actual que no existe tras la carga y en un campo de firma sin espacio de firma reservado, por lo que la firma fallaba

Version 2.760.1

Fixed

  • DrawQRCode, DrawDataMatrix, DrawPDF417 y DrawAztec restauran tras dibujar el color de relleno de la página, como está documentado; las figuras rellenadas después solían quedarse con el color del código de barras
  • Estos códigos de barras se dibujan como un solo camino, con cada racha de módulos oscuros de una fila fusionada en un único rectángulo, de modo que 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

  • Asignar aes256 a CryptKeyLength sube la salida a PDF 1.7 cuando es inferior, igual que ya hacen otras funciones dependientes de la versión, de modo que los documentos quedan protegidos de verdad con AES-256. Con la salida PDF 1.6 por defecto se escribían con AES-128 sin ningún aviso; con StrictVersionLock activado, una versión inferior 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 del cifrado de clave pública enumeran los tipos de clave soportados

Version 2.759.0

Fixed

  • Los PDF firmados ahora dejan fuera de los rangos de bytes firmados la cadena /Contents completa, incluidos sus delimitadores < y >, como exige ISO/IEC 32000-1 12.8.3.3; los delimitadores solían quedar firmados, y los validadores que comprueban el rango de bytes contra el valor de la firma lo reportan como un rango de bytes no válido
  • La validación PDF MAC de las firmas que llevan un MAC adjunto acepta tanto el rango de bytes 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 rangos de bytes contenga cualquier cosa aparte de la propia cadena /Contents de la firma, cerrando una brecha de signature-wrapping en la que 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 camino, algo que los visores rechazan
  • Las anotaciones de texto libre creadas en una página nueva llevan la cadena de apariencia por defecto que exige ISO 32000-1, de modo que los visores pueden maquetar su texto en lugar de mostrar una caja vacía

Version 2.758.0

Fixed

  • El decodificador JBIG2 integrado coloca cada símbolo posterior al primero de una franja de texto donde lo pone ISO/IEC 14492; cada símbolo adicional solía caer un píxel más a la derecha, de modo que el texto de los escaneos JBIG2 hechos por otros codificadores se iba separando
  • Las imágenes JBIG2 escritas con el codificador aritmético nativo y un diccionario de símbolos que contiene un solo glifo ya pueden leerlas otros visores de PDF; los identificadores de símbolo se codificaban con un bit en lugar de con ninguno, lo que hacía que esos visores fallaran en el primer glifo
  • Los diccionarios de símbolos que combinan glifos mediante refinement y agregación se decodifican con el espaciado estándar, en línea con otros decodificadores JBIG2
  • Las imágenes JBIG2 que comparten un diccionario de símbolos global escriben /DecodeParms como un array que coincide con el 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* dibujan ahora códigos de barras reales para todas las simbologías; la mayoría solían devolver barras alternas uniformes sin ningún dato. 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 las anchuras y alturas de las barras con el sistema de coordenadas de la página, de modo que los códigos de barras siguen siendo legibles cuando la escala del documento no es un punto por unidad
  • Code 128, Code 93 y la familia EAN / UPC mantienen anchuras de elemento exactas de uno a cuatro módulos sea cual sea el Ratio asignado; cualquier valor distinto de 2 solía hacerlos ilegibles
  • EAN-8, EAN-13, UPC-A y UPC-E a los que solo se les dan sus dígitos de datos reciben el dígito de control añadido; el último dígito de datos solía tomarse como dígito de control. Con Checksum habilitado, UPC-A ya no pierde su último dígito de datos, y el dígito de control UPC-E (que también selecciona la paridad de las barras) se calcula a partir del número UPC-A expandido
  • Los dígitos de control MSI son correctos para números con un número impar de dígitos, los códigos POSTNET reciben su dígito de corrección, e Interleaved 2 of 5 conserva el último dígito de un número de longitud impar añadiendo 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 pliega las minúsculas a mayúsculas, y Codabar conserva los caracteres de inicio y fin suministrados
  • Los caracteres que una simbología no puede representar ahora lanzan una excepción; Code 39 y Code 128 solían eliminarlos o sustituirlos y Codabar leía fuera de su tabla de caracteres
  • GS1-128 con Checksum habilitado ya no añade 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 todas las versiones de la 10 a la 40 (y para la versión 7-Q)
  • La selección automática de modo mantiene el texto con minúsculas en modo byte, de modo que una URL como https://example.com ya no se codifica y se relee en mayúsculas
  • El texto cuya longitud termina en uno o dos dígitos o en un carácter alfanumérico recibe un símbolo lo bastante grande para él; antes se perdían los últimos caracteres
  • Codificar dos veces con la misma instancia de THPDFQRCode ya no mezcla el símbolo anterior en el nuevo
  • Encode devuelve False cuando una 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 de patrón tipo finder y de equilibrio 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, de byte y ECI, cargas útiles UTF-8 y versiones con varios patrones de alineación

Added

  • HPDFQRFunctionMap y HPDFQRExtractDataWords exponen la disposición de módulos y el desentrelazado de bloques con detección de errores para el 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 emplea la premultiplicación alfa SSE2 en los objetivos Delphi x86 y x64 compatibles, preservando el redondeo de píxeles y la cancelación, con almacenamiento temporal acotado y una alternativa escalar

Version 2.755.8

Fixed

  • El renderizado en primer plano puede reanudarse una vez que el prefetch de páginas cancelado ha liberado 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 hilo, y los rangos de páginas no válidos ya no filtran un worker suspendido

Version 2.755.7

Fixed

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

Version 2.755.6

Fixed

  • El renderizador SIMD de rectángulos respeta ahora las reglas de relleno compuestas even-odd y nonzero, preservando los agujeros, la dirección de los subcaminos reflejados y la colocació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 de selección múltiple reservan ahora los valores de opción exactos antes de interpretar las grafías de compatibilidad hexadecimales en XFDF, evitando que los valores literales seleccionen una opción diferente y manteniendo los valores almacenados coherentes con los índices de selección

Version 2.755.4

Fixed

  • La extracción de texto de texto CID vertical (WMode 1) ahora mueve el lápiz según el desplazamiento ISO 32000-1 9.4.4, de modo que el espaciado de caracteres acorta el paso por la columna tal como define la especificación en lugar de alargarlo
  • Un ajuste de posición TJ en texto vertical ahora mueve el lápiz hacia abajo o arriba por la columna en lugar de hacia los lados, de modo que las columnas extraídas ya no se dividen y el orden de lectura sigue siendo de arriba abajo
  • El array /DW2 del CIDFont se lee en su orden especificado [v1y w1y] durante la extracción, de modo que los glifos que dependen de los valores predeterminados avanzan un em completo en lugar de 0,88 em
  • Los orígenes de los glifos verticales extraídos permanecen en la línea central de la columna, y las cajas de glifos se colocan en el origen vertical menos el vector de posición, con la componente horizontal predeterminada a la mitad del ancho del glifo
  • Las entradas de lista /W2 que describen varios CID consecutivos aplican ahora sus métricas a todos los CID del tramo durante la extracción en lugar de solo al primero
  • El renderizador de páginas y el intérprete de extracción de texto comparten ahora una misma implementación de las reglas de desplazamiento de glifos y TJ, de modo que 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 porta los mismos campos
  • HPDFParsePSD2QcStatement analiza una declaración PSD2 que ya tenga en DER y rechaza cualquier entrada mal formada

Deprecated

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

Fixed

  • La declaración PSD2 de certificados cualificados se lee ahora con su estructura ETSI TS 119 495, informando de cada rol del proveedor de servicios de pago con el OID y el nombre del rol, el nombre de la autoridad nacional competente y el identificador de la autoridad; los certificados PSD2 reales antes no informaban de ningún rol
  • Una declaración PSD2 mal formada, incluidas longitudes desbordadas o no mínimas, componentes ausentes o de más, tipos de cadena erróneos y nombres que no son UTF-8 válido, se ignora ahora en su conjunto en lugar de informarse parcialmente

Version 2.755.2

Fixed

  • El renderizado de páginas de texto vertical (WMode 1) avanza ahora cada glifo según el desplazamiento en espacio de texto ISO 32000-1 9.4.4: el espaciado de palabras ya no se escala por el tamaño de fuente y ya no se suma a códigos CID de dos bytes, pues solo se aplica al código de espacio de un byte
  • El espaciado de caracteres en texto vertical se aplica a lo largo de la dirección de escritura exactamente como lo define la especificación, de modo que las columnas compuestas con Tc distinto de cero se renderizan a la misma altura que en otros visores conformes
  • El texto invisible (modo de renderizado 3 y contenido opcional oculto) avanza las columnas verticales con las mismas reglas que el texto pintado, manteniendo los glifos visibles posteriores en su lugar
  • El array /DW2 del CIDFont se lee en su orden especificado [v1y w1y], de modo que las fuentes que dependen de los valores predeterminados 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 la componente horizontal predeterminada a la mitad del ancho del glifo, lo que centra las columnas en la posición del lápiz
  • Las entradas de lista /W2 que describen varios CID consecutivos aplican ahora sus métricas a todos los CID 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, de modo que un fallo a mitad de la exportación ya no reemplaza el destino por un documento truncado
  • El escáner de intercambio de streams FDF rastrea las cadenas 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 campos de elección descodifica las grafías mixtas PDFDocEncoding, UTF-16 y hexadecimal con un único comparador, de modo que 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 los viajes de ida y vuelta escritos por herramientas de terceros
  • La exportación FDF omite los campos de solo widget sin nombre de campo, en línea con 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 forma que sigan visibles con 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 encabezado e informa de un demo.xml ausente en lugar de bloquearse
  • Los scripts de construcción de la DLL Win64 ABI y de los workers de códecs localizan dcc64 en bin64 en RAD Studio 12 y posteriores, y las construcciones completas de la biblioteca de C++Builder detectan y limpian los restos de licencia de prueba del directorio de salida compartido

Version 2.755.0

Added

  • Los campos de elección cargados de selección múltiple ahora intercambian valores individuales seleccionados mediante las API FDF de archivo y stream y los callbacks de XFDF conscientes de arrays, preservando los límites de las opciones y sincronizando los índices de selección en la importación

Version 2.754.6

Fixed

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

Version 2.754.5

Fixed

  • Los valores de formulario y los elementos de texto de anotaciones de XFDF ahora conservan su contenido exacto sin insertar espacios de formato, incluidos los espacios iniciales y finales, los tabuladores y los saltos de línea

Version 2.754.4

Fixed

  • Los helpers de valor, valor predeterminado y longitud máxima de campos cargados ahora respetan las entradas heredadas e indirectas, mientras que el restablecimiento de campos preserva los tipos de los valores predeterminados, sincroniza las selecciones de elección y los estados de botón, y deja los campos hermanos intactos; las apariencias de botón regeneradas conservan el estado seleccionado y unos límites de renderizado válidos

Version 2.754.3

Fixed

  • Los campos hijos con nombre cargados siguen siendo direccionables individualmente cuando su tipo de campo se hereda, con el tipo, los flags y las opciones heredados disponibles a través de los helpers de campo, y su eliminación preserva los campos hermanos y sus widgets

Version 2.754.2

Fixed

  • Las apariencias regeneradas de los campos de elección cargados ahora muestran etiquetas de opción Unicode conservando los valores de exportación, dibujan 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 de elección cargado ahora mantiene sus índices de opción seleccionada 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 los arrays de selección compartidos

Version 2.754.0

Added

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

Fixed

  • Se corrigieron los avances de la matriz de texto, las anchuras de fuentes CID indirectas, la restauración de recortes q/Q y de Form, la orientación JPEG reducida, las máscaras suaves de imagen y las paletas de streams Indexed para restaurar la maquetación del texto y el contenido de imagen en las páginas afectadas
  • Los glifos rellenos TrueType incrustados pequeños ahora usan antialiasing de cobertura local para mejorar los trazos finos a bajo DPI; las peticiones OCR canceladas se informan como cancelación incluso cuando el motor de reconocimiento devuelve un 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 admitidas 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 del bitmap de página ahora comprueba la cancelación mientras limpia bloques acotados, libera los bitmaps sin terminar y evita retrasar el renderizado en primer plano mientras el prefetch cancelado termina de inicializarse

Version 2.752.4

Fixed

  • Cerrar o recargar un documento ahora libera sus grafos de objetos PDF y sus cargas útiles de stream, incluida la propiedad compartida y cíclica, sin liberar dos veces las referencias enlazadas

Version 2.752.3

Fixed

  • Los cambios de valor de las casillas de verificación cargadas 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 después de construir el documento ahora fija la marca de tiempo de creación, de modo que los guardados equivalentes siguen siendo idénticos byte a byte entre tics de reloj

Version 2.752.1

Fixed

  • Los nombres de campos de formulario cargados ahora descodifican las cadenas PDF de forma consistente, de modo que los campos con nombres UTF-16 pueden encontrarse y actualizarse 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 la anotación y actualiza su referencia opcional a la página de destino

Version 2.751.0

Fixed

  • Eliminar páginas cargadas ahora mantiene los destinos con nombre, los destinos de esquema, los árboles de estructura, los árboles padre 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 flujos de objetos, preservando fuentes, espacios de color y ActualText, y corrigiendo el texto chino ilegible, la apariencia de página alterada y el texto de extracción cambiado
  • Los documentos cifrados con contraseña de usuario vacía ahora se cargan y empiezan a reescribirse directamente, mientras que los flujos de objetos bloqueados fallan de forma clara en lugar de producir un documento incompleto
  • Los objetos numéricos sin modificar conservan su precisión de origen, evitando las derivas sutiles de color y transparencia tras una reescritura
  • Las páginas copiadas retienen sus nombres y referencias de recursos validados, corrigiendo los errores de diccionarios de recursos indirectos y las imágenes mal enlazadas

Version 2.748.6

Fixed

  • Corregida una subsección de referencia cruzada que declara más entradas de las que la tabla contiene: recorría el total declarado sin que quedaran datos que leer, así que un archivo malformado de cuarenta bytes tardaba decenas de segundos en rechazarse
  • Corregido el runner de jobs, que perdía todos los resultados ya producidos cuando una operación lanzaba una excepción, y la importación de HTML, que perdía un objeto de imagen cuando el flujo que lo rodea no podía crearse

Version 2.748.5

Fixed

  • Corregido 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 cada 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 PBES2 moderno no se veían afectados, por eso los dos comportamientos diferían
  • Corregido el validador por lotes de firmas y la caché de evidencias de revocación, que lanzaban 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 los miembros que libera se hubieran creado
  • Corregida la tarea de descarga de evidencias, que fallaba en su destructor cuando sus argumentos eran rechazados, ya que las comprobaciones se ejecutaban antes de que el propio hilo se creara
  • Corregido el proveedor de firma en la nube, que codificaba 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 sobrepasa el 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 tras la firma RSA en lugar de quedarse en el heap para la siguiente asignación

Version 2.748.4

Fixed

  • Corregida la carga de fuentes Type 1, que leía cada propiedad 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, los stem hints y la longitud de la clave charstring se tomaban todos de tokens caducados. Las fuentes Type 1 ahora informan de sus propios metadatos
  • Corregida la longitud de la clave charstring, que se conservaba como puntero a una cadena ya liberada y se usaba sin comprobación de rango; ahora se guarda como valor y se acota al rango que permite el formato
  • Corregido el caso de las fuentes no incrustadas, que siempre caían en la fuente predeterminada del sistema: el nombre de fuente solicitado se copiaba byte a byte en el registro de fuente de caracteres anchos, así que ninguna familia instalada coincidía nunca
  • Corregido el análisis de fuentes TrueType y OpenType incrustadas, que leía más allá del final de un programa de fuente truncado al decodificar contornos de glifos, argumentos de glifos compuestos y la tabla CFF de un contenedor OpenType, y un mapa de caracteres malformado ya no pide un array de glifos negativo
  • Corregidas las tablas y flujos de referencia cruzada cuyos números de objeto declarados desbordan: una entrada que reclamaba un número cercano al límite entero daba la vuelta a un índice negativo y se escribía fuera de la tabla, y un recuento de objetos declarado o un /Size muy superior a lo que el archivo podía contener dimensionaban los arrays del loader solo con esa declaración

Version 2.748.3

Fixed

  • Corregido Data Matrix rechazando entrada válida: el tamaño del símbolo se estimaba dividiendo a la mitad el recuento de dígitos, pero solo los dígitos adyacentes comparten una palabra de código, así que un texto como 1a2a3a elegía un símbolo demasiado pequeño para sus propios datos y no podía codificarse
  • Corregidos los caracteres UTF-8 de cuatro bytes en XFDF, como los emoji, que se decodificaban al par sustituto equivocado; un byte no reconocido ya no se traga los tres caracteres que le siguen
  • Los registros de región de los metarchivos mejorados ahora acotan su recuento de rectángulos por el tamaño del registro en lugar de fiarse del recuento de la cabecera de región, que podía leer mucho más allá del registro
  • Las imágenes PNG cuya anchura declarada por altura supera el rango direccionable se rechazan en la cabecera en lugar de asignar un buffer de píxeles de longitud negativa
  • El remuestreo de imágenes de alta calidad ahora informa de una solicitud fuera de rango en lugar de desbordar el tamaño de su buffer intermedio
  • Una imagen de prefijo meta 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 prefijo a partir de unos cientos de bytes de entrada
  • Corregidas 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 flujos de objetos, donde un objeto a medio construir quedaba abandonado cuando un paso posterior lanzaba una excepción

Version 2.748.2

Fixed

  • Corregidos los símbolos QR Code que perdían los últimos bits de palabra de código: el recorrido de colocación de módulos saltaba la columna más a la izquierda, así que el final del último bloque de corrección de errores nunca se escribía en el símbolo
  • Corregido el terminador QR, que llenaba de bits a cero todo el resto del bloque de datos y no dejaba sitio para las palabras de código de relleno 0xEC / 0x11 que exige ISO/IEC 18004; un símbolo de versión 1 llevaba seis palabras de código a cero en su lugar
  • Un nuevo test lee un 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 todos contra el estándar y no contra la salida del propio encoder

Version 2.748.1

Fixed

  • Corregidos tres parsers que se colgaban con entrada malformada en lugar de reportarla: el parser de objetos ante un >> dentro de un array 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
  • Corregidas las secciones CDATA en XFDF, que se leían 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
  • Corregida una longitud de chunk WebP cercana a 2 GB que desbordaba la comprobación de tamaño, así que la copia del payload leía más allá del final del buffer del archivo; las longitudes de chunk ahora se comprueban en aritmética de 64 bits
  • Corregida una longitud de chunk PNG de 0xFFFFFFFF que liberaba el buffer del chunk mientras el chunk seguía informando de su longitud declarada, dejando lecturas posteriores apuntando a memoria liberada; los chunks demasiado largos se rechazan
  • Corregida la decodificación de fax CCITT, que desbordaba su cálculo del tamaño del buffer de filas con geometrías de página declaradas muy grandes, lo que podía escribir más allá del buffer; el almacén de filas ahora está acotado y la decodificación se detiene limpiamente en el límite
  • Corregido el encoder CCITT, que leía un byte más allá del final de una línea de escaneo en anchuras múltiplo de ocho
  • Corregidos los registros de comentario de metarchivos mejorados, que se leían mediante un puntero truncado a 32 bits en compilaciones de 64 bits, lo que leía una dirección ajena en cada EMF con comentario GDI
  • Corregidas las imágenes de 8 bits con menos de 256 entradas de paleta, que publicaban memoria sin inicializar como cola de su tabla de color; la tabla ahora declara su recuento real de entradas
  • Corregidas las estructuras BER de longitud indefinida profundamente anidadas, que agotaban la pila al analizar un contenedor de firma o certificado; el anidamiento por encima de 128 niveles se rechaza

Version 2.748.0

Fixed

  • Corregida 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 pero lo dividían como si el término principal viniera primero, así que cada símbolo llevaba palabras de comprobación que ningún lector conforme acepta. Las palabras de comprobación ahora coinciden con los ejemplos resueltos de ISO/IEC 18004, ISO/IEC 16022 e ISO/IEC 15438
  • Corregidos los símbolos Aztec que perdían su carga útil: el encoder divide el array de palabras de código en el sitio y el emisor emite ese mismo array, 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
  • Corregido 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
  • Corregido 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 oscura 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

  • Corregida 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, el tachado de rectángulos, los stamps de texto e imagen, las formas de marca de agua compuestas y las apariencias de elipse ahora emiten siempre un punto, así que los documentos editados en una configuración regional con coma decimal (por ejemplo un Windows alemán o francés) ya no contienen flujos de contenido que los visores rechacen
  • Corregida la carga de fuentes Type 1, que dependía de la configuración regional del sistema: los números reales de FontMatrix, BlueValues, stem hints y charstrings se analizan como números PostScript con punto, así que las fuentes PFB conservan sus métricas y contornos en sistemas con coma decimal en lugar de estropearse en silencio
  • Corregido el análisis del tamaño y color de fuente de la apariencia predeterminada (/DA), los atributos HTML width 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 ambas direcciones
  • Corregido el dibujo integrado de códigos de barras, que escribía sus rectángulos de barras mediante 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 flujos de contenido, las métricas de extracción de texto y los números JavaScript con el formato invariante, igual que 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 en cada llamada el separador decimal de la configuración de formato global de la aplicación anfitriona, 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

  • Corregida la desaparición de ediciones en páginas comprimidas: el tachado de rectángulos, la unión de páginas, las formas de marca de agua compuestas y el aplanado de anotaciones añadían sus operadores a un content stream de página todavía comprimido, de modo que la barra de redacción, la página unida, la forma de marca de agua o la anotación horneada desaparecían silenciosamente del archivo guardado. El contenido de la página ahora se expande antes de añadir nada
  • Corregido el fusionado del contenido añadido con el último operador ya presente en la página cuando esta 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

  • Añadido el soporte de Win32 en Free Pascal: el paquete Lazarus ahora se compila para i386-win32 y x86_64-win64 mediante puntos de entrada de compilación dedicados, las pruebas de humo aceptan un argumento de arquitectura, y se han corregido los problemas del compilador de 32 bits y del enlazado de símbolos C; la creación de PDF, la carga, la compresión Flate, el cifrado AES y el manejo de documentos CBZ quedan cubiertos en ambos destinos

Version 2.747.1

Fixed

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

Version 2.747.0

Added

  • Añadida la importación de imágenes WebP: AddImageFromFile acepta ahora 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, 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 lee ahora símbolos QR en cualquiera de las ocho orientaciones en las que puede llegar una página fotografiada o escaneada: los finder patterns identifican la esquina que falta, y la matriz de módulos muestreada se rota o se refleja al layout esperado antes de decodificar, así que las capturas giradas un cuarto de vuelta y en espejo se leen sin preprocesamiento

Version 2.745.0

Added

  • Añadida la evaluación de certificados cualificados eIDAS para las firmas cargadas: GetLoadedSignatureQCStatements informa de los QCStatements ETSI EN 319 412-5 del certificado del firmante — valores QcCompliance, QcSSCD y QcType, la divisa/importe/exponente de QcLimitValue y las ubicaciones PDS — además de los roles de pagador y beneficiario PSD2 de TS 119 495, y activa una heurística de firma cualificada cuando QcCompliance y QcSSCD están ambos presentes (la decisión de confianza en el QTSP sigue siendo del llamador)

Version 2.744.0

Added

  • Añadida la imposición N-up para documentos cargados: ComposeLoadedPagesNUp recompone cada página en hojas compuestas en rejilla del tamaño de papel de origen (2-up, 4-up, 6-up, hasta 16x16) con 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 trazo fino con un gutter ajustable

Version 2.743.0

Added

  • FlattenLoadedAnnotations consolida ahora (bake) las anotaciones que no traen 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 habitual en formularios impresos desde el navegador), así que el valor introducido sobrevive en el contenido de la página
  • Las anotaciones de marcado sin /AP reciben una apariencia sintetizada dibujada a partir de sus propias propiedades — texto FreeText y Stamp con estilo /DA y alineación /Q, formas Square y Circle con color /C / /IC y grosor /BS, trazos Line e Ink, y el marcado cuadrilátero Highlight / Underline / StrikeOut / Squiggly respetando /QuadPoints y la opacidad /CA
  • Las anotaciones ocultas (el flag oculto /F) se dejan como anotaciones cuando no tienen apariencia, porque consolidar una nota invisible la haría visible

Version 2.742.0

Fixed

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

Added

  • La importación HTML resuelve ahora las tablas sobre una rejilla de ocupación completa, así que las celdas con rowspan y colspan reclaman sus columnas correctamente y las filas posteriores se saltan las casillas ocupadas en lugar de desplazarse a la izquierda
  • Las alturas de fila de las tablas salen de ajustar el texto de la celda con la propia fuente de la celda en lugar de una estimación por recuento de caracteres, así que el contenido mixto estrecho y ancho ya no produce celdas desbordadas o sobredimensionadas
  • Los anchos de columna siguen las pistas de ancho de <col> y los atributos de ancho por celda, y las filas de encabezado marcadas con <thead> (o filas iniciales de puro <th>) se repiten en la parte superior de cada página de continuación cuando una tabla cruza un salto de página
  • Un grupo rowspan se mantiene entero entre 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

  • Corregido el caso en el que las compilaciones Free Pascal terminaban el proceso en lugar de reportar un error cuando un documento necesitaba uno de los codecs que esas compilaciones no enlazan: abrir un TIFF, decodificar una imagen JPEG 2000 o JBIG2, leer un JPEG progresivo o a escala reducida, aplicar una transformación de color ICC o pedir recompresión Zopfli acababa con el proceso directamente
  • Cada una de esas operaciones falla ahora como su llamador ya espera, así que un documento que use alguna de ellas se carga con esa función omitida en lugar de tirarse la aplicación abajo

Added

  • Añadida la 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 las secuencias de contenido marcado de una página por MCID, así que los documentos etiquetados como formularios gubernamentales y publicaciones accesibles extraen su orden de lectura autoritativo en vez de una suposición geométrica; los glifos que el árbol nunca reclama caen en una cola geométrica y se cuentan en el informe sin etiquetar

Version 2.740.0

Fixed

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

Fixed

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

Version 2.739.0

Added

  • Las compilaciones Free Pascal cifran y descifran ahora documentos: los puntos de entrada AES los atiende la implementación FIPS-197 de la propia 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 payloads grandes, está disponible en las compilaciones Free Pascal
  • El smoke test de Free Pascal comprueba ahora el cifrado contra el known answer de FIPS-197, ejercita viajes de ida y vuelta PKCS#7 y GCM, y crea y recarga un documento protegido con AES-256 con rechazo de password

Added

  • Añadida la tipografía de párrafo CSS2.1 al motor de importación HTML5: text-align (con el atributo align heredado y la equivalencia 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 text-decoration underline / line-through, así que las importaciones HTML web y de email existentes conservan sus títulos centrados, sangrías y subrayados
  • Ampliado el decodificador QR integrado más allá de la versión 1: la versión del símbolo se deriva ahora de la geometría finder mediante la divisibilidad de la rejilla (las versiones 2-40 con una rejilla de módulos limpia decodifican), el límite de longitud del modo byte sigue la capacidad por versión de la Tabla 7 de ISO/IEC 18004, y el mapa de módulos de función cubre los alignment patterns y los bloques de información de versión de los símbolos superiores

Version 2.738.0

Added

  • Las compilaciones Free Pascal comprimen y descomprimen ahora documentos de forma nativa: el codec deflate lo proporciona un backend integrado sobre la implementación Pascal de zlib que viene con Free Pascal, así que el contenido FlateDecode ya no reporta un error de operación no soportada
  • Los documentos comprimidos se pueden crear y recargar en Free Pascal con el ajuste de compresión por defecto, y los flujos de referencias cruzadas, los object streams, los archivos incrustados y el contenido de página comprimido se decodifican allí todos
  • El backend cubre los wrappers deflate en bruto y zlib, el wrapper gzip y la detección automática de cabeceras, así que las importaciones SVG y el fallback de descompresión de múltiples tamaños de ventana se comportan como bajo Delphi
  • El smoke test de Free Pascal verifica ahora el codec mediante un self test de wrapper y checksum más un viaje de ida y vuelta de documento comprimido

Added

  • Añadida la compleción de cadena AIA caIssuers: HPDFFetchAIAIntermediates recorre los endpoints con access-method 1.3.6.1.5.5.7.48.2 de un conjunto de certificados CMS a través del transporte del llamador (los cuerpos DER en crudo y PEM decodifican ambos), y la opción de validación FetchMissingIntermediates alimenta la construcción de ruta con los intermediarios obtenidos, así que las firmas de cloud signer con un certificado de end-entity solitario validan en lugar de fallar en la construcción de ruta
  • Añadida la habilitación LTV en una sola llamada: PopulatePAdESLTVEvidence recorre cada firma cargada, obtiene en línea sus intermediarios más la evidencia OCSP/CRL y escribe el material en el DSS del documento, actualizando un documento de firmas B-B reciente a B-LT sin arrays de evidencia ensamblados a mano
  • Añadida la imposición de seed-values para firmar: CheckLoadedSignatureSeedValue lee el diccionario /SV de un campo de firma y comprueba un SubFilter, DigestMethod, Reason y perfil DocMDP candidatos contra sus restricciones con la semántica de force-bit 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

  • Añadida la verificación estricta de guardado mediante la propiedad VerifySavedOutput: tras escribir, una instancia reader nueva con la recuperación de referencias cruzadas desactivada recarga el archivo, así que una serialización corrupta salta en el punto de llamada en lugar de aparecer en el siguiente consumidor
  • Extendido ReproducibleOutput a los 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 de Info volátiles, con lo que los guardados cifrados son idénticos byte a byte para pipelines de regresión

Version 2.736.0

Added

  • Añadido el reescalado de alta calidad y el dithering monocromo mediante la nueva unidad HPDFResample: los kernels bicúbicos separables Catmull-Rom y Lanczos3 sustituyen a la semántica de estirado de GDI para la reducción de resolución de imágenes vía la propiedad ImageDownsampleKernel, y RenderOutputDither aplica difusión de error Floyd-Steinberg tras la composición de página, así que la salida de print-preview conserva el detalle fotográfico en blanco y negro puro

Version 2.735.2

Fixed

  • Corregido 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 la memoria en cada lectura y podía tumbar el proceso; cargar documentos comprimidos, las clases de flujos inflate y los helpers de flujos de compresión y descompresión están todos afectados

Version 2.735.1

Fixed

  • Corregido el colapso a una sola línea, al aplanar, de los campos XFA crecibles que no traen fuente de datos: su altura se mide ahora a partir del texto que la propia plantilla declara, que es lo que ese campo muestra. Un campo ligado a datos vacíos sigue midiendo como vacío

Version 2.735.0

Added

  • Las compilaciones Free Pascal cubren ahora toda la biblioteca: cada unidad compila con FPC 3.2.2 y Lazarus, cuando antes solo lo hacía la ruta núcleo de creación y carga
  • Los contenedores XPS, EPUB y CBZ se pueden importar en Free Pascal mediante un lector ZIP de solo lectura integrado que maneja tamaños ZIP64, entradas stored y deflated, verificación CRC y entradas cifradas al modo tradicional con el mismo callback de password que la vía Delphi
  • El aplanado de formularios XFA, el motor de cálculo FormCalc, el runtime de widgets, los componentes de visor 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 codec deflate, que esas compilaciones no enlazan

Fixed

  • Corregido el byte swapping de 64 bits de la unidad auxiliar PNG, que devolvía valores incorrectos en Win64 y había dejado la unidad fuera de la compilación por completo

Added

  • Añadida la detección de glifos ausentes en el momento del dibujo: la propiedad TrackUnresolvedGlyphs registra cada code point que se renderizaría como la caja tofu .notdef con la fuente Unicode activa, dispara el evento OnUnresolvedGlyph por cada hallazgo y deja intactos los documentos pure-GDI sin registrar
  • Añadido el soporte de la tabla kern heredada: RegisterUnicodeTTF captura la tabla kern de la era Apple/GDI y la emisión de kerning recurra a 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 la Arial de serie
  • Añadido el fallback de fuente por run dentro del layout de párrafo: WideTextOutBox parte ahora cada línea ajustada en los code points que la fuente actual no puede mapear y dibuja cada run en su fuente fallback resuelta, así que los párrafos mixtos de latín, emoji y CJK se renderizan sin tofu cuando hay cadenas de fallback registradas

Version 2.734.0

Added

  • Añadida la infraestructura de peticiones timestamp RFC 3161: HPDFRFC3161BuildRequest emite el TimeStampReq DER con un nonce positive-INTEGER nuevo, un policy OID opcional y certReq, y HPDFRFC3161ParseResponse decodifica la cabecera PKIStatusInfo y extrae el token, así que los callbacks de transporte TSA son tres líneas en lugar de un estudio de DER
  • Añadida 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 gate por versión como la declaración SHA-3 de 32001

Version 2.733.0

Added

  • Añadido el acuerdo de claves portable X25519 y X448 con escalera Montgomery más ECDH en curvas NIST P-256 / P-521 con multiplicación Montgomery CIOS, lo que permite crear y desenvolver receptores de clave pública key-agreement (KARI) totalmente en proceso; el RFC 7748 y los vectores de referencia generados con OpenSSL fijan el comportamiento de la escalera en la suite de regresión
  • Añadido HPDFUnwrapKeyAgreementRecipientEnvelope junto con los puntos de entrada AddPubSecAgreementKeyMaterial y AddPubKeyAgreementRecipientWithSecret, así que los documentos cifrados con receptores ECDH / X25519 / X448 se pueden abrir con el escalar privado del receptor y cifrar sin herramientas ECDH externas

Version 2.732.0

Changed

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

Fixed

  • Los anchos de campo /W del flujo de referencias cruzadas se adaptan ahora al rango real de offsets en lugar del layout fijo [1 4 2], cuyo cast a Cardinal truncaba en silencio los offsets por encima de 4 GiB y daba una salida dañada

Version 2.731.0

Changed

  • Reconstruido el OCR integrado basado en plantillas con extracción de glifos por componentes conexos, puntuación de cobertura en escala de grises contra plantillas de varias fuentes en caché, 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 ampliado de 62 caracteres que reconoce texto ASCII con mayúsculas y minúsculas mediante clustering de alturas a nivel de línea y preferencia por el contexto de mayúsculas/minúsculas

Version 2.730.0

Added

  • Añadido el soporte Win64 para Free Pascal 3.2.2 y Lazarus 4.6, incluidos un paquete runtime, un script de build reproducible, una capa de compatibilidad y un smoke test no GUI de crear y recargar; las integraciones estáticas nativas de codecs 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

  • Añadido un runtime dinámico de widgets XFA neutral respecto al host, con edición Unicode, gestión de foco y hit testing, binding consciente de instancias, validación y cálculo atómicos, reflow acotado y una factoría de documentos cargados de solo lectura que preserva el XFA de origen

Version 2.728.0

Fixed

  • Corregida la medición intrínseca XFA y la continuación de texto para preservar los 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 global de medición en caché

Version 2.727.0

Changed

  • El layout XFA aplica ahora las dimensiones intrínsecas mínimas y máximas, mide los campos crecibles a partir de su texto ligado y reparte 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 medición

Version 2.726.0

Added

  • Añadidos los atributos NChannel completos de proceso y spot, mixing hints, flujos de tintas espectrales CxF/X-4 de PDF 2.0 acotados y comprobaciones de consistencia a nivel de documento para definiciones de tinte spot y tablas externas de colorantes del output-intent

Version 2.725.0

Added

  • Añadido un backend de render por scanlines SIMD determinista y thread-safe que hace preflight de las display lists de rectángulos soportadas, escribe la superficie bitmap final en bloques vectoriales sin copia intermedia de bitmap y devuelve razones exactas de rechazo por petición a través del pipeline existente de fallback por software y telemetría

Version 2.724.0

Changed

  • Ampliado el evaluador FormCalc nativo acotado con agregados generales de node-sets SOM, argumentos mixtos 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, array, profundidad, tiempo y salida

Version 2.723.0

Changed

  • SubsetLoadedFonts hace ahora subsetting de forma segura de programas Type 1 PFB incrustados y PFA binarios partidos y en hex, retiene las dependencias recursivas de compuestos TrueType y cierra las dependencias de contornos COLR v0/v1 preservando las tablas de color, bitmap, variaciones y shaping

Version 2.722.0

Added

  • Añadidos callbacks de password acotados para entradas XPS, EPUB y CBZ cifradas con ZIP clásico, con límites de reintento por entrada, comprobaciones de cancelación, manejo de credenciales solo en memoria y rechazo con fallo seguro del cifrado no disponible, inválido o no soportado

Version 2.721.0

Changed

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

Version 2.720.0

Added

  • Añadidas sobrecargas de reconocimiento integradas y acotadas para OCR ASCII en mayúsculas de alto contraste, Code 39 horizontal y símbolos QR versión 1 limpios y alineados con los ejes en modo byte, lo que permite capas de texto buscables y decodificación de códigos de barras en páginas cargadas sin un motor aportado por el llamador, mientras la entrada ambigua o no soportada falla de forma cerrada

Version 2.719.0

Added

  • Añadido el refinamiento JPEG 2000 acotado por resolución y capa de calidad mediante THPDFJpeg2000Decoder.LoadProgressiveFromByteArray, más la 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

  • Incrustados los CMaps completos UniJIS, UniGB, UniCNS y UniKS en UCS2 y UTF16 horizontales y verticales, incluidos los escalares suplementarios y los valores verticales estándar por defecto, así que la extracción de texto CJK y la geometría ya no dependen de archivos externos de mapeo Unicode ni de suposiciones de medio em

Version 2.717.0

Added

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

Version 2.716.0

Added

  • Añadida la reparación acotada del grafo de objetos para los hallazgos de preflight actuables de xref, tráiler, 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

  • Añadidos los wrappers 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 quedan protegidos hasta un desbloqueo explícito con password

Version 2.714.0

Changed

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

Version 2.713.0

Changed

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

Version 2.712.0

Changed

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

Version 2.711.0

Added

  • Añadida la resolución de SyntheticBase de CFF FontSet con valores Top y Private DICT heredados, CharStrings, charset, Encoding y Local Subrs, más una semántica de override determinista y el rechazo acotado de la herencia inválida, cíclica o excesivamente profunda

Version 2.710.0

Added

  • Añadida la selección determinista y acotada de predictores Flate mediante HPDFSelectFlatePredictor, con muestras de fila distribuidas, coste estimado en bytes, ponderación de CPU configurable y presupuestos explícitos de bytes, filas y trabajo

Version 2.709.0

Added

  • Añadida la salida nativa opcional de diccionarios de símbolos Huffman y regiones de texto JBIG2 mediante THPDFJBIG2Options.UseHuffmanEncoding, con las tablas estándar DH, DW, BMSIZE, FS, DS y DT, bitmaps colectivos en crudo, tablas de IDs de símbolo, enrutado nativo determinista y viajes de ida y vuelta píxel-exactos del decodificador, manteniendo los valores por defecto aritmético y MMR

Version 2.708.0

Changed

  • Cacheadas las asignaciones inversas de cmap de formas de presentación árabes y combinadas por generación de fuente registrada, reemplazando los escaneos repetidos U+FB00..U+FDFF y U+FE70..U+FEFF en ApplyArabicGSUBRefinement, ApplyArabicGSUBContextualRefinement y la vía GSUB contextual genérica, preservando la precedencia de codepoints y la salida con shaping

Version 2.707.0

Added

  • Añadido el codificador de códigos de barras 2D Aztec (ISO/IEC 24778) mediante THPDFPage.DrawAztec y la unidad independiente THPDFAztec: codificación de alto nivel por programación dinámica con latches de modo, shifts y secuencias binary-shift, bit stuffing, corrección de errores Reed-Solomon sobre GF(16) hasta GF(4096), selección automática de símbolo compact 15x15..27x27 o full 19x19..143x143, y control de capas forzadas para tamaños de símbolo fijos
  • Añadido el ensamblado de texto vertical de página: THotPDF.ExtractLoadedPageText y las APIs de agregación por rango/flujos agrupan ahora 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 abajo en lugar de destrozar el texto CJK vertical en líneas por glifo

Fixed

  • Corregido el fallo de la exportación paralela por bandas con un desajuste de ancho de banda PNG en páginas cuyas dimensiones en píxeles son fraccionarias (A4 a 96 DPI): el tamaño del raster se redondea ahora 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

  • Añadida la exportación PNG en streaming de páginas cargadas y la exportación TIFF multipágina por bandas mediante THotPDF.SaveLoadedPageToPng, SaveLoadedPageToPngStream, SaveLoadedPagesToTiffBanded y SaveLoadedPagesToTiffStreamBanded, escribiendo los datos de imagen comprimidos fila a fila mediante codificadores de bandas, así que las páginas muy grandes no necesitan un framebuffer completo; THPDFBandImageExportInfo reporta telemetría de página, banda, fila, worker, memoria, salida, tiempos y cancelación

Version 2.705.0

Added

  • Añadida la finalización PDF/A a las rutas de guardado de documentos cargados: THotPDF.SaveLoadedDocument y SaveLoadedDocumentToStream validan ahora el OutputIntent GTS_PDFA1 (heredado del catálogo de origen o registrado de nuevo) y emiten la identificación XMP pdfaid:part / pdfaid:conformance cuando PDFACompliance está activo, preservando byte a byte un paquete pdfaid existente al volver a guardar
  • Añadido el consumo de escritura vertical (WMode 1) en el lado de la carga: las métricas de celda /W2 y /DW2 de las CIDFont guían ahora la extracción de texto y el renderizado de página, recorriendo 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

  • Añadido el renderizado paralelo por tiles y bandas de páginas cargadas mediante THotPDF.RenderLoadedPageTilesParallel y THotPDF.RenderLoadedPageBandsParallel, con callbacks del hilo llamador por filas, bitmaps prestados, cancelación cooperativa, memoria in-flight controlada por el llamador, admisión por memoria pico y una caché acotada e inmutable de glifos Type 3 y pantallas de semitonos compartida entre contextos de render aislados

Version 2.703.0

Added

  • Añadidos los lotes de digests multisign CSC acotados mediante THPDFCSCSignatureProvider.SignHashBatch, con un SAD fijado por hash y una petición signatures/signHash para un lote ordenado del mismo algoritmo, aplicando los límites multisign locales y de credencial, la cardinalidad estricta de respuesta, el orden síncrono o asíncrono de resultados, claves de idempotencia SHA-256 por contenido y la repetición de lotes completados

Version 2.702.0

Added

  • Extendido THotPDF.RenewPAdESLTATimestamp con evidencia de certificado, OCSP y CRL aportada por el llamador que se fusiona en el DSS existente antes de la nueva marca de tiempo de documento RFC 3161, preserva cada revisión anterior byte a byte y deduplica con exactitud los flujos de validación a lo largo de renovaciones sucesivas

Version 2.701.0

Added

  • Añadido el preflight de perfiles PAdES baseline y extended direccionable por cláusula mediante THotPDF.PreflightLoadedPAdES, que reporta cada requisito aplicable con ID de regla estable, perfil, nivel normativo, cláusula del estándar, ruta PDF, número de objeto, revisión firmada o actual y estado de superación, mientras valida cardinalidades CMS, referencias ESS del certificado del firmante, restricciones del diccionario de firma, cobertura del byte-range, tiempo de confianza, evidencia del DSS y cobertura de la marca de tiempo del documento

Version 2.700.0

Added

  • Añadida la carga de claves privadas PFX / PKCS#12 ECDSA, Ed25519 y Ed448 de punta a punta y la firma de documentos CMS, incluida la ECDSA CNG de curva con nombre, la PureEdDSA opcional de OpenSSL 3, la decodificación de claves RFC 8410, las reglas de digest y parámetros RFC 8419, SHAKE256 con salida de 512 bits para Ed448, la selección automática del algoritmo de clave y el emparejamiento estricto certificado-clave

Version 2.699.0

Added

  • Añadida la selección determinista de credenciales multiidentidad PFX / PKCS#12 mediante HPDFEnumeratePFXIdentities, HPDFParsePFXByLocalKeyID y THPDFCMSSignOptions.PFXLocalKeyID, con atributos de bag localKeyId y friendlyName estrictamente de valor único, emparejamiento de clave pública, bags de safe-content recursivos, diagnósticos acotados de ambigüedad y ciclos, y la incrustación automática de la cadena de certificados intermedia y raíz coincidente con deduplicación exacta DER

Version 2.698.0

Added

  • Ampliado el descifrado en proceso de PBES2 PFX / PKCS#12 con AES-128-CBC y AES-192-CBC más los PRF PBKDF2 HMAC-SHA-384 y HMAC-SHA-512, incluida la validación opcional de keyLength específica del cifrador y comprobaciones acotadas de salt, iteraciones, IV y padding, manteniendo la compatibilidad con AES-256-CBC y HMAC-SHA-1 / SHA-256

Version 2.697.0

Added

  • Añadida la herencia de FixedPage.NavigateUri de Canvas XPS y OpenXPS conforme a la especificación, 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 transformaciones, clips anidados, grupos de opacidad aislados, supresión de visuales reutilizables, restauración tras overrides anidados y los límites existentes de enlaces, URI, cancelación y esquemas inseguros

Version 2.696.0

Added

  • Añadidos los grupos de transparencia nativos acotados de Canvas 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 solapados mediante Form XObjects DeviceRGB aislados, con alfa uniforme plegado, soft masks de alfa variable compartidas, grupos anidados, clips transformados, transferencia de recursos, enlaces preservados y fallo seguro ante contenido malformado, no soportado, singular o excesivo

Version 2.695.0

Added

  • Añadida la conversión nativa acotada 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, transformaciones de geometría, clips vacíos y recorte anidado EvenOdd o NonZero mediante PDF W* o W, con límites de navegación recortados, límites de parseo de 100.000 valores y fallo seguro ante transformaciones malformadas o singulares

Version 2.694.0

Added

  • Añadida la navegación nativa acotada de XPS y OpenXPS para visuales Path y Glyphs transformados, preservando los enlaces 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 delante o hacia atrás cuando ya existen todas las páginas, con límites de clic conscientes de métricas, límites de 65.536 enlaces y 8.192 caracteres, supresión de captura por VisualBrush, cancelación y diagnósticos con fallo seguro de esquemas inseguros

Version 2.693.0

Added

  • Añadida la conversión nativa acotada 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 de mosaico None, Tile y reflejado, transformaciones, opacidad, Form XObjects reutilizables, patrones de mosaico compartidos, transferencia de recursos consciente de tokens y fallo seguro ante ciclos, entrada malformada, recursión, contenido, caché y presupuestos de colocación

Version 2.692.0

Added

  • Añadida la incrustación nativa de fuentes de paquete XPS y OpenXPS para programas TrueType y OpenType, fragmentos de miembros TTC, recursos ofuscados por GUID, IDs de glifo directos o derivados del cmap, clústeres Unicode uno-a-muchos, avances y offsets explícitos, orígenes RTL correctos en anchura, recursos de fuente compartidos, permisos de incrustación y de no-subsetting, subsetting de glifos opcional, mapas ToUnicode acotados y salida lineal-amortizada de runs posicionados sin sustitución de caras por GDI

Version 2.691.0

Added

  • Añadido el layout acotado de Indices de Glyphs OpenXPS para recuentos 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 por atributo o elemento de propiedad, opacidad, agrupación nativa en TJ de PDF, fallback de clústeres Unicode posicionados, extracción de texto preservada, diagnósticos con fallo seguro de entrada malformada y búferes lineales-amortizados con tope de 65.536 asignaciones

Version 2.690.0

Added

  • Añadido el soporte de Path.OpacityMask OpenXPS para máscaras sólidas, de gradiente lineal multibanda de alfa variable y radial elíptico, y de ImageBrush PNG ordinario, en mosaico o reflejado, mediante alfa uniforme plegado, grupos de transparencia DeviceGray nativos acotados, shading patterns y flujos de soft mask de imagen compartidos, manejo con fallo seguro del contenido no soportado y el builder reutilizable RegisterLuminositySoftMaskState con binding de recursos de imagen alfa

Version 2.689.0

Added

  • Añadidos los modos Tile, FlipX, FlipY y FlipXY de ImageBrush OpenXPS mediante tiling patterns nativos de PDF con una, dos o cuatro colocaciones recortadas de forma independiente, recursos compartidos de imagen y soft masks 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

  • Añadido el soporte de ImageBrush.Transform OpenXPS para matrices de atributo finitas de seis parámetros y elementos de propiedad MatrixTransform, concatenadas tras el recorte nativo de Path y antes del recorte del viewport y la colocación de la imagen, así que el brush puede rotar, escalar, sesgar 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

  • Añadida la colocación de image XObjects controlada por matrices mediante THPDFPage.ShowImageMatrix y ampliada 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 los límites, recorte nativo de path y de viewport único, opacidad de imagen y path, alfa de soft mask PNG, dimensionado consciente del DPI a 96 DPI, caché compartida de recursos decodificados y diagnósticos a prueba de fallos para mosaico, transformaciones, conversión de color y trazos de imagen no soportados

Version 2.686.0

Changed

  • Añadido el registro reutilizable y acotado de gradientes radiales multibanda y ampliada la importación nativa-vector de paths XPS con valores elípticos RadialGradientBrush por elemento de propiedad, spread Pad, alfa uniforme de bandas, opacidad de brush, centro relativo o absoluto, mapeo de 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

  • Ampliada la importación nativa-vector ordenada de paths XPS con parseo de elementos de propiedad consciente de comillas y acotado, brushes sólidos y de gradiente lineal multibanda, shading patterns nativos de PDF, alfa de brush y de banda, coordenadas de gradiente por defecto relativas a los límites o absolutas explícitas, interpolación de bandas fuera de rango y diagnósticos a prueba de fallos para transformaciones, modos de spread, interpolación de color, alfa variable y ejes degenerados no soportados

Version 2.684.0

Changed

  • Añadida la importación nativa-vector ordenada de paths XPS con geometría abreviada acotada, reglas de relleno, rellenos y trazos sólidos RGB y ARGB, opacidad de path, grosor de trazo, transformaciones de seis parámetros y diagnósticos a prueba de fallos para características de dibujo no soportadas

Version 2.683.0

Changed

  • Reforzada la validación PDF/X-6 del contenido realmente pintado con el estado gráfico del shading pattern en el momento de definición, la semántica ExtGState de patrones nonstroking, comprobaciones con fallo seguro 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 pintado combinado, inferencia de color JPX acotada y composición de anotaciones consciente de la apariencia

Version 2.682.0

Added

  • Añadido el soporte de productor y verificador para firmas ECDSA brainpoolP256r1, brainpoolP384r1 y brainpoolP512r1, incluida la matriz de digests SHA-2 y SHA3 específica de curva, la validación de firma que falla antes del provider, los parámetros estrictos de certificado de curva con nombre, los identificadores de algoritmo ECDSA sin parámetros, los valores de firma DER canónicos, la importación Windows CNG de curvas con nombre y diagnósticos deterministas para parámetros explícitos, finales, desconocidos o no coincidentes

Version 2.681.0

Changed

  • Unificada la ejecución de contenido de bitmaps no progresivos, DC directo, Form y display lists mediante HPDFInterpretContentTokensDevice y la extensión completa opcional IHPDFContentOperatorDevice, con un checkpoint de cancelación por operador, caché de índices de operador en tiempo de compilación para replay de display lists sin escaneo de operandos, métricas públicas OperatorCount, compatibilidad de dispositivos semánticos preservada, 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

  • Añadidas sobrecargas RepairPDFA4 transaccionales y acotadas con opciones tipadas, informes detallados de reparación, procedencia compartida de hallazgos, normalización segura de cabecera PDF 2.0, ID de tráiler, metadatos, Catalog y presentación, reparación de identificación PDF/A consciente de espacios de nombres, política configurable de commit parcial o de conformidad total, 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ágina, fuentes, color, transparencia, imágenes, operadores gráficos y texto extraído

Version 2.679.0

Added

  • Añadida la validación PDF/X-6 del contenido realmente pintado con reglas seleccionables ISO 15930-9:2020 o erratas resueltas 2025, comprobaciones reales de cabecera y canales ICC, recorrido consciente de recursos de arrays de contenido, Form XObjects, tiling patterns y shading patterns, imágenes, glifos Type 3, soft masks y apariencias de anotaciones, diagnósticos de modo overprint y transparencia de pintado combinado, procedencia estable de reglas y trabajo acotado de bytes decodificados, tokens, objetos, incidencias, recursión y estado gráfico

Version 2.678.0

Added

  • Profundizada la validación acotada de PDF/A-4 con comprobaciones en caché de cabecera 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 arrays de contenido, Form XObjects anidados, imágenes, máscaras de imagen, shading y apariencias de anotaciones, estado gráfico heredado, incrustación de fuentes de renderizado, relaciones CIDFont y CMap, flags de anotación y estados de apariencia estrictos, validación de paquetes XMP UTF-8 y de espacios de nombres, 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

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

Version 2.676.0

Added

  • Añadida la 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 o de overflow en crudo y Flate, layouts de hints combinados alineados a byte 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, un techo por defecto de memoria del planificador de 256 MiB con desambiguación de codificación con fallo seguro, fusión consciente de solapamientos, comprobaciones cruzadas estructurales estrictas, límites tipados y diagnósticos de disponibilidad, y una ruta unificada [0, /E) para la primera página

Version 2.675.0

Added

  • Añadidas políticas independientes de crypt filters conformes al estándar para cadenas, flujos normales y archivos incrustados mediante ConfigureCryptFilterDefaults y SetStreamCryptFilter, incluidos los filtros reservados de password y clave pública, /Identity, el /EFF de seguridad por password correcto para el escritor y los pipelines con /Crypt inicial, los límites con fallo seguro de receptores específicos de flujos de clave pública, la carga e inspección de named filters externos sensibles a mayúsculas, /CFM /None, el reporte de longitud de clave V2, el fallback Direct File de política mixta, las políticas divididas de contenedor de object streams y cadenas miembro, y las actualizaciones incrementales cifradas que preservan las políticas

Version 2.674.0

Added

  • Añadidas las actualizaciones incrementales cifradas Standard y de clave pública que preservan credenciales mediante una sobrecarga de BeginIncrementalUpdate consciente del password y material de claves de receptor asignado, con file keys o FEKs retenidos de forma segura, políticas separadas de crypt filters para cadenas, flujos, metadatos e Identity, derivación legacy de claves de objeto consciente de generaciones, referencias /Encrypt heredadas exactas, revisiones de origen byte-idénticas, acceso original de usuario, propietario o receptor y rechazo con fallo seguro de cambios de cifrado o filtros heterogéneos no soportados

Version 2.673.0

Security

  • Añadida la 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 comprobaciones indexadas de duplicados y referencias ausentes, detección iterativa de ciclos y profundidad de dependencias, imposición de la asociación de página de flujos incrustados, rechazo de segmentos prohibidos, presupuestos de referencias largas y aristas de agregación, guardas de asignación de diccionarios de símbolos y telemetría precisa de fallos

Version 2.672.0

Added

  • Añadida la generación y validación estricta de signature-policy-identifier PAdES E-EPES con policy OIDs explícitos, hashes conocidos o desconocidos ETSI, cualificadores SPuri, SPUserNotice y SPDocSpecification, parseo acotado de Unicode y colecciones, hashing del documento de política, fijación de OID y hash del firmante principal antes del trabajo criptográfico, estados dedicados de discrepancia e informes JSON completos

Version 2.671.0

Added

  • Añadidos los contenedores RFC 5652 deterministas con hasta 256 registros SignerInfo primarios independientes mediante HPDFCMSBuildMultiSignedData y HPDFCMSMergeSignedData, incluida la prevalidación del lote completo antes de los efectos laterales del 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 dimensionado de placeholders de agregación sin efectos laterales

Version 2.670.0

Added

  • Añadidas las identidades de firmante RFC 5652 SubjectKeyIdentifier opcionales mediante THPDFCMSSignOptions.SignerIdentifier, incluida la codificación IMPLICIT compacta del SID, la selección automática de versión de SignerInfo y SignedData, la extracción estricta de extensiones X.509, el soporte de provider y dimensionado de placeholders y la coincidencia con fallo seguro de SID, certificado y versión durante la verificación

Version 2.669.0

Security

  • Añadidos los 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 RFC 6211, con estado de verificación dedicado, código de fallo de validación, propagación de timestamps, razones detalladas de las incidencias y salida JSON

Version 2.668.0

Added

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

Version 2.667.0

Added

  • Añadido THotPDF.ValidatePDFMACChain con validación de revisiones incrementales de la más antigua a la más nueva, indexación acumulativa clásica o de xref streams, ubicaciones exactas de fallo por revisión y xref, detección de sustitución histórica del MAC, imposición estable de KDFSalt, rechazo del downgrade de fuerza del digest, comprobaciones autenticadas de /P y /Perms, informes de preflight y parseo acotado de revisiones sin copias temporales del PDF

Version 2.666.0

Added

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

Version 2.665.0

Fixed

  • Corregido THotPDF.RegisterNChannelColorSpace para emitir la forma DeviceN de cinco elementos de ISO 32000-2 con /Subtype /NChannel y metadatos de componentes de proceso, subida su versión mínima de PDF a 1.6 y hecho que las soft masks de luminosidad resuelvan la pintura NChannel a través de su espacio alternativo, manteniendo la compatibilidad de lectura con los tokens legacy de la familia /NChannel

Version 2.664.0

Added

  • Completado el renderizado de modos de fusión PDF con implementaciones enteras del hot path para Hue, Saturation, Color y Luminosity, y corregido el fast path de opacidad total de modo que cada modo de fusión separable o no separable activo componga contra su fondo

Version 2.663.0

Security

  • Autenticados los contenedores PKCS#12 antes de exponer los safe contents cifrados verificando el MacData exterior opcional con iteraciones KDF PKCS#12 acotadas, HMAC SHA-1 o SHA-256, comparación de digests en tiempo constante y manejo con fallo seguro de password incorrecto y manipulación

Version 2.662.0

Added

  • Añadidos tres comandos de HotPDFCLI: render rasteriza cada página seleccionada a <prefix>-page<N>.png mediante el pipeline de bitmaps de páginas cargadas (rango --pages, --dpi 10..2400, por defecto 150), tables extrae tablas tipadas a CSV o JSON vía ExportLoadedTypedTables (--json, -o archivo o consola) y compare imprime el informe de comparación JSON de dos documentos mediante HPDFDocCompareDocuments (--mode 0..5 cubriendo page-count, page-text, object-count, rendered-image, full y structural)

Fixed

  • Corregido el pipeline de transformaciones ICC de Win64 que producía salida toda a 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 lotes ahora hacen el viaje de ida y vuelta en ambas plataformas)

Version 2.661.0

Added

  • Añadida la compresión Flate de alta relación Zopfli real y con presupuesto tras la línea base zlib existente de cuatro estrategias, con selección estricta de no crecimiento, límites de entrada, iteración, bloque, salida y tiempo transcurrido, telemetría detallada de flujos e imágenes paralelas y puertas de ahorro deterministas sobre corpus fijo

Version 2.660.0

Added

  • Añadidos los informes de preflight XML legibles por máquina deterministas y los plugins de confianza versionados por ABI para extracción de características y reglas de validación personalizadas, con ordenación estable, integración de policy bundles, propagación de cancelación, comprobaciones de capacidades con fallo seguro y presupuestos finitos de plugins, hallazgos, características, cadenas, salida y tiempo transcurrido

Version 2.659.0

Added

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

Version 2.658.0

Added

  • Añadidos los DOM de paquetes XFA editables y acotados para flujos XDP completos y arrays de paquetes ordenados con consultas de rutas por local-name, mutación de paquetes y nodos, preservación exacta de bytes sin tocar, reescritura selectiva por paquete, salida determinista de espacios de nombres 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

  • Añadida la firma remota CSC API v2 a través del pipeline de providers CMS existente con transporte propiedad de la aplicación, refresco de tokens OAuth, descubrimiento acotado de la cadena 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

  • Añadidos los manejadores de documentos XPS, EPUB y CBZ opcionales puntuados por contenido, con registro thread-safe reemplazable, un único escaneo validado del archivo, ordenación de fixed-pages, spines 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 PDF segura ante rollback

Version 2.655.0

Added

  • Añadida la extracción acotada de tablas tipadas y la exportación atómica a CSV o JSON con columnas canónicas, fusión de fragmentos de la misma página y de páginas consecutivas, spans de celdas fusionadas, cabeceras repetidas, geometría de página, confianza, procedencia e inferencia controlada por locale de enteros, números, booleanos, fechas, fecha-hora, divisas y porcentajes

Version 2.654.0

Added

  • Añadida la exportación estructurada atómica de páginas cargadas a HTML, XHTML, XML y JSON mediante un único modelo de orden de lectura con bloques, spans con estilo, tablas detectadas, coordenadas, orden de origen, imágenes PNG opcionales acotadas, escape seguro Unicode, cancelación y presupuestos finitos de recursos

Version 2.653.0

Added

  • Añadida la reescritura atómica de color de páginas cargadas a DeviceGray, DeviceRGB o DeviceCMYK con preservación de vector buscable, 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 de recursos, y políticas de preservar, convertir en proceso o rechazar para placas spot

Version 2.652.0

Added

  • Añadida la detección de redacción review-first en páginas cargadas con patrones de PII conscientes del checksum, detectores conectables de entidades y caras, hallazgos en espacio de página puntuados por confianza, telemetría de trabajo acotada, identidad obligatoria del revisor, staging atómico de anotaciones aprobadas y una frontera de burn-in explícita separada

Version 2.651.0

Added

  • Añadida la decodificación acotada de códigos de barras de páginas cargadas y de regiones con motores conectables, renderizado progresivo de baja resolución, escaneos fallback de cuarto de giro, payloads de texto y en crudo 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

  • Añadidas capas de texto OCR buscables, acotadas y cancelables con motores de reconocimiento conectables, validación de confianza y de 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

  • Añadidos viajes de ida y vuelta completos del object graph a través de JSON versionado con exportaciones snapshot en streaming e incrementales, payloads sidecar embebidos y atómicos en crudo o decodificados, importación acotada compatible con el schema, validación estructural y de longitudes de stream, y publicación transaccional

Version 2.648.0

Added

  • Añadida la reparación acotada de documentos de diagnóstico QDF editados a mano que preserva los bytes de objetos y streams, corrige longitudes de stream directas, indirectas, ausentes u obsoletas, reconstruye offsets y trailers clásicos de referencias cruzadas, rechaza estructuras inseguras y verifica la salida a través del loader normal

Version 2.647.0

Added

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

Version 2.646.0

Added

  • Añadidas APIs acotadas de visitante y de 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

  • Añadido un contrato conectable de backend de render de páginas cargadas con acceso a display lists compiladas, implementación GDI nativa, despacho paralelo thread-safe, política de fallback determinista, invalidación de caché y telemetría de ejecución

Version 2.644.0

Added

  • Añadida la detección acotada de solapamientos de layout, paths de elementos, mapeo de origen bajo opt-in, overlays nativos vectoriales de desbordamiento y solapamiento, callbacks de diagnóstico en vivo y estadísticas de trabajo

Version 2.643.0

Added

  • Añadidos 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

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

Version 2.641.0

Added

  • Añadida la importación acotada de SVG 2 como Form XObjects PDF reutilizables con geometría y arcos nativos, cascada CSS, degradados vectoriales, soporte de clip y mask, texto Base 14, recursos de opacidad, anotaciones de enlace conscientes de la colocación y estadísticas de importación

Version 2.640.0

Added

  • Añadido un perfil de importación versionado de paged-media HTML5 con parseo DOM tolerante, cascada de CSS de impresión, layout paginado de bloques y tablas, controles AcroForm opcionales, recursos acotados dirigidos por callbacks y estadísticas por operación

Version 2.639.0

Changed

  • Los mapeos de archivos locales grandes adaptan ahora el tope configurado de bytes mapeados entre ventanas secuenciales mayores y hasta 16 ventanas menores de acceso aleatorio MRU, retienen una opción explícita de geometría fija, y reportan la geometría activa, las transiciones, los recuentos de patrones de acceso y los bytes mapeados pico

Version 2.638.0

Added

  • Añadido el 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 del 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 reduce ahora los workers solicitados a partir del presupuesto de memoria de todo el proceso, reserva cada página reclamada, retiene las reservas de salida ordenada a través de la entrega por callbacks, despierta a los que esperan presupuesto ante cancelación o fallo, y reporta telemetría de concurrencia, reservas, admisión, retraso y espera

Version 2.636.0

Changed

  • El prefetch de páginas cargadas compila y renderiza ahora fuera del lock de la caché, se cancela de forma cooperativa a través de tokenización y reproducción, cede el 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

  • Añadido el 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, vidas de bitmaps prestados y telemetría de cola, bytes, espera, finalización y entrega

Version 2.634.0

Added

  • Añadido un pipeline paralelo de páginas cargadas en dos etapas que compila display lists fuera del lock de la caché de render, arranca la reproducción antes de que el conjunto completo de páginas esté compilado, equilibra dinámicamente workers acotados, preserva el orden de entrada, reduce la asignación de tokens de contenido y expone telemetría de etapas, caché, finalización y latencia

Version 2.633.0

Added

  • Añadidos handles inmutables con recuento de referencias de bitmaps decodificados, con hits de caché sin copia, dibujado directo thread-safe por el renderer, copias mutables aisladas bajo demanda, vidas independientes de la expulsión y telemetría acumulada de handles y copias

Version 2.632.0

Changed

  • La ejecución de QuickJS funciona ahora tanto mediante objetos estáticos como a través de una DLL puente ABI-neutral en Win32 y Win64, con valores Unicode-safe, reporte de estado determinista, límites configurables de memoria, pila, 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 ejecuta ahora la superficie Schematron XPath 2 revisada completa con bases de datos de códigos externas, bindings secuenciales, cuantificadores, sumas FLWOR, identificadores de reglas fallback estables, parseo 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

  • Añadida la instanciación integrada 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

  • Añadida la estimación de placeholders CMS sin efectos secundarios a partir de tamaños de firma explícitos, del proveedor o de certificados RSA, conformado exacto del contenedor estático, reservas conservadoras de payload dinámico, reconstrucciones previas a la firma, reintentos de proveedor condicionados por capacidades, garantías estrictas de invocación única del firmante externo, dimensionado acotado y diagnósticos detallados de cada intento

Version 2.628.0

Added

  • Añadido el subsetting basado en alcanzabilidad de las fuentes incrustadas en PDFs cargados, incluyendo contenido de página, Form XObjects anidados, estados de apariencia de anotaciones, programas de fuente compartidos, formatos TrueType y CFF, selección por tamaño codificado, mapeos CID y ToUnicode estables, resultados detallados y rechazo por defecto cuando hay firmas presentes

Version 2.627.0

Added

  • Añadida la generación automática de estructura PDF/UA para árboles de layout declarativos, incluyendo encabezados, listas, tablas, figuras, metadatos de idioma y texto alternativo, artefactos de paginación, referencias de contenido marcado seguras ante continuación, preservación del orden de lectura, validación semántica y estadísticas de estructura

Version 2.626.0

Added

  • Añadido un DOM de documento declarativo con estilos heredables, factorías de componentes reutilizables, texto, spacers, stacks, contenedores, secciones, encabezados y pies repetidos, tablas ponderadas con filas de encabezado que se repiten, profundidad de continuación acotada, estadísticas de paginación, fragmentos de texto y de tabla sin copia, recorrido lineal de nivel superior, volcado inmediato de páginas y superficies Delphi y C++Builder equivalentes

Version 2.625.0

Added

  • Añadida una puerta de rendimiento estadística repetible en Win32 y Win64 que aísla carga, guardado, renderizado y extracción de texto, registra warmups y 30 muestras en crudo con p50, p95, varianza muestral, RSS, I/O de proceso, entorno e identidad determinista del fixture, y después evalúa umbrales JSON estables y devuelve un código de salida de fallo ante una regresión

Version 2.624.0

Changed

  • Replanteado el parseo simple de diccionarios y arrays en torno a spans de origen inmutables, conversión numérica directa, contenedores anidados de una sola pasada e inserción indexada en diccionarios, 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

  • Añadidos límites configurables del parser para bytes de token individuales, tokens agregados, entradas de array o diccionario y tokens malformados, más un preset estricto de entradas no confiables, excepciones de límites tipadas y telemetría por carga; las puertas 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

  • Añadidas APIs explícitas de liberación del object graph de páginas cargadas y de telemetría que descartan las raíces clean propiedad de la página y las cachés de render preservando los recursos indirectos compartidos y los metadatos de recarga; el procesado 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 usan ahora una caché LRU configurable con tope de bytes y expulsión inmediata por contenedor, recarga respaldada por el origen tras la expulsión, un modo de retención cero, y telemetría de bytes pico, expulsiones y recargas

Version 2.620.0

Changed

  • Los árboles de páginas ordinarios grandes se abren ahora en placeholders compactos, resuelven páginas aleatorias mediante recorrido 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 guardado

Version 2.619.0

Changed

  • Los campos AcroForm cargados, los nombres cualificados, los widgets, las anotaciones y las páginas comparten ahora 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 en crudo del object graph y mantenimiento automático seguro ante mutaciones

Version 2.618.0

Changed

  • La búsqueda de page objects usa ahora un índice inverso consciente de mutaciones y reconstruido con pereza para números de objeto y punteros de página resueltos, en sustitución de los escaneos repetidos de la tabla de páginas a través de copia de páginas, outlines, destinos con nombre, actions, formularios, accesibilidad y reconciliación del árbol de páginas, exponiendo telemetría de validez y actividad

Version 2.617.0

Changed

  • La comparación de documentos renderizados soporta ahora DPI seleccionado por el llamador, tolerancia de color RGB o de luminancia, puertas de similitud de ratio de píxeles cambiados y tipo SSIM, regiones cambiadas conectadas deterministas, overlays de diferencias PNG opcionales, y presupuestos de píxeles por página y agregados fail-closed con diagnósticos explícitos de renderizado

Version 2.616.0

Changed

  • La comparación de documentos recorre ahora los grafos de objetos indirectos por paths deterministas basados 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 los objetos movidos de las adiciones y eliminaciones, y reporta las comparaciones incompletas en lugar de tratar los resultados limitados por presupuesto como idénticos

Version 2.615.0

Changed

  • La decodificación de imágenes cargadas usa ahora 16 shards de metadatos de caché y coordinación singleflight exacta por clave, realiza de forma concurrente las decodificaciones caras independientes preservando una única decodificación owner para peticiones duplicadas, hace cumplir los presupuestos de bytes y entradas configurados en todos los shards, y expone puntos de entrada de decodificado cacheado más telemetría de concurrencia; cuatro peticiones JPEG independientes de 12,000 píxeles escalan 3.72 veces en cuatro workers Win64 mientras ocho peticiones con 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 selecciona ahora una escala inverse-DCT acotada de 1/2, 1/4 o 1/8, transmite en stream las scanlines escaladas a través de un resampler de punto fijo directamente al bitmap objetivo exacto, preserva los presupuestos de decodificado, la cancelación y el aislamiento de codec workers, y expone telemetría de origen, 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 va 24.05 veces más rápido que la decodificación completa sin asignar su raster de origen de 432 MB

Version 2.613.0

Changed

  • Los arrays /Contents de páginas cargadas exponen ahora un stream concatenado seekable con pereza, retienen los segmentos sin filtrar en almacenamiento respaldado por el origen, decodifican como máximo un segmento filtrado cada 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 1 GiB y 10,000 segmentos por debajo de 64 MiB de memoria de trabajo adicional

Version 2.612.0

Changed

  • Las actualizaciones incrementales mantienen ahora el archivo de origen bloqueado a escritura y respaldado por archivo en lugar de retener los bytes completos del origen, visitan y emiten solo los objetos cambiados, nuevos y eliminados en subsecciones xref dispersas, transmiten en stream el prefijo original hacia un nuevo objetivo, y añaden directamente con rollback para los guardados al mismo objetivo; una revisión de 4 GiB de un solo objeto se queda dentro de 128 MiB de memoria de trabajo adicional

Version 2.611.0

Added

  • Añadida una caché acotada de decodificadores de fuentes cargadas con ámbito de documento, con límite LRU de 32 MiB y 128 entradas, reutilización de parseo singleflight entre páginas y extracción de texto cargado, exportación SVG y reemplazo de texto, resultados deep-copy independientes de GetLoadedFontDecoder, presupuesto de memoria configurable y APIs de telemetría, e invalidación automática de la configuración de grafo, página, recarga, JSON Patch y CMap; el uso repetido de una fuente indirecta compartida parsea ahora su codificación, anchuras, ToUnicode, CIDToGIDMap y mapeos descendentes una sola vez mientras se retiene

Version 2.610.0

Changed

  • Aceleradas la importación de páginas y el injerto de objetos al reemplazar el array lineal de búsqueda de objetos foráneos redimensionado de forma exacta por un mapa open-addressed de tamaño potencia de dos con ámbito de operación, indexado por documento de origen, número de objeto y generación; los objetos indirectos compartidos y los grafos cíclicos conservan su semántica de identidad existente entre importaciones por lotes, mientras los grafos de objetos grandes usan ahora registro en tiempo constante amortizado y búsqueda en tiempo constante esperado

Version 2.609.0

Changed

  • Mejorada la fidelidad de la exportación de páginas a SVG: los operadores de estado gráfico directos w, J, j, M y d preservan ahora anchura de línea, estilos de cap y join con nombre, límites de miter, arrays de dash y fase de dash; q/Q restaura estos atributos a través del contenido anidado y los Form XObjects; los operadores de pintado even-odd f*, B* y b* emiten fill-rule="evenodd"; las hairlines PDF de anchura cero siguen visibles mediante strokes SVG non-scaling

Version 2.608.0

Added

  • Añadida la infraestructura de static-linking de QuickJS: Lib/HPDFQuickJSStatic.pas enlaza los cinco objetos OMF de QuickJS (construidos con bcc32c a partir de fuentes parcheadas) mediante directivas {'$L'} — sin dependencia de DLL — y declara la superficie completa del runtime de C (47 símbolos: matemáticas C99 de msvcrt, aritmética de 64 bits de Borland, stubs atómicos de tamaño neutro, stubs de pthread); thirdparty/QuickJS/build-static.bat automatiza el pipeline de parcheo y compilación. Limitación conocida: JS_NewRuntime tiene éxito pero JS_NewContext se choca con un access violation porque la eliminación de _Atomic cambia el orden de inicialización del struct; la build DLL de v2.607.0 sigue siendo el camino de evaluación que funciona

Version 2.607.0

Added

  • Añadida la generación de códigos de barras 2D DataMatrix (Lib/HPDFDataMatrix.pas): codificación en modo ASCII con compresión de pares de dígitos, ECC Reed-Solomon sobre GF(256) con el polinomio primitivo $12D de DataMatrix, tamaños cuadrados de 10x10 a 144x144, colocación de codewords en dirección alternante y el patrón finder en L; THPDFPage.DrawDataMatrix renderiza la matriz codificada como una rejilla de cuadrados de módulo rellenos
  • Añadida la generación de códigos de barras 2D apilados PDF417 (Lib/HPDFPDF417.pas): codificación en modo texto con emparejamiento de caracteres base-30, ECC Reed-Solomon sobre GF(929) con primitivo 3, codificación del descriptor de símbolo, y disposición en filas/columnas con patrones start/stop; THPDFPage.DrawPDF417 renderiza la matriz de codewords
  • Añadido el binding del motor JavaScript QuickJS (Lib/HPDFQuickJS.pas más quickjs.dll Win32/Win64 precompilada bajo thirdparty/QuickJS/bin/): carga dinámica de DLL, ciclo de vida runtime+context, y la superficie de API de evaluación (Eval/EvalInt/EvalFloat); el code path de Eval tiene un crash de arranque conocido en Win32 al enlazarse en una aplicación y está documentado para investigación posterior
  • Añadido el objetivo de extracción arquitectural THPDFWriter (Lib/HPDFWriter.pas): registro de entradas xref (free/used/compressed), serializador de tabla xref clásica y constructor del diccionario trailer al que el save path de THotPDF delega incrementalmente

Version 2.606.0

Added

  • Añadidos dos comandos de HotPDFCLI: decrypt carga un PDF cifrado con la password dada, lo descifra vía DecryptLoadedDocument y guarda una copia sin cifrar (ruta de salida con -o, por defecto <input>-decrypted.pdf) y optimize recomprime cada stream con FlateDecode vía CompressLoadedDocument (ruta de salida con -o, por defecto <input>-optimized.pdf, rechaza entradas cifradas)

Version 2.605.0

Added

  • Añadida la generación de códigos de barras 2D QR Code: el nuevo Lib/HPDFQRCode.pas implementa un encoder QR completo (modos de codificación numérico, alfanumérico y byte; corrección de errores Reed-Solomon sobre GF(256); versiones 1-40 con los cuatro niveles EC L/M/Q/H; los ocho mask patterns con evaluación de penalización; colocación correcta de módulos incluyendo los patrones finder, timing, alignment, format info y version info). El método THPDFPage.DrawQRCode renderiza la matriz codificada como una rejilla de cuadrados de módulo rellenos en cualquier página en escritura (ModuleSize en puntos, nivel EC y color configurables)

Version 2.604.0

Added

  • Añadida la tabla de decodificación completa de MacExpertEncoding: la mitad alta de 128 bytes mapea ahora los glifos expert (versalitas, cifras old-style, dígitos superiores/inferiores, fracciones, símbolos tipográficos) al punto de código Unicode más cercano o a un surrogate del Private Use Area, en sustitución del fallback anterior de identidad de bytes en crudo que producía salida ilegible para documentos con fuentes Type 1 de codificación expert

Version 2.603.0

Fixed

  • Corregido un fallo intermitente de larga data en ConcurrentObjStmDecryptionMatchesSerial: la global FRevision quedaba obsoleta después de que aes256 se degradara a aes128 bajo la versión por defecto PDF 1.6, desviando CreateKeys hacia la rama V5 que nunca rellena los hashes de password legados /O y /U — el diccionario de cifrado serializado llevaba entonces strings de password vacíos u obsoletos y el archivo no se podía abrir. El fix rederiva FRevision desde el FCryptKeyType degradado tanto en el setter como en los dos puntos de negociación de versión, y la rama del diccionario legado lanza ahora un diagnóstico claro cuando los strings de password no tienen exactamente 32 bytes

Added

  • Añadido el comando html de HotPDFCLI: renderiza un archivo HTML restringido (h1-h6, p, ul, ol, hr, markup inline) a un PDF vía HPDFRenderHTMLDocument

Version 2.602.0

Added

  • Añadida la importación HTML a nivel de bloques: THPDFHTMLImporter (y el wrapper de conveniencia HPDFRenderHTMLDocument) renderiza un subconjunto HTML restringido sobre un documento en escritura — encabezados h1-h6 con tamaños por nivel, párrafos p (el texto de cuerpo suelto se convierte en párrafos implícitos), listas ul/ol con items li indentados (viñeta o numeración 1.), reglas hr, saltos de página automáticos en el margen inferior y recuperación estilo navegador para bloques p/li sin cerrar; las regiones head/script/style se saltan y las etiquetas contenedor atraviesan de forma transparente. El markup inline (b/i/u/font/a/sub/sup, entidades, word wrap) se delega en el renderer TextOutHTML existente, así que los bloques se mantienen juntos dentro de una página; las tablas, las imágenes, el CSS y las listas anidadas quedan fuera del alcance

Version 2.601.0

Added

  • Añadidos tres comandos de HotPDFCLI: merge añade cada página de las entradas adicionales al primer documento y guarda el archivo combinado (ruta de salida con -o, al menos dos entradas, colisión salida/entrada protegida), split escribe cada página seleccionada de un documento en su propio archivo de una página (<prefix>-page<N>.pdf, rango --pages con base uno, prefijo por defecto derivado de la ruta de entrada) y export-svg escribe la exportación SVG de cada página seleccionada (<prefix>-page<N>.svg, página 1 por defecto)

Version 2.600.0

Added

  • Añadida la exportación de páginas a SVG: BuildLoadedPageSVG devuelve un documento SVG 1.1 independiente para cualquier página cargada y SaveLoadedPageAsSVG lo escribe a disco; se exportan los paths (operadores de pintado fill/stroke/fill-and-stroke con los colores DeviceRGB), los runs de texto (elementos <text> posicionados por carácter usando la misma cadena de fallback de decodificación de fuentes que la extracción de texto, honrando Tf/Tc/Tw/Tz/Ts y la matriz de texto incl. rotación y escalado), los image XObjects (decodificados e incrustados como data URIs PNG base64 mapeados a través del cuadrado unitario de la CTM) y los Form XObjects (interpretación recursiva con la matriz del formulario y sus propios /Resources), y las páginas /Rotate 90/180/270 se exportan en la geometría del canvas rotado
  • Límites conocidos heredados del dispatcher de dispositivo de content-streams compartido: sin clipping W/W*, sin shadings sh, sin fuentes Type 3, las imágenes inline solo reportan metadatos y los parámetros de stroke soportados por ExtGState (LW/LC/LJ/ca/CA) se honran mientras los operadores planos w/J/j/d no se despachan

Version 2.599.0

Added

  • Añadida la herramienta de línea de comandos HotPDFCLI (tools/HotPDFCLI): un front end de consola con tres comandos — info (versión PDF, recuento de páginas y tamaño de la primera página, método de cifrado, linealización y estructura xref, contadores de anotaciones/fuentes/imágenes/formularios/firmas, metadatos Info), extract-text (rangos --pages con base uno, salida a archivo con --out, modo de rejilla monoespaciada --layout que respeta el orden de lectura visual) y verify (estado por campo de firma, firmante, motivo, hash, hora de firma, cobertura de todo el documento y estado del certificado, salida distinta de cero si alguna firma falla); Build-HotPDFCLI.bat produce binarios Win32 y Win64

Version 2.598.0

Added

  • Añadido SetRenditionMediaPlayParameters: acopla o actualiza el diccionario de parámetros de reproducción de medios /P de una media rendition con objetivos must-honour /MH o best-effort /BE que llevan el porcentaje de volumen, la visibilidad del controlador, el flag de autoplay, el modo de ajuste (meet/slice/fill/scroll/hidden), el recuento de repetición y una duración de timespan intrínseca, infinita o explícita
  • Añadido SetRenditionMediaScreenParameters: acopla o actualiza el diccionario de parámetros de pantalla de medios /SP de una media rendition (tipo de ventana floating/full-screen/hidden/screen-annotation rectangle, color de fondo DeviceRGB, opacidad de fondo, índice de monitor)
  • Añadido SetSoundAnnotationParameters: reescribe el formato de muestra del stream /Sound de una anotación Sound (rate, canales, bits por muestra, codificación Raw/Signed/muLaw/ALaw) más allá de los defaults incrustados de 22050 Hz estéreo 16-bit Signed, y fija el icono /Name como Speaker o Mic

Version 2.597.0

Added

  • Añadido SetMovieAnnotationParameters: sobreescribe el diccionario /Movie de una anotación de película (par de aspecto, rotación 0/90/180/270, duración en segundos, visibilidad del poster) que AddMovieAnnotation creó con sus defaults incrustados en código
  • Añadido SetRichMediaPresentation: rellena los diccionarios de activación, desactivación y presentación /RichMediaSettings de una anotación RichMedia (nombres de condición como PO de página abierta, flags de toolbar / UI de navegación / clic de contexto / transparencia); un nombre de condición vacío omite el diccionario correspondiente
  • Añadido ResolveIndirectObject en THotPDF: resuelve las referencias indirectas que el lado de autoría guarda dentro de los diccionarios escritos, así que los llamadores pueden navegar árboles de objetos recién construidos; AddRichMediaAnnotation registra ahora también su anotación en LastAnnotation

Version 2.596.0

Added

  • Añadido el descubrimiento en vivo de evidencia de revocación: el parser de certificados lee ahora las extensiones URI de AIA OCSP responder y CRLDistributionPoints, HPDFExtractCertificateRevocationURLs las expone por certificado, y HPDFCollectCMSRevocationRequests las convierte en peticiones de evidencia (GET pkix-crl por punto de distribución, POST ocsp-request con un cuerpo CertID SHA-256 mínimo de RFC 6960 construido a partir del certificado y su emisor, con los certificados self-signed resolviéndose como su propio emisor)
  • Añadido HPDFValidateCMSCertificatePathOnline: recoge esas peticiones, las ejecuta a través del transporte suministrado por el llamador sobre la maquinaria existente de retry/workers (la biblioteca nunca abre sockets), y alimenta al validador offline con cada respuesta OCSP y CRL obtenida; las descargas fallidas degradan a la semántica de evidencia offline

Version 2.595.0

Added

  • Añadida la decodificación de regiones halftone JBIG2 (tipos de segmento 22/23): diccionarios de patrones (type 16) con bitmaps colectivos MMR o aritméticos, pilas de bit-planes de escala de grises tanto en forma MMR (planos encadenados alineados a byte) como aritmética (un decodificador MQ compartido), colocación en rejilla con vectores de punto fijo 8.8 y el mapa en blanco HSKIP opcional
  • Añadidas las regiones generic-refinement JBIG2 independientes (types 42/43, GRTEMPLATE 0/1 con TPGRON) que refinan el bitmap archivado de un segmento de región referenciado o el buffer de página
  • Añadidos AddPubSecKeyMaterial / ClearPubSecKeyMaterials: claves privadas de destinatario adicionales que se prueban contra cada envelope /Recipients cuando el PubSecKeyMaterial primario no casa
  • Añadidos los constructores de test-streams HPDFJBIG2Codec_EncodeHalftoneRegionTestStream y HPDFJBIG2Codec_EncodeStandaloneRefinementTestStream que cubren los nuevos tipos de segmento de punta a punta

Fixed

  • Corregida la carga de documentos AES-128 de clave pública: la pasada de objetos legada dejaba FileKey, StringKeyType y StreamKeyType sin inicializar tras la división pubsec, así que cada objeto se descifraba con una clave basura (una carga Win64 fallaba de plano; una carga Win32 producía plaintext erróneo en silencio)
  • Corregido el viaje de ida y vuelta de strings cifrados: el ciphertext se serializa ahora siempre como string hex porque los literal strings normalizan CR, LF y CRLF a un único LF y el procesado de escapes podía voltear bytes de cifrado arbitrarios

Version 2.594.0

Added

  • Añadida la aproximación de identidad integrada para los CMaps CJK UCS2/UTF16 predefinidos (UniJIS-UCS2-H, UniGB-UTF16-V y 15 más): HPDFLoadStandardCMapFile responde desde una tabla integrada cuando no hay recursos CMap en disco, así que la extracción de texto Type0 ya no decodifica códigos de 2 bytes de un byte en uno
  • Añadidas las tablas Huffman JBIG2 suministradas por el usuario (segmento type 53, forma descriptora del Anexo B.2): el decodificador nativo parsea los segmentos de tabla y los selectores SDHUFFDH/SDHUFFDW/SDHUFFBMSIZE/SDHUFFAGGINST del diccionario de símbolos y SBHUFFFS/DS/DT/RDW/RDH/RDX/RDY/RDSIZE de la región de texto con valor 3 los resuelven desde los segmentos referenciados
  • Añadido SetStructureClassMapEntry, que registra el diccionario de atributos compartido de un nombre de clase en el /ClassMap del StructTreeRoot, completando la API /C de SetStructureElementClass

Fixed

  • Corregida la recuperación de clave multi-destinatario de clave pública: los envelopes /Recipients se guardaban en una lista sin recuento que aliasaba un buffer entre entradas, así que los documentos con dos o más destinatarios derivaban una file key errónea para cada cifrado; los envelopes son ahora copias propias y el path legado SHA-1 hashea los bytes prístinos del envelope como el path AES-256

Version 2.593.0

Added

  • Añadido el renderizado de Shading Type 1 (basado en funciones): la porción visible del rectángulo de dominio se subdivide por un quadtree guiado por el error de color y cada celda hoja se pinta como dos triángulos de degradado con colores de vértice muestreados de la función de 2 entradas, en sustitución del diagnóstico de fallback "not sampled" anterior
  • Añadida la evaluación tolerante de funciones de 2 entradas: una función que solo declara una entrada degrada a f(x) (constante en la segunda coordenada de dominio) en lugar de fallar, así que las funciones sampled y exponenciales detrás de un shading Type 1 siguen pintando

Version 2.592.0

Added

  • Añadida la cuarentena de object-streams: un contenedor /Type /ObjStm corrupto se registra con un motivo (THPDFObjStmQuarantineReason: no es un stream, diccionario malo, cabecera mala, tamaño de stream malo, fallo de descifrado, fallo de descompresión, /First fuera de rango, cabecera no parseable o excepción del contenedor), una línea de diagnóstico y los números de objeto miembro que dejó sin resolver, mientras los contenedores independientes siguen cargando
  • Añadida la cuarentena a nivel de miembro (osqrMemberUnparsable): un cuerpo de miembro que falla al parsearse de un contenedor decodificado con éxito se registra una vez sin afectar a sus hermanos, y GetLoadedQuarantinedObjStmCount / GetLoadedQuarantinedObjStmInfo exponen cada registro; los registros de cuarentena sobreviven a los reintentos de recuperación de una carga, se deduplican por contenedor y se limpian en la siguiente entrada de carga