Registro de cambios
Historial de versiones
« Volver al índice de la documentación
Historial de versiones de la biblioteca PDF Library for Delphi. Las entradas se enumeran de la más reciente a la más antigua; cada versión sigue el versionado semántico conforme a la política de publicación del proyecto.
Último lanzamiento
- Versión más reciente: v3.555.0; Fecha de publicación: 2026-10-10
Version 3.555.0
Añadido
- Windows 11 en ARM admite compilaciones nativas desde el código fuente con Free Pascal ARM64 y Delphi ARM64EC, con salidas de compilación independientes para la biblioteca y la DLL
Cambiado
- Windows ARM utiliza los proveedores del sistema de AES CBC/GCM y JPEG, compresión portátil y una biblioteca compartida OpenJPEG acorde a la arquitectura para JPEG 2000
- La DLL de Windows ARM expone exportaciones C ABI con nombre e identificadores de instancia opacos positivos sin truncar punteros de 64 bits
Corregido
- El XMP de Delphi ARM64EC usa interfaces MSXML conscientes de los espacios de nombres con análisis XML acotado para evitar fallos en llamadas OLE de enlace tardío
Version 3.554.0
Añadido
- La compatibilidad headless nativa se extiende a Linux ARM64 y macOS x64, con compilaciones FPC acordes a la arquitectura y dylibs de Delphi para Intel macOS
- Las herramientas nativas de verificación admiten Linux y macOS tanto en x64 como en ARM64
Corregido
- Intel macOS selecciona las ubicaciones correctas de los proveedores nativos de OpenSSL, Cairo, Fontconfig y OpenJPEG en lugar de las rutas de Apple silicon
- El enlazado de Delphi para Intel macOS resuelve las entradas absolutas de bibliotecas del sistema y de frameworks contra la caché del SDK de Windows seleccionada al usar LLVM LLD
Version 3.553.1
Añadido
- Delphi macOS ARM64 admite la edición nativa de metadatos XMP y los ciclos completos de ida y vuelta, incluidas las propiedades personalizadas, los identificadores de estándares y la conservación de los espacios de nombres no relacionados
Corregido
- La firma PFX nativa de Delphi en macOS y las marcas de tiempo RFC 3161 seleccionan el proveedor OpenSSL de macOS; las firmas PDF RSA y EC, las cadenas de confianza explícitas, las marcas de tiempo de firma y las marcas de tiempo del documento se verifican en ARM64
- Los ciclos nativos de carga y guardado de XMP conservan un único sobre de paquete en lugar de acumular instrucciones de procesamiento
Version 3.553.0
Añadido
- Delphi ya puede compilar la biblioteca dinámica headless de macOS ARM64, con los mismos 880 puntos de entrada C que la compilación nativa con Free Pascal
- El backend de Delphi para macOS utiliza fuentes nativas, renderización Cairo, cifrado y resúmenes OpenSSL, zlib y libcurl del sistema, OpenJPEG, y codificación y descodificación JPEG de ImageIO
Corregido
- El acceso a archivos en macOS, la búsqueda de recursos, las estructuras binarias de ancho fijo y los enlaces a códecs nativos utilizan ahora declaraciones correctas para cada plataforma
- La renderización en segundo plano utiliza un evento de pausa portátil en macOS
- Delphi macOS descifra correctamente las cadenas PDF cifradas y los flujos de objetos sin liberar sus búferes de entrada durante la descodificación
Version 3.552.2
Corregido
- Se ha restaurado la compatibilidad con compiladores de Delphi anteriores en la validación de facturas y los proveedores de OCR, incluidas las compilaciones trial de la biblioteca para Win32 y Win64
Version 3.552.1
Corregido
- Los búferes de la biblioteca dinámica de macOS exponen ahora sus datos reales, conservan los bytes cero incrustados e informan correctamente de las liberaciones completadas
- Los identificadores de instancia de la biblioteca dinámica siguen siendo válidos en destinos de 64 bits sin truncar direcciones de objetos ni reutilizar identificadores ya liberados
- La descarga de la biblioteca libera las instancias y los búferes pendientes
Version 3.552.0
Añadido
- Generación headless de PDF, carga, flujos de trabajo de texto y renderización de mapas de bits Cairo en Free Pascal nativo sobre Linux x86_64 y macOS arm64, con fuentes del sistema y proveedores nativos de PNG, JPEG y JPEG 2000
- Cifrado OpenSSL nativo, resúmenes, firma PKCS12 y verificación CMS, con anclajes de confianza de certificados explícitos y tiempos de verificación comprobados
- Acceso por intervalos HTTP mediante libcurl integrado y flujos de trabajo de marca de tiempo RFC 3161 en los destinos Free Pascal nativos, incluidos los atributos de marca de tiempo de firma y la verificación de la marca de tiempo del documento
- El análisis y la escritura nativos de metadatos XMP conservan las propiedades basadas en espacios de nombres y rechazan las DTD y el XML sobredimensionado o profundamente anidado antes de construir el DOM
Corregido
- La renderización nativa de mapas de bits por franjas inicializa la transformación de página y conserva el suavizado de Cairo en los límites de franja
- Las declaraciones compartidas de marca de tiempo, validación y etiquetado ya no requieren una compilación opcional de PDFium
Version 3.551.0
Añadido
- El reemplazo exacto de contenido Unicode conserva los caracteres circundantes, el espaciado TJ existente y las anclas del texto siguiente, admite el borrado y las fuentes de reemplazo verificadas, e informa de las asignaciones no admitidas antes de reemplazar el texto seleccionado de la página
- La extracción estructurada sigue el orden de lectura etiquetado, resuelve los roles semánticos y los espacios de nombres, detecta columnas y elementos accesorios de la página, y conserva las celdas de tabla vacías, combinadas y entre páginas en las exportaciones a JSON, CSV, Markdown y DOCX
- Los adaptadores opcionales de OCR con Tesseract admiten resultados hOCR y TSV, confianza de orientación y líneas base, con límites explícitos y diagnósticos por etapa
- Las capas de texto OCR pueden omitir el texto existente o reemplazar solo las capas que antes pertenecían a la biblioteca, conservando los píxeles de la página y el contenido compartido
- Los nuevos controles Delphi, DLL y ActiveX exponen opciones de análisis estructurado, configuración de OCR y diagnósticos de reemplazo exacto
Cambiado
- El JSON estructurado usa la versión 2 del esquema, con identificadores semánticos de nodo estables, fuentes de orden de lectura, extensiones de tabla y confianza de inferencia
- El reemplazo Unicode rechaza las asignaciones incompletas, los clústeres de grafemas parciales y los orígenes no admitidos sin adivinar los bytes de la fuente
Corregido
- El espaciado numérico de TJ aplica ahora el escalado horizontal una sola vez en la renderización y en la geometría del texto
- La medición de fuentes vuelve a seleccionar el recurso real cuando las colecciones están compartidas y reutiliza el análisis de fuente directa dentro de cada ámbito de recursos
- Las huellas de contenido conservan sus valores hash con las comprobaciones de rango y desbordamiento activadas
Version 3.550.0
Cambiado
- La exportación SVG conserva ahora el orden de pintado de la página, el contenido Form anidado, las rutas de recorte exactas y la geometría de trazos transformada
Añadido
- Un recurso raster nativo acotado se encarga de las operaciones de pintado no admitidas cuando la configuración de exportación permite una instantánea del fondo
- GetLastSVGExportDiagnostics informa de los píxeles omitidos, las aproximaciones y el recurso raster alternativo, incluidas las apariencias de anotaciones visibles fuera de la exportación del contenido de la página
Version 3.549.0
Añadido
- El esquema XML de facturas con versiones y la validación Schematron aceptan proveedores opcionales y devuelven la finalización de cada etapa, identificadores de reglas, rutas de campos, gravedad y diagnósticos del motor
- La validación de negocio de facturas incrustada lee el adjunto seleccionado con descodificación acotada y rechaza los nombres de archivo ausentes o ambiguos
- Delphi, DLL y ActiveX pueden ejecutar la validación con xmllint y SaxonJ con archivos de reglas explícitos, límites de tiempo y límites de salida
Version 3.548.0
Añadido
- Las comprobaciones de lector de PDF/UA-2 validan la identificación, la versión de PDF, las referencias a espacios de nombres, las asignaciones de roles, las raíces del documento y los padres de estructura mediante una selección de perfil explícita o automática
- Las API de Delphi, DLL y ActiveX seleccionan un objetivo PDF/UA dentro de una pipeline de validación reutilizable y exponen una cobertura de validación comprobada, sin verificar y acotada
Cambiado
- Los informes de validación y preflight identifican PDF/UA-2 con independencia de PDF/UA-1 y advierten de que superar las comprobaciones implementadas no equivale a una certificación de accesibilidad completa
Version 3.547.0
Añadido
- Comparación visual de páginas renderizadas con tolerancia por canal, regiones ignoradas, áreas modificadas, recuentos de píxeles, máscaras de diferencia y superposiciones
- La comparación visual de documentos alinea las imágenes de página idénticas en torno a las páginas insertadas y eliminadas, e informa de los pares de páginas modificados o con tamaño cambiado
- La comparación visual de archivos a través de Delphi, DLL y ActiveX devuelve un informe JSON estructurado
Version 3.546.0
Añadido
- Los informes de cobertura de validación de Arlington distinguen las pasadas completas, los fallos conocidos, la compatibilidad incompleta con reglas y los errores de operación a través de las API de Delphi, DLL y ActiveX
Corregido
- Las expresiones de modelo no admitidas producen ahora diagnósticos explícitos en lugar de contribuir silenciosamente a un resultado de validación correcto
Version 3.545.0
Añadido
- Los ejemplos WorkflowWorkbench de la DLL para C# y VB.NET muestran la generación de informes multipágina, la extracción de texto, la división y fusión de páginas, las transferencias binarias en memoria y la propiedad explícita de los recursos nativos
- DocumentInspectionWorkbench proporciona ahora inventarios de páginas y umbrales configurables de gravedad de diagnóstico en Delphi, C++Builder y Lazarus, con entradas generadas para una primera ejecución autosuficiente
Cambiado
- LinkDemo, la demo de la DLL para C++, crea ahora un documento de navegación completo con enlaces de página y marcadores, acepta rutas explícitas de DLL y de salida, verifica el documento guardado e informa de los fallos mediante códigos de salida del proceso
- WorkflowGallery verifica su documento guardado y el cuerpo de la respuesta HTTP mediante comprobaciones de ida y vuelta, y publica un informe de verificación
- La visita rápida de DocumentLab incluye la inspección de documentos, y los portfolios nativos y la introducción del paquete enlazan con un catálogo dedicado de flujos de trabajo de la DLL
Corregido
- La inspección de documentos en Delphi inicializa los contadores por archivo antes del análisis, incluidos los informes de entradas que no se pueden cargar; Delphi y C++Builder escriben números JSON independientes de la configuración regional
- El ejemplo de diagnóstico de la DLL para C++ libera las instancias nativas antes de descargar la biblioteca, también en su camino de éxito
Version 3.544.0
Añadido
- Nueve labs nativos de dominio ofrecen selección de escenario, visitas rápidas guiadas, registros por escenario y experiencias HTML sin conexión que se abren automáticamente al iniciar el lab sin argumentos
Cambiado
- Los portfolios de ejemplos de Delphi, C++Builder y Lazarus se centran ahora en Showcase, HelloWorld y nueve labs, con Delphi conservando su Reader interactivo
- Las demostraciones especializadas y los tutoriales enfocados se integran como módulos de escenario locales dentro de cada lab, conservando sus operaciones originales sin proyectos de ejemplo separados ni un directorio de fuentes de demos común
- Las visitas guiadas de los labs ejecutan sus propios escenarios con carpetas de salida aisladas y tiempos de espera, de modo que ya no dependen de ejecutables de ejemplo hermanos compilados por separado
- Las notas de los escenarios se enlazan desde las guías de dominio, y las integraciones opcionales con el marco de informes de Delphi se agrupan bajo ContentLab
- Las matrices de códecs de escaneo de Lazarus marcan como omitidas las rutas de codificación que no pueden completar la prueba generada, y solo publican mediciones JBIG2 cuando el codificador externo solicitado está disponible
Corregido
- Los escenarios de redacción generan ahora documentos PDF 1.7 para que la eliminación de contenido supere las comprobaciones de versión necesarias
- Los escenarios de captura de página conservan una página temporal del documento mientras capturan la última página de contenido, evitando capturas fallidas en documentos de una sola página
- La galería de códigos de barras de C++Builder acepta ahora handles de documento y de página correctos distintos de cero en lugar de rechazar los handles cuyo valor sea mayor que uno
- El escenario de navegación de Lazarus informa ahora de las escrituras de PDF fallidas antes de publicar informes de éxito, incluido su documento complementario de destino remoto
Version 3.543.0
Cambiado
- El portfolio de demos nativas da ahora protagonismo a las visitas insignia y a los bancos de trabajo de funcionalidades, con los tutoriales de API enfocados reunidos en la carpeta Miscellaneous de cada plataforma
Eliminado
- Se han eliminado la adaptación de metadatos del Reader de C++Builder, el ejecutable ReportBridges limitado a prerrequisitos, el ejemplo TextExtract duplicado de Lazarus y la entrada AddWebLinkConsole redundante de Delphi; use en su lugar los ejemplos reales de visor, puente de informes, inspección, extracción y AddWebLink
Corregido
- LoggerDemo de C++Builder cierra ahora su escritor de registros antes de leer el registro de sesión completo y lo imprime como UTF-8, evitando errores de uso compartido de archivos y cuelgues de consola con registros largos tras crear el PDF
Version 3.542.0
Cambiado
- Showcase y AdvancedWorkflowMatrix contienen ahora sus unidades de implementación en cada carpeta de ejemplos de Delphi, C++Builder y Lazarus, de modo que copiar un proyecto ya no requiere un directorio común de unidades de demo
- La guía de fuentes de Showcase apunta a su constructor local, manteniendo el documento de nueve páginas, los formularios editables, las capas conmutables y las exportaciones sin conexión
Corregido
- La suite de flujos de trabajo de C++Builder escribe la lista completa de flujos de trabajo y el informe de consola antes de salir
Version 3.541.0
Añadido
- El Showcase de nueve páginas incluye un resumen de proyecto editable y un plano por capas, con valores de formulario guardados y notas de diseño opcionales
- C++Builder incluye ahora el mismo Showcase insignia que Delphi y Lazarus
- Las ejecuciones de Showcase de consola crean una página de experiencia sin conexión con vistas previas PNG de página completa, el PDF interactivo y exportaciones de texto UTF-8
Cambiado
- El Showcase de Delphi abre con una vista previa guiada, edición directa de formularios, un control de visibilidad de las notas de diseño, guardado del PDF editado y acciones de exportación de imagen y texto
- Las tres entradas nativas de Showcase comparten su constructor de documentos y su implementación de exportación sin conexión
Corregido
- Las secciones de tabla del Showcase, las muestras de anotaciones y los símbolos de códigos de barras caben en sus áreas previstas, y las etiquetas de página siguen siendo legibles
- El Showcase de Delphi escribe en un directorio de salida propiedad del usuario y gestiona de forma explícita los fallos de vista previa, exportación y guardado
Version 3.540.0
Cambiado
- AdvancedWorkflowMatrix comparte un único lanzador de flujos de trabajo entre Delphi, C++Builder y Lazarus, ejecuta las demos especializadas con salidas aisladas, admite selección y tiempos de espera, y registra los binarios ausentes y los fallos de los procesos hijo en informes CSV y HTML
- TextExtract y ExtractText de Lazarus comparten una única sesión de extracción de solo lectura, aceptan contraseñas, escriben la salida en UTF-8 y conservan la entrada mínima de consola y la comparación de modos de extracción
- El HelloWorld ActiveX de C# es un punto de partida centrado en crear y guardar, con una opción de salida headless, liberación explícita de COM y diagnósticos de despliegue claros
Corregido
- Table2PDF de C# evita una página en blanco adicional, usa los identificadores de fuente devueltos y localiza la DLL según la arquitectura de su proceso
- El ejemplo de inicio de la DLL para Visual Basic incluye el enlace nativo que necesita para compilarse y gestiona la carga de la DLL específica de cada arquitectura
- La guía del motor de informes de C++Builder informa de la integración ausente y ya no presenta un PDF de muestra como si fuera un resultado real del puente
- El Reader de C++Builder falla de forma explícita cuando el PDF proporcionado no se puede leer, en lugar de sustituirlo por su ejemplo generado
Version 3.539.53
Corregido
- La demo TextPaging se detiene con un error cuando no se pueden cargar las fuentes necesarias o cuando su límite de páginas deja texto sin renderizar, evitando así que un PDF parcial se guarde y se abra como si fuera un resultado correcto
Version 3.539.52
Corregido
- La demo de consola ActionNavigationMatrix comprueba la escritura del PDF principal y del PDF complementario, junto con la exportación FDF, antes de informar de éxito, y se detiene con un código de salida distinto de cero cuando una operación de salida falla
Version 3.539.51
Corregido
- Las búsquedas en árboles de nombres y árboles numéricos ignoran los límites invertidos en lugar de ocultar entradas hijas válidas en PDFs mal formados
Version 3.539.50
Corregido
- La ordenación de enteros cubre todo el rango con signo sin desbordar su comparación
- Las listas vacías de enteros ordenados y de posiciones de archivo devuelven cero en las consultas de sucesor; la pertenencia a enteros dispersos evita reservar cada rango intermedio conservando el orden de inserción y las entradas duplicadas
Version 3.539.49
Corregido
- La importación de PNG rechaza chunks truncados, cabeceras y paletas mal formadas, valores de entrelazado no admitidos y chunks finales ausentes o mal formados antes de dar la imagen por utilizable
- Recargar un PNG borra los datos de imagen y los metadatos anteriores conservando las opciones del lector; las lecturas de solo metadatos se saltan el contenido de la imagen sin reservar sus buffers
Version 3.539.48
Corregido
- Los streams de archivo respetan la longitud solicitada al redimensionarse, y los nombres de archivo largos se expanden a rutas absolutas completas
- La inserción en streams conserva longitudes y cursores de 64 bits, rechaza los puntos de inserción fuera del stream antes de modificar datos e informa de lecturas o escrituras incompletas
- Los nombres de archivo con número de página añaden el número antes de la extensión, conservando los nombres de directorio y gestionando también los nombres sin extensión
Version 3.539.47
Corregido
- El renderizado y la continuación de texto HTML conservan los corchetes angulares escapados y la escritura literal de las entidades en lugar de interpretar por segunda vez el texto ya decodificado
- Los fragmentos y bloques de código Markdown conservan los ampersands y la escritura de las entidades en el HTML generado y en el PDF renderizado; las exportaciones de datasets conservan el mismo texto literal en los valores de celda
Version 3.539.46
Corregido
- La demo Delphi ExtractImage se salta las imágenes que no se pueden seleccionar, cuenta las escrituras correctas e informa de la extracción incompleta en lugar de mostrar un mensaje de éxito incondicional
- ExtractImage crea el directorio de salida y elimina solo la extensión del archivo de entrada al nombrar las imágenes extraídas; ExtractAnnotAttach se detiene cuando la carga devuelve cualquier resultado distinto de éxito
Version 3.539.45
Corregido
- Las consultas en árboles de nombres y árboles numéricos se saltan los nodos hijos cíclicos o repetidos, continúan con los hermanos válidos y manejan árboles profundamente anidados sin desbordar la pila de llamadas
- La enumeración de árboles de nombres ignora las claves de nombre no válidas, y la búsqueda y el borrado conservan el desplazamiento completo de la entrada en hojas con más de 32.768 pares nombre/valor
Version 3.539.44
Corregido
- Las consultas y la captura de cajas de página ignoran las cajas bleed, trim y art no heredables en los nodos padre del árbol de páginas, usando en su lugar la caja de la página hoja o su crop box efectivo
HasPageBoxinforma de las cajas media y crop heredadas directamente de forma coherente con los arrays indirectos
Version 3.539.43
Corregido
- La importación vectorial EMF empieza con la pluma negra y el pincel blancos por defecto, de modo que los registros de dibujo sin selección explícita de objeto siguen siendo visibles
- Las polilíneas de 32 y 16 bits conservan figuras independientes dentro de los corchetes de trayecto, y las multi-polilíneas de 16 bits aplazan el pintado hasta que el trayecto se dibuja y respetan una pluma nula
Version 3.539.42
Corregido
- CapturePageEx con la opción de caja bleed, trim o art sobre una página que no define esa caja captura ahora el crop box, tal como indica la documentación, en lugar del media box completo; la caja rellenada en la página sigue el mismo valor por defecto de ISO 32000-1
Version 3.539.41
Corregido
- La importación EMF dibuja los registros PolyBezier de 32 bits desde su primer punto en lugar de usarlo como punto de control, de modo que las curvas coinciden con las de los registros de 16 bits
- Los registros Polyline de EMF se dibujan como líneas abiertas solo con la pluma, en lugar de formas cerradas y rellenas
- Los registros PolylineTo de EMF empiezan en la posición actual y ya no se cierran, y un registro cuyos dos primeros puntos están en una línea horizontal ya no desactiva la pluma para todas las formas dibujadas después de él
- Los registros PolyPolyline de EMF de 32 bits dibujan todas las polilíneas; antes se saltaban los registros con más de una polilínea y las polilíneas individuales no dibujaban nada
Version 3.539.40
Corregido
- ImportAnnotationsFromFDFString e ImportAnnotationsFromFDF devuelven el número de anotaciones realmente añadidas, igual que la importación XFDF; las entradas que se saltan porque su página está fuera del documento o porque no tienen /Subtype ya no se cuentan
Version 3.539.39
Corregido
- La importación EMF dibuja los registros PolyDraw por completo: los puntos que cierran una figura al trazar una línea o una curva ya no se descartan, de modo que las formas cerradas conservan su último segmento y las curvas siguientes se mantienen sincronizadas; un registro PolyDraw de 16 bits con varias figuras las conserva todas, y una figura que no empieza con un movimiento comienza en la posición actual
- La importación EMF se salta los registros Polyline, PolyBezier, Polygon, PolyDraw y los PolyPolyline y PolyPolygon de 16 bits que declaran más puntos de los que contienen, en lugar de leer más allá del registro, lo que dibujaba líneas extrañas procedentes de los registros siguientes o podía romper la conversión
Version 3.539.38
Corregido
- Las regiones de semitonos JBIG2 cuya rejilla empieza a la izquierda o por encima de la región, o cuya rejilla rotada coloca celdas en coordenadas negativas, se decodifican correctamente: esas celdas se recortan en el borde de la región en lugar de descartarse o moverse, el origen de la rejilla ya no se arrastra hasta la esquina de la región, y las celdas completamente fuera se saltan exactamente como especifica ITU-T T.88
Version 3.539.37
Corregido
- Las imágenes JBIG2 con una región de semitonos que salta celdas de la rejilla fuera de la región ahora se decodifican correctamente cuando la rejilla de semitonos no es cuadrada; la máscara de salto se construía con filas y columnas intercambiadas, así que se decodificaban celdas que debían saltarse y el resto de la región salía ilegible
Version 3.539.36
Corregido
- Una página movida con MovePage obtiene copias propias de las cajas de página, la rotación y los recursos que heredaba de su antiguo nodo Pages, de modo que llamar a SetPageBox o dibujar texto e imágenes en la página movida ya no cambia el nodo antiguo ni las páginas que aún heredan de él
- SetPageBox da a la página su propia caja cuando la caja existente es un objeto indirecto compartido con otras páginas o con un nodo Pages, en lugar de redimensionar todas las páginas que la referencian
- CopyPageRanges ya no deja las páginas de origen copiadas compartiendo sus cajas de página con el nodo Pages ni su CropBox con su MediaBox, así que cambiar una caja en una página de origen tras la copia ya no redimensiona sus páginas hermanas o ambas cajas a la vez
Version 3.539.35
Corregido
- TransformPageElement escribe la parte de escala y rotación de la matriz con la que envuelve un trazado o una imagen con seis decimales en lugar de cuatro, de modo que las rotaciones pequeñas y los factores de escala finos ya no se desvían de forma visible en páginas grandes; la traslación conserva cuatro decimales
Version 3.539.34
Cambiado
- Las ediciones de página que reescriben una capa de contenido, incluidas ScalePage, TransformPageElement, DeletePageElement, RedactRegion, ConvertTextToPaths y los programas de ParsePageContentLayer reescritos con WritePageContentLayer, conservan el texto original de cada operando numérico que no cambian, en lugar de redondear toda la capa a cuatro decimales
- TPDFContentProgram cuenta con una nueva propiedad CanonicalNumbers; asígnela antes del análisis para reescribir cada número en forma canónica, tal como hace NormalizeContentStreams
Corregido
- Un número distinto de cero menor que la precisión de salida, como un factor de escala de 0.00001, se escribe con sus dígitos significativos en lugar de 0, de modo que la normalización de contenido, el optimizador de contenido al guardar y los nuevos objetos PDF ya no convierten una transformación minúscula en una matriz singular que oculta el contenido
Version 3.539.33
Corregido
- RecolorPage y RecolorDocument ya no fallan con un error de conversión en sistemas de coma decimal cuando una página fija un color con un valor decimal como
0.5 g - DrawSVG, DrawSVGFromFile, GetSVGWidth y GetSVGHeight leen longitudes SVG decimales como
width="100.5"en sistemas de coma decimal en lugar de recurrir a los valores predeterminados, y ExportPageSVG conserva los colores de relleno y trazo decimales - RenderPageRegionToFile y RenderPageToDCClip aceptan rectángulos de recorte decimales como
10.5,20.5,50.5,40.5en cualquier configuración regional; una cadena de recorte mal formada ahora falla o renderiza sin recorte en lugar de lanzar una excepción, y los valores sobrantes ya no desbordan el rectángulo - AddPolygonAnnotation, AddPolyLineAnnotation y AddInkAnnotation leen coordenadas de vértices decimales en cualquier configuración regional y rechazan una lista de coordenadas mal formada
- SetOutputIntentMixingHints acepta valores de solidity como
0.95en sistemas de coma decimal, y CheckDocumentPolicy compara numéricamente valores de características decimales comoDocument.Version >= 1.3
Version 3.539.32
Corregido
- AddTagAttribute escribe como números PDF valores decimales con punto como
0.5o2.5 3.5en sistemas de coma decimal, en lugar de convertirlos en nombres PDF; los valores escritos con el separador decimal del sistema siguen aceptándose - SetStructElemBBox, SetStructElemSpaceBefore, SetStructElemSpaceAfter, SetStructElemStartIndent, SetStructElemEndIndent y SetStructElemColor dan formato a sus números con independencia de la configuración regional del sistema y nunca en forma exponencial
- Los marcadores de posición PDF/VCR creados con BeginPDFVCRPlaceholder pasan la validación GTS_BBox previa al guardado en sistemas de coma decimal
Version 3.539.31
Corregido
- GetSimilarImageDeduplicationReportJSON escribe maxAcceptedMeanError como número JSON válido en sistemas de coma decimal en lugar de
0,333333333333333 - GetObjectJSON y ExportObjectJSON escriben números PDF como
-.25,+3o007.5con la sintaxis de números JSON, de modo que la salida es JSON válido y SetObjectJSON e ImportObjectJSON lo aceptan de vuelta - Los informes JSON escriben
nullpara un valor NaN o infinito en lugar de+InfoNAN, o de fallar con una excepción de coma flotante: GetDocumentJSON para números PDF desbordados, GetAnnotationHitsJSON para coordenadas no finitas, y los informes de barcode, deskew, texto estructurado y PDF/VCR - El formateo de números para la salida de contenido PDF, SVG, HTML y CSV escribe 0 para NaN en lugar de lanzar una operación de coma flotante no válida
Version 3.539.30
Corregido
- ImportAnnotationsFromFDF e ImportAnnotationsFromFDFString vuelven a crear las anotaciones importadas; antes se contaba cada entrada pero no se añadía ninguna, porque el valor /Subtype nunca se leía
- La importación de anotaciones FDF lee /Rect, /Page, /Contents, /T y /Subj en cualquier orden de claves, mantiene cada búsqueda dentro de su propia entrada de anotación y analiza los números con independencia de la configuración regional, incluidas las comas decimales escritas por versiones anteriores
- ExportAnnotationsToFDF y ExportAnnotationsToFDFString escriben el /Rect de cada anotación en el espacio de usuario PDF, de modo que un archivo exportado se reimporta en la misma posición en lugar de desplazar la anotación
Version 3.539.29
Corregido
- ExportAnnotationsToXFDF y ExportAnnotationsToXFDFString escriben los valores rect, opacity, width y dashes con el punto como separador decimal en cualquier configuración regional del sistema, como exige XFDF
- ImportAnnotationsFromXFDF e ImportAnnotationsFromXFDFString leen XFDF estándar con decimales con punto en sistemas de coma decimal en lugar de fallar con un error de conversión, y un número mal formado ahora omite ese valor en lugar de abortar la importación
- Los archivos XFDF escritos por versiones anteriores en sistemas de coma decimal, como
rect="50,500 80,250 70,750 100,125"oopacity="0,600", se importan con los valores previstos
Version 3.539.28
Corregido
- El optimizador de flujos de contenido ya no elimina un
1 0 0 1 0 0 Tmque restablece la posición del texto tras Td, TD, T*, un Tm anterior o texto mostrado, cosa que desplazaba los glifos siguientes al optimizarse los flujos de contenido al guardar; un Tm identidad justo después de BT, o que repita un Tm identidad anterior, sí se sigue eliminando
Version 3.539.27
Corregido
- MovePage, y CollateDocumentsEx cuando reordena páginas, conservan el MediaBox, el CropBox y el Rotate que una página hereda de su nodo Pages padre, de modo que una página movida bajo otro padre ya no cambia de tamaño, recorte ni orientación; antes solo se trasladaba /Resources
- BalancePageTree conserva como referencia al objeto un /Resources, /MediaBox, /CropBox o /Rotate heredado que sea un objeto indirecto, en lugar de copiarlo en cada página
Version 3.539.26
Corregido
- El contenido de página escrito por AddPageMatrix, ScalePage, DeskewPage, TransformPageElement, DeletePageElement, RedactRegion y ConvertTextToPaths usa siempre el punto como separador decimal y notación sin exponentes; en sistemas con configuración regional de coma decimal estas llamadas ya no producen operadores rotos como
0,5 0 0 0,5 0 0 cm, y los valores muy pequeños nunca se escriben en forma exponencial - ExportAnnotationsToFDF y ExportAnnotationsToFDFString escriben los rectángulos de anotación con decimales con punto, sea cual sea la configuración regional del sistema
- RecolorPage y RecolorDocument escriben operandos de color neutros respecto a la configuración regional para cualquier separador decimal, no solo para la coma
- AddPageMatrix, ScalePage y RedactRegion rechazan argumentos NaN o infinitos en lugar de escribirlos en la página
Version 3.539.25
Corregido
- La reparación de la apariencia de campos de formulario escribe /Type y /Subtype en el flujo de apariencia en lugar de crear estados de apariencia /N falsos, los colores de borde CMYK ya no se leen más allá de sus cuatro componentes, y eliminar un campo de formulario ya no lee mal el número de páginas a través de valores /Count indirectos
- La reparación del estilo de casillas de verificación conserva ambos estados de exportación personalizados cuando no existe estado Off, en lugar de borrarlos, y los campos hijos de los botones de opción registran su estado activado con la misma codificación con la que comparan los establecedores de valor
- Las anotaciones de archivo adjunto sin diccionario /EF ya no provocan fallos, la exportación de anotaciones de sonido deja de intercambiar el orden de bytes del audio de 8 bits, la opacidad de las anotaciones de marcado usa una única escala coherente, y SetAnnotRect vuelve a informar de éxito
- La reconstrucción de la apariencia de anotaciones ya no deja un flujo liberado en la tabla de objetos de estructura cuando el documento carece de callback de objetos indirectos
- El optimizador de mirilla ya no descarta establecedores de color que otro operador de color del mismo lado dejó obsoletos entre medias, y sigue colapsando los duplicados adyacentes simples
- La extracción de texto trata el operador " como espaciado entre palabras y caracteres en lugar de corromper el interlineado, y FindInstructionsInRect ya no notifica rangos solapados para trazados con varios subtrazados
- Importación EMF: PolyDraw lee los indicadores de tipo de punto en el desplazamiento correcto, POLYTEXTOUTW siempre lee texto UTF-16 y ya no acumula glifos entre cadenas, el mapeo de glifos de text-out pequeño ya no sustituye toda la cadena por un solo carácter, y los rellenos de degradado ya no dividen entre cero con rectángulos degenerados
- La importación EMF acota a los límites del registro cada tamaño de cabecera de mapa de bits, número de rectángulos de región, número de polígonos e índice de vértices de degradado que venga del archivo, y deja de truncar los punteros de registro a 32 bits en Win64
- Las regiones de semitono JBIG2 colocan los patrones en la dirección de rejilla correcta, las pruebas de máscara de salto comparan en punto fijo, los contextos aritméticos retenidos toman una instantánea de las estadísticas del decodificador en lugar de fallar, las tablas de símbolos run-length protegen un código de repetición en primera posición, las líneas de referencia MMR se detienen en el centinela, los símbolos parcialmente fuera del lienzo se recortan en lugar de desplazarse, y los recuentos malformados se manifiestan como fallos de decodificación y no como errores de ejecución ajenos
- La decodificación CCITT inicializa las búsquedas de elementos cambiantes y gestiona peticiones de bits menores que los bits restantes sin desplazamientos negativos; el codificador CCITT cubre todo el rango del modo vertical y deja de leer un byte más allá del búfer de fila
- La carga de TIFF comprueba los límites de cada lectura de IFD, evita que las imágenes de paleta se decodifiquen como rampas de grises, escribe StripByteCounts una sola vez y acota los números de página solicitados; la recompresión JPEG fallida ya no da por buena un flujo corrupto
- La comparación de documentos incorpora los datos de flujo a las huellas de objetos, empareja los objetos duplicados uno a uno, ordena las claves de diccionario, separa los elementos de los arrays e informa de los fallos de comparación en lugar de un falso veredicto de sin modificaciones
- El generador de nombres del renderizado paralelo ya no lee más allá de un patrón de un solo carácter
- Se repararon más demos: los veredictos de la lista de archivos se emparejan con el archivo correcto, el visor multifunción reintenta de verdad con la contraseña introducida, cuatro demos ya no anteponen una primera página en blanco, las demos de archivos incrustados y de operaciones de página resuelven sus rutas de ejemplo y de salida junto a sus entradas, y los auxiliares de estrategia de imagen comprueban los resultados de la biblioteca sobre los que se apoyan
- El control ActiveX inicializa el resultado de cada método con entrada de variant, de modo que una variante rechazada ya no devuelve basura de la pila
Version 3.539.24
Corregido
- El token de sello &T expande ahora el Title del documento en lugar del Author en cabeceras, pies de página y sellos
- Las anotaciones PrinterMark escriben el tipo de marca /PN como objeto de nombre PDF, tal y como exige ISO 32000-1, en lugar de como una cadena literal
- Las consultas de índice de campos hijos en campos de formulario compuestos liberan el campo hijo temporal en lugar de provocar una fuga
- Los árboles de páginas rebalanceados heredan MediaBox, CropBox y Rotate de los nodos antecesores en lugar de solo Resources
- XMP CreateDate y ModifyDate conservan una forma ISO 8601 válida cuando la fecha PDF omite su zona horaria, y la importación XMP sin envoltorio x:xmpmeta ya no descarta actualizaciones de metadatos posteriores
- Los escapes octales en cadenas PDF se detienen en el dígito 7, de modo que \0689 ahora se decodifica como \06 seguido de un 89 literal, tal como define la especificación
- La publicación QDF informa del fallo de escritura original en lugar de enmascararlo con un error de cierre de archivo
- Las compilaciones FPC comprimen y expanden flujos Flate mayores que un chunk como un único flujo zlib en lugar de miembros concatenados por chunk que otros consumidores truncan
- Las demos EditFormField generan su formulario de ejemplo en la primera ejecución en lugar de fallar al no encontrarlo, y varias demos informan ahora de una carga de documento fallida en lugar de guardar silenciosamente un PDF vacío
Cambiado
- El índice de búsqueda de la documentación lista la página localizada de puntos fuertes con el título propio de cada idioma en lugar de un único título en chino compartido por todas las configuraciones regionales
Version 3.539.23
Añadido
- La decodificación JBIG2 nativa admite la organización de archivo de acceso aleatorio independiente con longitudes de segmento conocidas, incluidas tablas Huffman personalizadas e imágenes de refinamiento
Corregido
- La entrada de acceso aleatorio valida el orden de las cabeceras, la cabecera de fin de archivo obligatoria y las longitudes totales de los datos antes de decodificar, y rechaza los datos truncados o sobrantes sin conservar un mapa de bits antiguo
Version 3.539.22
Añadido
- La decodificación JBIG2 nativa admite tablas Huffman personalizadas para diccionarios de símbolos y regiones de texto, con errores explícitos para tablas malformadas y longitudes de prefijo no compatibles
Corregido
- La decodificación de refinamiento Huffman consume el tamaño de mapa de bits declarado y preserva los píxeles de símbolo de bytes parciales, evitando texto corrupto en imágenes JBIG2 afectadas
Version 3.539.21
Corregido
- La decodificación Flate y LZW respeta la etiqueta de algoritmo PNG por fila para los predictores 10 a 14 en lugar de decodificar cada fila con el algoritmo indicado en el diccionario. Los flujos de referencias cruzadas legítimos comprimidos con Predictor 12 vuelven a cargarse, las filas de imagen ya no se decodifican fuera de lugar, y las filas pueden cambiar de algoritmo dentro de una misma imagen
Version 3.539.20
Corregido
- La primera edición de la información del documento o del identificador estándar captura el XMP original antes de inicializar el objeto editor, de modo que el autor, el identificador del documento y las propiedades personalizadas existentes ya no se sobrescriben con metadatos predeterminados; los cambios de información del documento también llegan al XMP bajo Free Pascal en Windows, y el XML sin envoltorio xpacket se guarda sin cambios
Version 3.539.19
Corregido
- Guardar un objeto decimal sin modificar conserva la precisión con la que se analizó en lugar de redondearlo a la precisión de salida predeterminada, de modo que los parámetros de color calibrados como el gamma y la matriz CalRGB ya no desplazan los colores de la página en un guardado sencillo; los números recién creados o editados siguen usando la precisión configurada
Version 3.539.18
Corregido
- Actualizar la información del documento reemplaza solo el valor del campo objetivo: cuando la fecha de creación y la de modificación referencian la misma cadena indirecta, refrescar la fecha de modificación ya no reescribe la fecha de creación
Version 3.539.17
Cambiado
- La detección de versión y la precomprobación al guardar evitan copias repetidas de cadenas gestionadas mientras se recogen las reglas de características, reduciendo la sobrecarga del escaneo en documentos grandes; la detección de características, los requisitos de versión y el primer diagnóstico de característica incompatible se comportan exactamente igual que antes
Version 3.539.16
Corregido
SaveQDFToFileyConvertFileToQDFya no escriben flujos de contenido Flate comprimidos ordinarios como flujos vacíos bajo Free Pascal y Lazarus; la descompresión desde una posición inicial explícita aplica el desplazamiento correcto basado en uno y la longitud completa de la entrada
Version 3.539.15
Corregido
- El decodificador JBIG2 lee de forma segura los segmentos de perfil locales y globales y obtiene el primer mapa de bits a través del número de página estándar 1
- La decodificación de mapas de bits MMR realinea su posición de lectura al límite de segmento declarado tras el último píxel, de modo que un EOFB final o el relleno ya no se confunden con la cabecera del siguiente segmento
- Las tablas Huffman personalizadas, la organización de acceso aleatorio y las longitudes de segmento desconocidas o excesivas fallan explícitamente; los perfiles truncados y las referencias de segmento ilegales detienen la decodificación,
TPLJBIG2Decoder.LastErrorinforma del motivo, y un fallo limpia el mapa de bits obsoleto RepairQDFFilepublica mediante un archivo temporal creado de forma exclusiva en el directorio de destino y solo reemplaza el destino después de escribir, volcar y cerrar el archivo temporal; la reparación in situ y la salida de sobrescritura conservan el archivo antiguo cuando falla escribir, volcar o reemplazar, e informan del resultado 0 con el código de error 305- La publicación conserva el DACL existente del destino antes de escribir el archivo temporal y falla explícitamente cuando no se pueden conservar los permisos o el destino está cifrado con EFS; una entrada bloqueada en exclusiva o ilegible informa del código de error 401 en lugar de lanzar la excepción de lectura, y la publicación de archivos admite rutas Windows Unicode y de longitud extendida
Version 3.539.13
Corregido
- Reparar un archivo QDF ya no descarta el contenido de flujos cuyo cuerpo contiene marcadores
endstreamoendobjde línea completa; la reparación elige el último par de marcadores de fin completo antes de la cola conocida del objeto - Los marcadores de cola específicos del objeto que se repiten dentro de un flujo hacen fallar la reparación antes de vaciar el flujo objetivo, conservando los bytes, la longitud y la posición originales
RepairQDFFilecompleta toda la reparación en memoria y solo abre el objetivo para escritura tras el éxito, de modo que una entrada rechazada ya no puede truncar un archivo abierto confmCreate- Las cadenas de especificación de archivo mantienen el orden documentado
/UFprimero,/Fcomo alternativa, y no dan prioridad de nombre a las claves/Pathdesconocidas
Version 3.539.10
Corregido
- La decodificación LZW amplía su ancho de código según el umbral del propio decodificador en lugar de compartir el del codificador, de modo que los flujos con todos los anchos de código y reinicios repetidos del diccionario se decodifican correctamente, verificado contra Pillow, libtiff y PDFium
- El análisis de firmas CMS mantiene los límites del padre a través de ContentInfo, los envoltorios EXPLICIT, SignedData, los conjuntos y los campos de identidad, de modo que los datos fuera de rango ya no se usan para contar certificados ni para comparar identidades, mientras que el relleno válido tras el objeto externo sigue aceptándose
- Actualizar las etiquetas de página de un documento cuyos PageLabels usan un árbol numérico
/Kidsconvierte las entradas existentes en nodos hoja de la raíz en lugar de añadir una segunda entrada/Numsmutuamente excluyente que los lectores ignorarían - El ejemplo Lazarus MergePDF lee sus entradas del segundo argumento de la línea de comandos, trata una única entrada explícita como error de parámetro y ya no muestra un aviso de éxito antes de que falle la generación
Version 3.539.6
Corregido
- Los escaneos de búfer se detienen ante un retorno cero de
TStream.Readen lugar de ante una lectura corta, y los flujos que devuelven unos bytes cada vez ya no se saltan el final de los datos escaneados - La codificación OID fusiona los dos primeros arcos en un solo subidentificador base-128, de modo que
2.999.3se codifica como06 03 88 37 03en lugar de convertirse silenciosamente en1.15.3 - Dibujar una vista previa en un flujo de imagen reutilizado limpia primero el contenido antiguo, de modo que un renderizado más pequeño ya no conserva el final de la imagen anterior
CopyPageRangeslibera sus instancias de documento en un bloquefinally, cubriendo el fallo de carga, las excepciones y la finalización normal
Version 3.539.3
Corregido
- El código de error 526 ya no significa dos cosas distintas.
PDFLIB_ERROR_TEXT_LOCATION_INVALID,PDFLIB_ERROR_TEXT_LOCATION_STALEyPDFLIB_ERROR_TEXT_LOCATION_READ_ONLYpasan a los códigos 535, 536 y 537, que estaban sin asignar, de modo que el código llamador que ramifica según 526 solo ve el fallo de exportación JSON para el que estaba documentado; los códigos 527 y 528 ya no se usan PDFlibErrorMessagedescribe los códigos 101 a 104 según lo que realmente los genera. Los cuatro códigos pertenecen a los parámetros de cifrado, no a los errores de análisis que afirmaba la tabla de mensajes, por lo que un fallo de fortaleza de cifrado ya no informa de "Estructura de PDF no válida"PDFlibErrorMessagedevuelve un mensaje real para cada código que genera la biblioteca. Los fallos de apertura por rango de bytes y por HTTP, la apertura de archivos de red, el tamaño en bruto de la clave de cifrado, la exportación JSON, los rechazos de identificadores de marked-content y clip-path, los códigos de ubicación de texto renumerados, los códigos de conformidad de fuentes incrustables y de PDF/VCR y PDF/E y los formularios de campos duplicados y de form-script recurían al texto genérico "<segment> error (NNN)"- La página de referencia de
LastErrorCodeenumera el conjunto completo de códigos, incluido el código 705 de campos duplicados que faltaba antes, y ya no muestra las entradas 527 y 528, que se han retirado
Version 3.539.2
Corregido
- Un TIFF cuyo directorio declara más valores de los que contiene el archivo se rechaza por completo. Los valores se descartaban pero se conservaba el recuento, de modo que los lectores posteriores tomaban el primer elemento de un array vacío
- Un PNG cuya cabecera tiene un tipo de color o una profundidad de bits fuera del formato se rechaza en lugar de decodificarse sin canales de color, lo que enviaba los filtros de fila a un búfer vacío
- Un fragmento de resolución PNG más corto que sus nueve bytes definidos ya no lee más allá de los datos recibidos
- Las imágenes CCITT Group 3 y Group 4 bidimensionales se decodifican en Free Pascal y Lazarus; la búsqueda de la línea de referencia devolvía un array que nunca se creaba y ese compilador lo deja vacío
Version 3.539.1
Corregido
- La caché de disco del visor descarta ahora los mapas de bits renderizados en cada actualización de la biblioteca. El marcador de versión que comparaba se mantenía por separado de la versión de la biblioteca y se había quedado atrás, por lo que una caché de una compilación antigua podía reutilizarse tras actualizar
- Las compilaciones de Free Pascal y Lazarus vuelven a leer correctamente mapas de bits de 16 bits
BI_BITFIELDS: las máscaras de canal se tomaban del desplazamiento equivocado cuando el archivo usaba una cabecera de información ampliada, por lo que los colores aparecían mezclados - Las filas de mapa de bits ya no se leen mal en compilaciones sin respaldo de dispositivo: las filas de 1 y 4 bits se dimensionaban con división entera, perdían los últimos píxeles de cada fila y al guardarlas el bloque de píxeles quedaba desplazado un byte
- Capturar un dibujo en un metarchivo ya no produce una imagen vacía cuando su tamaño no se conoce de antemano; el fotograma registrado se toma ahora del propio dibujo, igual que en VCL
- Leer un mapa de bits cuyo tamaño de paleta declarado supera su profundidad de color se rechaza en lugar de aceptarse sin comprobación
- Las consultas de estado de trabajos de impresión liberan el identificador de spooler que abren, de modo que consultar un trabajo ya no pierde un identificador por llamada
Docs\index.htmlvuelve a ser la puerta de entrada de idiomas. Una sincronización de documentación la había sustituido por una copia de la navegación de referencia en chino simplificado cuyos enlaces apuntaban a un directorio inexistente
Cambiado
- El paquete Lazarus
PDFlibPasLaz.lpkincluye ahora las unidades opcionales del codificador LZW, Brainpool, Ed448, ML-DSA, la impresora PDF y el codificador JBIG2 externo junto con las declaraciones de metarchivo, igualando el conjunto de unidades de la compilación por línea de comandos build-Win64-Demo-Laz.cmddelega enbuild-Lazarus-Demo.cmd win64, de modo que ambos puntos de entrada colocan los ejecutables de demostración enbin\x86_64-win64y no en el directorio de código fuente
Version 3.539.0
Agregado
- Free Pascal y Lazarus ahora admiten compilaciones de Windows de 32 bits junto con Win64, incluida la creación, carga y cifrado de PDF y las imágenes JPEG 2000
- Los scripts de compilación de la biblioteca Lazarus, la versión de prueba, las demos y las pruebas de consola aceptan
win32owin64y admiten compiladores cruzados alojados en Win32, con directorios de salida separados para cada arquitectura
Cambiado
- En Win32 se usa el codificador JBIG2 integrado en Pascal cuando se solicita uno externo; el codificador externo enlazado estáticamente sigue disponible en Win64
- Las compilaciones de FPC incluyen compresión mediante la implementación de zlib en Pascal incluida y ya no cargan
zlib1.dlldesde la ruta de búsqueda del sistema
Version 3.538.0
Agregado
- Las compilaciones de Free Pascal y Lazarus ya pueden usar el codificador JBIG2 externo: al añadir la nueva unidad PDFlibJBIG2EncDLL a un proyecto y colocar
pdflibjbig2enc.dlljunto al ejecutable,AddImageJBIG2FromStreamExy los demás puntos de entrada JBIG2 atienden la solicitud de codificador externo en ese entorno exactamente igual que en Delphi. Sin la DLL la solicitud sigue recurriendo al codificador Pascal integrado, por lo que los proyectos que no la distribuyen no se ven afectados - Nueva
DLL\JBig2Enc\Win64\pdflibjbig2enc.dllredistribuible y el script de compilación que la genera
Version 3.537.0
Agregado
- Las compilaciones de Free Pascal y Lazarus convierten metarchivos en contenido de página vectorial.
ImportEMFFromFile,ImportEMFFromStream, sus variantes Ex,LoadFromCanvasDCyNewPageFromCanvasDCproducen ahora operadores de dibujo PDF reales con fuentes incrustadas, igual que en Delphi, en lugar de informar de que el modo no está disponible. El texto sigue siendo seleccionable y se puede buscar, y la salida es una fracción del tamaño de la importación rasterizada
Version 3.536.7
Corregido
- La enumeración de impresoras devuelve nombres reales en Free Pascal y Lazarus. Cada impresora se devolvía solo con su primer carácter, lo que también hacía que la selección de impresora, los perfiles de impresora personalizados y la propia impresión rechazaran cualquier impresora instalada
GetPrinterNamesya no se bloquea en compilaciones sin VCL: ahora pregunta directamente al spooler, como ya hacíaGetLatestPrinterNames
Version 3.536.6
Corregido
- La conversión de un metarchivo en contenido de página vectorial ahora informa de un error en las compilaciones que no pueden realizarla, en lugar de devolver una imagen cuyo contenido está vacío.
ImportEMFFromFile,ImportEMFFromStream, sus variantes Ex yLoadFromCanvasDCdevolvían todos un identificador de imagen de apariencia válida, de modo que la página salía en blanco sin nada que indicara el motivo. La importación del mismo metarchivo como imagen no se ve afectada y transporta la imagen idéntica - La captura de canvas y la importación de metarchivos ya no se bloquean cuando la conversión no puede ejecutarse: ambos puntos de entrada usaban la imagen resultante sin comprobar que existe
Version 3.536.5
Corregido
- La importación rasterizada de metarchivos funciona en Free Pascal y Lazarus.
ImportEMFFromFile,ImportEMFFromStreamy sus variantes Ex no devolvían nada cuando se les pedía rasterizar, yLoadFromCanvasDCse bloqueaba en el mismo modo, porque el flujo de dibujo entregado al cargador de imágenes no era de una forma que pudiera leer allí. Las rutas vectoriales no se veían afectadas
Version 3.536.4
Corregido
- La captura de metarchivos en Free Pascal y Lazarus vuelve a informar de su tamaño físico, de modo que
LoadFromCanvasDCy los demás puntos de entrada de captura de canvas importan el dibujo en lugar de fallar con un marco de tamaño cero - El objeto de fuente sin VCL ahora informa de un
PixelsPerInchreal y se copia enAssign. Ambas cosas eran inoperantes, de modo que el código que tomaba su resolución de renderizado de una fuente pedía un canvas de tamaño cero, y entregar una fuente preparada a un canvas conservaba en silencio la anterior - Los metarchivos creados en Free Pascal usan por defecto el formato mejorado, igual que en las demás plataformas; antes se guardaban en la disposición heredada de 16 bits a menos que el llamador estableciera él mismo la marca
Version 3.536.3
Corregido
- Las compilaciones de Free Pascal y Lazarus ya importan imágenes BMP de 4, 8 y 16 bits.
AddImageFromFileyAddImageFromStreamno devolvían ninguna imagen con esas profundidades, incluida la forma de 16 bitsBI_BITFIELDSque escriben los programas de dibujo, porque el lector de mapas de bits sin VCL solo entendía entradas de 1, 24 y 32 bits
Version 3.536.2
Corregido
- La exportación clásica de metarchivo GDI funciona en Free Pascal y Lazarus:
RenderPageToMetafileFileyRenderPageToMetafileStreamprovocaban una violación de acceso conmfEMFymfWMF, porque el canvas de metarchivo sin VCL era un sustituto vacío sin pincel, lápiz ni fuente. Ambos formatos ahora se registran en un metarchivo mejorado real y se escriben,mfWMFcon la cabecera placeable que necesita un archivo .wmf
Version 3.536.1
Corregido
- Las compilaciones de Free Pascal y Lazarus ya escriben archivos BMP válidos de 1, 4 y 8 bits: el sustituto de mapa de bits que reemplaza al de la VCL no emitía ninguna tabla de colores, de modo que los mapas de bits indexados por paleta eran rechazados por todos los lectores y se dibujaban contra una paleta completamente negra
- La importación de imágenes de dos niveles vuelve a funcionar en Free Pascal:
AddImageCCITTFromFile,AddImageCCITTFromStreamy los equivalentes JBIG2 ya pueden leer los mapas de bits de 1 bit que se les entregan, en lugar de fallar porque solo se decodificaban entradas BMP de 24 y 32 bits
Version 3.536.0
Agregado
- Las compilaciones de Free Pascal y Lazarus ejecutan ahora las rutas de lotes paralelos en lugar de recaer en bucles serie:
RenderPagesToFilesParallel, los lotes de optimización tras la optimización de documentos y el renderizado paralelo por mosaicos se reparten todos entre los núcleos de CPU, igual que el comportamiento de Delphi
Cambiado
- El renderizado paralelo de páginas renderiza ahora su primera página en el hilo de llamada antes de repartirse, de modo que el motor de renderizado se inicializa una sola vez en lugar de ser inicializado simultáneamente por cada worker
Version 3.535.0
Agregado
- Las compilaciones de Free Pascal y Lazarus ya incluyen el codificador JPEG 2000:
EncodeImageToJPXStream,EncodeImageToJPXFile,AddImageJPXFromFile,AddImageJPXFromStreamyAddImageJPXFromStringproducen allí imágenes JPXDecode exactamente igual que en Delphi, tanto en modo con pérdida como en el sin pérdida - El mapa de bits sin VCL usado por las compilaciones de Free Pascal, macOS y FireMonkey carga ahora flujos BMP de 24 y 32 bits sin comprimir e informa de un formato alfa
Corregido
- La decodificación de imágenes a través del backend de imágenes de Windows ya no se bloquea en las compilaciones de Free Pascal; los flujos ahora se entregan al backend de una forma que este acepta
- Asignar un mapa de bits a otro en compilaciones sin VCL copia los píxeles en lugar de dejar vacío el mapa de bits de destino, lo que producía en silencio una salida en blanco en las rutas de conversión de imágenes
Version 3.534.1
Corregido
- El decodificador TIFF integrado ahora rechaza los diseños BigTIFF y en mosaico no compatibles con diagnósticos explícitos y acota las dimensiones decodificadas y los tamaños de franja antes de la asignación
Version 3.534.0
Cambiado
CheckFileCompliancey la verificación previa de PDF/UA ahora validan anchos de fuentes simples y CID incrustadas, declaraciones Type 1/CharSety CID/CIDSetcompletas, Form XObjects con texto invocados fuera del contenido marcado y operandos de texto que se resuelven en.notdef
Version 3.533.0
Añadido
TPDFlibPKCS11Clientpuede descubrir claves ML-DSA sin certificado seleccionadas explícitamente, informar de su conjunto de parámetros y firmar mensajes originales mediante el mecanismoCKM_ML_DSAde PKCS #11 3.2
Version 3.532.0
Cambiado
- Los flujos grandes que usan la cadena de filtros común
/ASCII85Decodey/FlateDecodecodifican y decodifican ahora a través de una pipeline de memoria acotada sin materializar la representación intermedia
Version 3.531.0
Añadido
AddWebCaptureCommand,GetWebCaptureCommandCount,GetWebCaptureCommandyClearWebCaptureCommandscrean, enumeran y eliminan metadatos de comandos de Web Capture/SpiderInfoestándar del catálogo sin realizar recuperación de red
Version 3.530.0
Añadido
BPLoadCurve,BPKeyGen,BPSignFixedKyBPVerifyimplementan ECDSA sobre las tres curvas de cuerpo primo RFC 5639 brainpoolP256r1, brainpoolP384r1 y brainpoolP512r1 en Pascal puro: una aritmética en radix 2^16 de 33 limbs compartida por todos los anchos de curva, reducción modular serie de bits, duplicación y suma jacobianas con protecciones explícitas contra aliasing, inversión de Fermat y un nonce proporcionado por el llamador para firmar; los vectores de respuesta conocida generados con una implementación independiente y verificados cruzadamente en ambos sentidos pasan en cada curva, junto con las regresiones de recorrido de ida y vuelta y de rechazo de manipulaciones
Version 3.529.0
Añadido
Ed448PublicKeyFromSeed,Ed448SignyEd448Verifyimplementan PureEdDSA de RFC 8032 sobre edwards448 en Pascal puro: aritmética de cuerpo Goldilocks de 16 limbs en radix 2^28 con el plegado de Solinas 2^448 = 2^224 + 1, suma de grupo en forma de producto fuertemente unificada para curvas con a = +1, reducción modular de todo el resumen módulo el orden del grupo para los escalares SHAKE256 de 114 bytes y verificación con cofactor 4; ambos vectores de respuesta conocida de la sección 7.4 de RFC 8032 pasan byte a byte, junto con las regresiones de recorrido de ida y vuelta, de rechazo de manipulaciones y de validación de longitud
Version 3.528.0
Añadido
MLDSA65KeyGen,MLDSA65SignyMLDSA65Verifyimplementan ML-DSA-65 de FIPS 204 con claves públicas de 1952 bytes, claves secretas de 4032 bytes y firmas de 3309 bytesMLDSA87KeyGen,MLDSA87SignyMLDSA87Verifyimplementan ML-DSA-87 de FIPS 204 con claves públicas de 2592 bytes, claves secretas de 4896 bytes y firmas de 4627 bytes
Version 3.527.0
Añadido
PDFlibMLDSAproporciona una implementación en Pascal puro de ML-DSA-44 de FIPS 204 con generación de claves por semilla determinista, firma protegida (hedged) o determinista, muestreo de rechazo acotado y verificación de firmasMLDSA44KeyGen,MLDSA44SignyMLDSA44Verifyusan los tamaños estándar de clave pública de 1312 bytes, clave secreta de 2560 bytes y firma de 2420 bytes, admiten contextos de hasta 255 bytes y se verifican contra el vector de respuesta conocida oficial
Version 3.526.0
Añadido
- El contexto XOF SHAKE en streaming (
PLShakeXOFInit/PLShakeXOFAbsorb/PLShakeXOFFinalize/PLShakeXOFSqueeze) extrae recuentos de bytes arbitrarios a lo largo de permutaciones Keccak tanto para SHAKE128 (tasa 168) como para SHAKE256 (tasa 136), con un envoltorio de una sola llamadaPLShakeXOF; las salidas de 200 bytes entre bloques se verifican contra los resúmenes de referencia de ambas variantes
Version 3.525.0
Cambiado
SHAKE256ByteArrayySHAKE256StreamRangeaceptan ahora salidas de hasta la tasa de esponja de 136 bytes (antes 64), lo que permite resúmenes de una sola extracción en la longitud de hash Ed448 de 114 bytes; las nuevas pruebas de respuesta conocida cubren salidas de 114 bytes de los mensajes vacío yabc
Version 3.524.0
Añadido
DownsampleImagesExclasifica cada imagen como bitonal, de escala de grises o en color a partir de su espacio de color declarado y sus bits por componente, y aplica un presupuesto de DPI y una calidad JPEG por clase en una sola pasada; los escaneos bitonales se recodifican sin pérdidas y un indicador de solo-si-es-más-pequeño conserva los bytes originales cuando la recodificación crece
Version 3.523.0
Añadido
CopyForeignObjectcopia en profundidad un objeto indirecto y su cierre completo de referencias desde otro documento cargado al documento seleccionado, reasignando los números de objeto para que las referencias compartidas sigan compartidas en la copia
Version 3.522.0
Añadido
SetPagePieceInfo,GetPagePieceInfoyClearPagePieceInfogestionan diccionarios de datos privados de nivel de página (ISO 32000-2 14.5) indexados por nombre de aplicaciónAddNamedPageyGetNamedPageregistran y resuelven páginas por nombre mediante el árbol de nombres /Names /Pages del catálogo
Version 3.521.0
Añadido
GetImageListItemNativeDataToString,GetImageListItemNativeFormatySaveImageListItemNativeDataToFileextraen el flujo de códec en bruto todavía codificado de cualquier imagen listada (JPEG, JPEG 2000, JBIG2, CCITT, Flate o en bruto) sin decodificar, preservando los bytes originales para los flujos de trabajo de paso directo
Version 3.520.0
Añadido
AnalyzeModificationsclasifica cada cambio desde una revisión guardada contra la lista blanca de actualizaciones LTA, cumplimentación de formularios y anotaciones, y devuelve el nivel global de modificaciónGetModificationLevel,GetModificationFindingCount,GetModificationFindingLevel,GetModificationFindingObjNumyGetModificationFindingDetailexponen los hallazgos clasificados del análisis más reciente
Version 3.519.0
Añadido
CompareWithrealiza una comparación estructural entre el documento seleccionado y una revisión guardada, clasificando cada objeto indirecto como añadido, eliminado o cambiado mediante huellas de contenido que ignoran los desplazamientos de números de objetoGetCompareFindingCount,GetCompareFindingKind,GetCompareFindingObjNumyGetCompareFindingDetailleen los hallazgos de la comparación más reciente, incluidas las diferencias de recuento de páginas
Version 3.518.0
Añadido
SHAKE256ByteArrayySHAKE256StreamRangeproporcionan el resumen de salida extensible SHAKE256 (ISO/TS 32001, RFC 8702) con lecturas de dos segmentos por intervalo de bytes y salidas de 1..64 bytes, verificadas contra las pruebas de respuesta conocida de NIST FIPS 202
Cambiado
- El núcleo Keccak incorpora ahora un byte separador de dominio, de modo que SHA-3 y SHAKE comparten una única implementación de la permutación; dentro del perfil de firma CMS, SHAKE256 sigue reservado como resumen interno de Ed448 y está deliberadamente ausente del selector de resúmenes
Version 3.517.0
Añadido
AddPageAssociatedFileFromFileyAddPageAssociatedFileFromStringvinculan especificaciones de archivo incrustado a la matriz /AF de una sola página (ISO 32000-2 14.13) en lugar del catálogo del documentoGetPageAssociatedFileCount,GetPageAssociatedFileEmbeddedIndexyClearPageAssociatedFilesenumeran y eliminan archivos asociados de nivel de página tras recorridos de guardado y cargaSetOptionalContentConfigInfoescribe metadatos de presentación (nombre de configuración, creador y modo de lista del panel de capas) sobre la configuración de contenido opcional predeterminada
Version 3.516.0
Añadido
ApplyContentFilterChainyTPDFContentFilterChainejecutan filtros de contenido a nivel de instrucción sobre cada capa de contenido de una página, con cadenas ordenadas, control de parada anticipada y paso directo de datos de usuarioExportDocumentJSONyGetDocumentJSONserializan el grafo de objetos completo del documento, incluidos los diccionarios de flujos con cargas útiles base64 y el trailer, en una estructura JSON al estilo qPDFSetPDFDeclarations,GetPDFDeclarationsURI,GetPDFDeclarationsRole,GetPDFDeclarationsVersion,GetPDFDeclarationsCount,HasPDFDeclarationyClearPDFDeclarationsescriben, leen y eliminan declaraciones de conformidad PDF Declarations legibles por máquinaAuditPageTree,AuditXRefStructure,AuditObjectReachability,AuditStreamLengths,AuditFontEmbeddingyAuditColorSpacesejecutan seis pasadas de diagnóstico estructural independientes con hallazgos graduados por severidadGetAuditFindingCount,GetAuditFindingSeverity,GetAuditFindingItemyGetAuditFindingDetailleen los hallazgos de la llamada de auditoría más reciente
Version 3.515.0
Añadido
ExecuteFormFieldScriptEventyTPDFlibFormScriptEventejecutan eventos de campo Keystroke, Format, Validate y Calculate acotados, con propiedades Event, Field y Document controladasSetFormScriptLimits,GetFormScriptLimitsJSONyGetFormScriptDiagnosticsconfiguran e informan de los presupuestos de código fuente, operación, anidamiento, cadena y acceso a propiedades
Cambiado
- El runtime seguro de scripts de formulario expone ahora metadatos de solo lectura de los campos de origen y destino, la búsqueda de campos del documento y el estado de selección de las pulsaciones, conservando la compatibilidad de solo valor
Seguridad
- La ejecución de scripts rechaza ahora los eventos de valor de botón, la mutación de objetos y las selecciones fuera de rango, aplica límites de recursos independientes a la ejecución y al análisis de dependencias, e informa de ubicaciones acotadas de fallo del analizador
Version 3.514.0
Añadido
SetPDFEModecrea documentos de ingeniería PDF/E-1 con sintaxis PDF 1.6, identificación Info y XMP sincronizadas, metadatos de ciclo de vida y un output intent incrustado con gestión de colorGetPDFEDiagnosticsy la prueba de conformidad 7 proporcionan validación PDF/E-1 al guardar, de archivo directo y de pipeline compartida, con presupuestos acotados de objetos, contenido y recursión
Cambiado
- Los guardados PDF/E-1 aplican ahora la identificación, los metadatos de ciclo de vida, el cifrado permitido, la coherencia del output intent, las exclusiones de XFA y las barreras de acciones no seguras, mientras que el preflight audita además los espacios de color de dispositivo, los operadores de contenido, las fuentes, las anotaciones, los formularios, el contenido opcional, las referencias a archivos externos, los estados gráficos y las restricciones de los flujos 3D
Version 3.513.0
Añadido
SetPDFVCRModey las API de ámbitos de plantillas y marcadores de posición crean plantillas de reemplazo PassThrough PDF/VCR-1 sobre una base PDF/X-4GetPDFVCRDiagnostics,GetPDFVCRManifesty la prueba de conformidad 6 proporcionan validación al guardar, de archivo directo y de pipeline compartida, además de extracción validada de campos y marcadores de posición JSON
Cambiado
- Los guardados PDF/VCR aplican ahora los metadatos de identificación, una única raíz de plantilla directa, los campos declarados únicos, la selección de páginas válida, los marcadores de posición de reemplazo hoja y las vinculaciones exactas de página y MCID a través del árbol de estructura completo
Version 3.512.0
Añadido
SetPDFRModey las API de páginas raster de PDF/R crean documentos de intercambio raster restringido a partir de datos en bruto, CCITT Group 4 o JPEG, sin transcodificar las entradas comprimidas admitidasGetPDFRDiagnosticsy la prueba de conformidad 5 proporcionan validación PDF/R en memoria, de archivo directo y de pipeline compartida
Cambiado
- Los guardados PDF/R aplican ahora el marcador, la versión y el perfil de cifrado requeridos, los objetos de generación cero, los diccionarios y filtros restringidos, un único flujo de contenido, los operadores exclusivamente raster, los recursos de franjas ordenados, la coherencia de color y resolución y la cobertura completa de la página
Version 3.511.0
Añadido
TPDFlibFormTextDirection,SetTextDirection,GetVisualCaretOrderyMoveVisualCaretañaden dirección de párrafo automática o explícita y navegación física del punto de inserción segura a nivel de grafemas para las ediciones de formulario de dirección mixtaResolvedTextDirectionyVisualCaretPositionexponen la dirección de párrafo efectiva y distinguen las posiciones de punto de inserción divididas en los límites bidireccionales
Cambiado
- Los tramos de texto conformado aplican ahora reordenación visual por nivel de incrustación para el contenido mixto de izquierda a derecha y de derecha a izquierda, mientras que los valores de campo permanecen en orden lógico UTF-16
Version 3.510.0
Añadido
MinimumSlotHeightaplaza la composición de componentes dinámicos antes de la clonación o la captura cuando la región actual es demasiado cortaMinimumFollowingHeightmantiene un fragmento final con una primera región definida por el llamador para el componente siguiente, sin restringir los fragmentos intermediosTPDFlibDynamicRetryReason,LastRetryReasonyLastRequiredSlotHeightexponen por qué se aplazó la colocación y la altura requerida conocida
Cambiado
- Los reintentos en el espacio de flujo preservan ahora los fragmentos confirmados, el estado de los componentes, los índices de composición y el contenido de la página, mientras descartan solo la prueba aislada
Version 3.509.0
Añadido
TPDFlibDynamicPaginationPolicyañade modos de división, de mantenimiento conjunto en una sola pasada y de colocación completa estricta, con un resultado de reintento diferenciado y un estado pendiente observable
Cambiado
- Las pruebas de componentes dinámicos aplazadas descartan ahora de forma atómica el contenido capturado y el estado mutable, mientras que la colocación estricta acepta una reducción de escala proporcional pero nunca una salida parcial o recortada
Version 3.508.0
Añadido
TPDFlibFormSession.DispatchInputEventacepta eventos tipados e independientes de la plataforma de puntero, rueda, tecla con nombre y texto compuesto, y devuelve el estado de foco, hover, pulsación, selección y cambio de valor
Cambiado
- El despacho de entrada de formularios aplica ahora las transiciones ordenadas de puntero de widget
/E,/X,/Dy/U, la cancelación de la captura, la edición segura a nivel de grafemas, el movimiento del punto de inserción consciente de las líneas, los atajos estándar de selección e historial, la activación de botones y la navegación con rueda de opciones
Corregido
- El historial de Retroceso y Suprimir restaura ahora el punto de inserción previo a la tecla visible para el usuario, en lugar de la selección temporal de grafemas usada internamente para el reemplazo atómico
Version 3.507.0
Añadido
TPDFlibFormSessionproporciona ahora deshacer y rehacer acotados a nivel de campo, con consultas de disponibilidad, recuentos de pasos retenidos, capacidad configurable y borrado explícito del historial
Cambiado
- El historial de edición de formularios almacena deltas de texto compactos, restaura valores y selecciones dirigidas sin reenviar acciones ni retrollamadas, descarta las ramas de rehacer tras nuevas ediciones y se vacía en los límites del ciclo de vida de la edición
Version 3.506.0
Añadido
TPDFlibFormSessionproporciona ahora reemplazo de selección sujeto a veto, corte y operaciones de pegado proporcionadas por el llamador, con retrollamadas mutables de edición de texto del host y aplicación de/MaxLensegura a nivel de grafemas
Cambiado
- Las confirmaciones de la sesión de formulario ejecutan ahora las acciones de validación y formato disponibles antes de modificar el campo, conservan atómicamente las ediciones rechazadas y mantienen el valor en bruto validado separado de la apariencia formateada del widget
Version 3.505.0
Añadido
- Se han añadido rangos dirigidos de selección de texto en campos de formulario, en unidades de código UTF-16, puntos de código Unicode y clústeres de grafemas extendidos, con informe de ancla y punto de inserción y conversión de límites en caché
Version 3.504.0
Añadido
- Se ha añadido la colocación de componentes dinámicos consciente del desbordamiento, con políticas de rechazo, recorte y reducción de escala proporcional, alineación independiente e informe de la página final, la geometría y la transformación
Version 3.503.0
Añadido
TPDFlibDynamicComponentSessioncompone de forma diferida un fragmento de página con estado cada vez, con contexto de página, informe del tamaño usado, estado de finalización, restablecimiento e instantáneas del estado confirmadoReleaseCapturedPageinvalida un handle de captura de Form XObject después de su colocación final, conservando las referencias de recursos de página y las invocaciones existentes
Cambiado
- Los intentos de componentes dinámicos dibujan ahora sobre estado clonado dentro de un Form XObject aislado y confirman solo tras una colocación validada; las retrollamadas rechazadas, la geometría no válida y las excepciones restauran la página seleccionada y dejan el contenido de destino y el estado del componente sin cambios
Version 3.502.0
Añadido
TPDFlibFormSessionproporciona ahora rectángulos de widget con CropBox visual rotado, pruebas de impacto del widget superior, foco basado en puntos y navegación del foco de teclado hacia adelante o hacia atrás
Cambiado
- Las secuencias de tabulación aplican el orden de widget de página
/Tabspor fila, columna, estructura, matriz de anotaciones y PDF 2.0, con la dirección de ViewerPreferences, una ordenación estable entre páginas y un recorrido acotado del árbol de estructura SetTabOrderModevalida ahora los cinco modos estándar y selecciona PDF 2.0 automáticamente paraAyW
Version 3.501.0
Añadido
ApplyRepeatedPageFragmentcoloca un Form XObject capturado a lo largo de un rango de páginas como artefactos tipados de Pagination, Layout, Page o Background de PDF 2.0, compartiendo el flujo de contenido y los recursos entre todas las colocaciones
Corregido
- Los diccionarios de propiedades de artefacto usan ahora el operador de contenido marcado
BDCrequerido en las rutas públicas y de maquetación de tablas, y los tipos y subtipos de artefacto de PDF 2.0 seleccionan la versión de característica de salida requerida
Version 3.500.0
Añadido
SetTextFlowPaginationLinescontrola de forma independiente las líneas huérfanas mínimas retenidas en la parte inferior de un cuadro de texto y las líneas viudas conservadas para el siguiente cuadro o columna
Cambiado
- La paginación del flujo de texto mueve ahora hacia adelante solo las líneas finales requeridas con una anticipación acotada, mientras que una división imposible deja el flujo sin cambios para su colocación en una región mayor
Version 3.499.0
Añadido
TPDFlibFormSessionproporciona foco AcroForm, edición de texto y de opciones, selección UTF-16 con base cero y estado de confirmación y cancelación independientes de la plataforma, con retrollamadas de host tipadas para las acciones de foco y pérdida de foco del widget
Cambiado
- Los valores confirmados de la sesión aplican ahora los límites de texto y regeneran solo la apariencia pendiente afectada y el cierre de cálculo antes de informar del cambio de valor
Version 3.498.0
Añadido
GetDirtyFormAppearanceCountyRegenerateDirtyFormAppearancesrastrean las referencias de objetos de widget de AcroForm cambiadas y regeneran solo el cierre de cálculo desduplicado de la sesión actual
Cambiado
RegenerateFormAppearancesrecorre ahora una sola vez los campos jerárquicos desde sus raíces, informa del número real de regeneraciones de widget con éxito y conserva las apariencias fallidas para reintentarlasUpdateAppearanceStreaminforma ahora con precisión de los fallos de generación y mantiene pendientes los widgets no generados conNeedAppearancesactivado
Version 3.497.0
Añadido
SetOutputIntentMixingHintsescribe las solideces de tinta y el orden de impresión físico de PDF 2.0, rechazando valores no válidos, nombres duplicados, orden ausente y colorantes ya representados por datos espectralesSetOutputIntentSpectralDataincrusta flujos acotados de caracterización de tintas directas CxF/X-4, reutiliza datos idénticos en asignaciones repetidas y entre colorantes, y exige exactamente unSpotInkCharacterisationcoincidente;ClearOutputIntentColorantDataelimina ambos diccionarios de metadatos de colorantes
Cambiado
GetEffectivePageOutputIntentJSONinforma ahora de las solideces de mezcla, el orden de impresión, los colorantes espectrales y la validez espectral decodificada para los documentos recién creados y recargados- El preflight PDF/X audita ahora los
MixingHintsySpectralDatadel OutputIntent, incluidos elDotGainprohibido, los rangos de solidez, los tipos de orden de impresión, los conflictos de colorantes, la decodificación de flujos y las coincidencias únicas de tinta directa CxF
Version 3.496.0
Añadido
DAOpenFileWithEncryptionKeyyDAOpenFromStreamWithEncryptionKeyabren documentos cifrados a partir de una clave de cifrado de archivo hexadecimal autorizada, sin derivación de contraseñas, con las exportaciones de archivo DLL correspondientes y un estado de validación explícito
Seguridad
- La entrada de archivos con clave en bruto es siempre de solo lectura sobre el origen, aplica las longitudes exactas de clave específicas de la revisión y los verificadores
/Uo/Permsdisponibles, rechaza las discrepancias incluso cuando la recuperación por verificador ausente está habilitada y borra el material de clave retenido al cerrar el handle
Version 3.495.0
Añadido
SetXRefLoadPolicyyGetXRefLoadPolicyseleccionan e informan de la carga estricta, compatible o de recuperación para la entrada de documento seleccionado y de Direct Access
Cambiado
- La carga estricta exige ahora cabeceras exactas, marcadores finales, desplazamientos declarados, entradas de tabla de ancho fijo, metadatos de flujos de referencias cruzadas y cada sección
/Prevo/XRefStmenlazada - La carga compatible conserva reparaciones controladas de desplazamientos y de estructura sin entrar en la reconstrucción en bruto, mientras que la carga de recuperación puede reconstruir objetos de nivel superior y comprimidos y sintetizar un trailer ausente
- Los diagnósticos de referencias cruzadas informan ahora de la política seleccionada, las decisiones ordenadas del analizador y los indicadores de compatibilidad por sección, incluidas las cadenas laterales híbridas rechazadas y la evidencia de recuperación de Direct Access
Version 3.494.0
Cambiado
- Los guardados deterministas completos sin cifrar y sin semilla explícita derivan ahora ambas entradas
/IDiniciales del trailer de los primeros 16 bytes de un resumen SHA-256 en streaming sobre la cabecera y el cuerpo serializados del documento - El resumen de contenido excluye los identificadores de trailers previos, los datos de referencias cruzadas y los trailers dependientes de desplazamientos, a la vez que normaliza los identificadores de recursos generados y los UUID de instancia XMP, de modo que los cambios de página, recurso, adjunto y metadatos controlan el resultado
- Los nombres de recursos internos y las etiquetas de subconjunto de fuentes incrustadas son estables mientras el modo determinista está habilitado, incluida la salida que empaqueta diccionarios en flujos de objetos comprimidos; los guardados predeterminados conservan identificadores aleatorizados
Version 3.493.0
Añadido
LoadFromMappedFileyDAOpenMappedFileabren PDF locales mediante vistas mapeadas acotadas de solo lectura, con una opción para exigir el mapeo o permitir una alternativa portable de flujo de archivoGetMappedFileInfoyDAGetMappedFileInfoinforman del estado de mapeo activo, los tamaños de archivo y de ventana, la vista actual, el volumen de lectura y la actividad de remapeo
Cambiado
- Los orígenes mapeados retienen una ventana alineada con las asignaciones y la remapean a lo largo de las lecturas grandes diferidas de objetos o flujos, acotando el uso del espacio de direcciones con independencia del tamaño del archivo
- Los orígenes locales mapeados y los respaldados por retrollamadas comparten ahora lecturas absolutas de porciones de objeto independientes del cursor, mientras que las API existentes de carga de archivos conservan su comportamiento anterior
Version 3.492.0
Añadido
GetPageThumbnailDataToStreamyGetPageThumbnailDataToStringexponen las cargas útiles de miniaturas de página codificadas o decodificadas por filtro, mientras queDeletePageThumbnailelimina los metadatos de página sin cambiar la página seleccionada
Cambiado
- Las consultas de presencia y metadatos de miniaturas exigen ahora un flujo de imagen; las entradas malformadas que no son flujos siguen siendo eliminables en lugar de informarse como miniaturas utilizables
- La salida en bruto se copia en trozos acotados y la salida decodificada reutiliza la pipeline de filtros en streaming, preservando las codificaciones de imagen terminales como DCT y JPX para los llamadores que necesitan cargas útiles nativas
Version 3.491.0
Añadido
InsertPageElementClipPath,ReplacePageElementClipPathyDeletePageElementClipPathañaden recorte local a un elemento de página exacto o editan un componente de origen capturado con las reglas de relleno distinto de cero y par-impar
Cambiado
- Los componentes de recorte retienen ahora su capa de origen, el rango de instrucciones, la profundidad de anidamiento y la huella normalizada, de modo que los orígenes editables se distinguen de los límites iniciales, los contornos de texto, los Forms anidados, los trazados malformados y los objetos de trazado entre capas
- El recorte local usa ámbitos de estado gráfico equilibrados, incluida la reconstrucción válida de objetos de texto, mientras que eliminar un recorte de un trazado que también pinta conserva el trazo o el relleno originales
Version 3.490.0
Añadido
SetPageElementMarkedContentTextProperty,SetPageElementMarkedContentPropertySourceyDeletePageElementMarkedContentPropertyeditan texto Unicode, objetos PDF serializados y propiedades existentes sobre un marco exacto de contenido marcado enumerado
Cambiado
Los recursos de propiedades con nombre se editan mediante copy-on-write local a la página, las listas de propiedades en línea se promueven automáticamente cuando un valor indirecto requiere un recurso, y la eliminación de la última propiedad compacta BDC a BMC- Las ediciones de contenido marcado validan la instrucción de origen capturada y la instantánea de propiedades resuelta antes de escribir, y después invalidan todos los handles de elementos de página tras un cambio con éxito
Version 3.489.0
Añadido
GetTextBlockCharContentLocationyDAGetTextBlockCharContentLocationmapean cada posición UTF-16 extraída a su capa de contenido, flujo, instrucción, operando, elemento de la matrizTJy rango de bytes de origen codificadoReplaceTextBlockCharSourceBytesrealiza un reemplazo local protegido por huella de los bytes mapeados codificados por fuente, preservando las cadenas adyacentes y los valores de kerning
Cambiado
- Las ubicaciones generadas, de
/ActualText, de Forms anidados, transcodificadas y entre capas se clasifican explícitamente como de solo lectura, mientras que las expansiones de ligaduras conservan su rango compartido de glifos de origen - La búsqueda de tramos de contenido usa búsqueda binaria y las listas extraídas retienen dos huellas de capa independientes para rechazar las ediciones obsoletas antes de analizar o reescribir el contenido de la página
Version 3.488.0
Añadido
ImportPageAsFormXObjectimporta una página de cualquier documento abierto como un handle de página capturada reutilizable sin cambiar ninguno de los dos árboles de páginas
Cambiado
- La importación de página a Form copia solo el contenido de página decodificado, el cierre independiente de recursos heredados y las entradas de grupo, metadatos e información de pieza compatibles con Form, excluyendo anotaciones, miniaturas y estructura exclusiva de página
- Los cuadros de página seleccionados usan las reglas estándar de alternativa, la rotación heredada por cuadrantes se normaliza en la matriz del Form y las colocaciones repetidas comparten un único flujo de contenido comprimido
Version 3.487.0
Añadido
- Los handles de elementos de página exponen ahora su pila activa de contenido marcado de exterior a interior, las etiquetas, los valores
/MCIDvalidados, los operandos de propiedades originales y cada entrada de los diccionarios resueltos, directos o respaldados por recursos
Cambiado
- El trazado del estado de contenido resuelve los recursos
/Propertiescon nombre una vez por ámbito de recursos y retiene marcos de contenido marcado inmutables sin reanalizar el contenido de la página en consultas repetidas - El anidamiento del contenido marcado se sigue de forma independiente de
q/Qy queda acotado a cada flujo de contenido de página o Form, de modo que las secuencias malformadas sin cerrar no pueden filtrarse a otro flujo
Version 3.486.0
Añadido
- Los handles de elementos de página exponen ahora cada componente de su intersección de recorte efectiva, incluidos los comandos transformados de movimiento, línea, curva cúbica y cierre, las reglas de relleno distinto de cero o par-impar, los límites de los componentes y el diagnóstico de la región combinada
Cambiado
- El trazado del estado de contenido retiene cadenas de recorte inmutables a través de los límites de página, la restauración
q/Qy los límites de Form, compartiendo los componentes sin cambios entre instantáneas - La enumeración de elementos de página recopila los objetivos de mutación de trazados y los estados gráficos en la misma pasada de contenido, evitando la pasada extra previa de la capa de trazados
Version 3.485.0
Añadido
GetTextBlockCharUnicodeFlagsyDAGetTextBlockCharUnicodeFlagsexponen diagnósticos por carácter de mapeo Unicode, alternativa, mapa ausente, código sin mapear, mapa no válido y reemplazo
Cambiado
- La extracción de texto retiene la procedencia del mapeo Unicode junto a cada unidad de código UTF-16 y valida los pares sustitutos antes de aceptar la salida de
ToUnicode - Los mapeos no válidos o parciales usan ahora una alternativa independiente de codificación de fuente y emiten U+FFFD cuando no existe una alternativa con significado
Corregido
- Los mapas Unicode Identity devuelven ahora una única unidad de código mapeada en lugar de tratar el valor de código de origen como un recuento de salida
Version 3.484.0
Añadido
- Los bloques de texto de documento seleccionado y de Direct Access exponen ahora ángulos de línea base, orígenes, matrices de celda, cuadriláteros ajustados por descendente y cajas alineadas con los ejes por carácter
GetTextBlockCharBoxañade una contrapartida de documento seleccionado a la consulta de caja existente de Direct Access
Cambiado
- La extracción de texto retiene los vectores de línea base, avance y altura de celda una vez por carácter, de modo que las consultas de geometría preservan la rotación, la inclinación y las líneas base invertidas en tiempo constante
DAGetTextBlockCharBoxderiva ahora su resultado directamente de la geometría de carácter retenida en lugar de recorrer cada ancho precedente
Corregido
- Los anchos de carácter del documento seleccionado y los volcados de bloques de texto aplican ahora la escala de coordenadas configurada exactamente una vez
Version 3.483.0
Añadido
GetTextBlockCharSourceFlagsyDAGetTextBlockCharSourceFlagsexponen la procedencia bit a bit de los caracteres generados, los guiones y los reemplazos de/ActualTextaplicados
Cambiado
- La extracción de bloques de texto retiene ahora los indicadores de origen de carácter junto a las matrices existentes de texto y avance, incluidos los espacios inferidos a partir de grandes huecos entre caracteres, sin reanalizar el contenido de la página en consultas repetidas
Version 3.482.0
Añadido
GetXRefDiagnosticsyDAGetXRefDiagnosticsdevuelven informes JSON de los tipos efectivos de referencias cruzadas, las posiciones de bytes, los límites del trailer, los recuentos de entradas y cada tabla o flujo de la cadena de revisiones
Cambiado
- Los enlaces de referencia híbrida, los reintentos con cabecera desplazada y las decisiones de recuperación de documentos editables permanecen ahora visibles como evidencia de diagnóstico diferenciada, incluidos los escaneos de objetos en bruto, la recuperación de objetos comprimidos y los trailers sintetizados
Version 3.481.0
Añadido
- Los documentos por intervalos de bytes respaldados por retrollamadas y de Direct Access pueden poner en cola trabajos en segundo plano de precarga de dependencias de páginas, formularios u objetos, con cuatro prioridades de planificación, cancelación, espera y diagnósticos de progreso JSON
- La precarga de dependencias itera el descubrimiento de rangos ausentes hasta que el objetivo está listo, con límites configurables de bytes de origen, lectura anticipada y pasadas de planificación
Cambiado
- Cada flujo por intervalos de bytes posee ahora un trabajador FIFO ordenado por prioridad que comparte la caché de rangos acotada mientras usa un estado de analizador aislado, lo que permite que el trabajo de documento en primer plano continúe sin compartir un lector mutable
- La cancelación en cola no realiza lecturas del origen, la cancelación en curso se comprueba antes de cada trozo, y la destrucción del flujo drena el trabajo pendiente antes de liberar su origen
Version 3.480.0
Añadido
LoadFromRangeSourceacepta una retrollamada opcional de disponibilidad que no obtiene datos, para almacenes progresivos, con consultas de documento seleccionado y de Direct Access sobre la preparación de páginas, formularios y objetos indirectos- Los informes de disponibilidad devuelven como JSON los rangos de bytes requeridos y ausentes fusionados, la completitud de las dependencias y los contadores de recorrido de objetos
Cambiado
- Los flujos por intervalos de bytes pueden comprobar la cobertura en caché y disponible en el origen sin leer bytes, mover el cursor del flujo ni cambiar las estadísticas de la caché
- La disponibilidad de páginas sigue solo la ruta del árbol de páginas objetivo y las dependencias de procesamiento alcanzables, mientras que los rangos no disponibles se informan sin invocar la retrollamada de lectura
Version 3.479.0
Añadido
TByteRangeStream.ReadAtproporciona lecturas absolutas independientes del cursor con compartición single-flight dentro del mismo trozo, fusión acotada de solicitudes adyacentes y una ventana de recolección configurable- Los diagnósticos de la caché de rangos informan ahora de las solicitudes pendientes, la ventana de recolección activa, las solicitudes atendidas por fusión y las lecturas físicas que cubrieron varios trozos
Cambiado
- Las lecturas diferidas de documentos respaldados por retrollamadas y por URL usan ahora desplazamientos absolutos, serializan las retrollamadas del origen y combinan trozos adyacentes concurrentes en lecturas del origen con un tope de 16 MiB
- Vaciar una caché de rangos durante una obtención en vuelo impide ahora que esa finalización obsoleta repueble la caché o los contadores posteriores al vaciado, mientras que los esperadores existentes siguen recibiendo sus bytes
Version 3.478.0
Añadido
- Los flujos por intervalos de bytes retienen ahora trozos alineados bajo un presupuesto de bytes explícito de tipo menos-recientemente-usado e informan del recuento de ventanas, los bytes retenidos, los aciertos, los fallos, las expulsiones, las lecturas del origen, los bytes del origen y las lecturas repetidas
LoadFromRangeSourceyDAOpenFromURLde Delphi aceptan un presupuesto de caché inicial, con nuevas API de documento seleccionado y de Direct Access para inspeccionar, redimensionar y vaciar la caché activa
Cambiado
- El calentamiento de la primera página de los documentos linealizados se mantiene ahora dentro del presupuesto configurado de bytes retenidos
Version 3.477.0
Añadido
LoadFromRangeSourcecarga un documento editable completo mediante una retrollamada aleatoria de intervalos de bytes proporcionada por el llamador, lo que permite que las entradas HTTP, de bases de datos, de almacenes de objetos y personalizadas permanezcan remotas mientras el analizador obtiene solo los rangos necesarios para la carga y las operaciones diferidas- El nuevo contrato
TPDFlibRangeReadEventrecibe desplazamientos absolutos, búferes de destino y recuentos acotados, y el proveedor de la retrollamada permanece en propiedad del llamador durante la vida del documento cargado
Version 3.476.0
Añadido
- Se ha añadido la creación de PDF/VT-3 sobre bases PDF/X-6, PDF/X-6p y PDF/X-6n, con metadatos de identificación sincronizados, cobertura obligatoria de partes de documento y preflight dedicado
Cambiado
- Las jerarquías de partes de documento emiten y validan ahora bloques hijos estándar de 8192 entradas, junto con restricciones más estrictas de nombre y tipo XML
Version 3.475.0
Cambiado
TPDFlibContentGraphicsState.BlackPointCompensationinforma ahora del estado efectivoDefault,ONuOFFa través del contenido de la página, la restauración de estados gráficos y los Form XObjects enumerados recursivamente- El preflight PDF/X-6 rechaza ahora las entradas
UseBlackPtCompcuyo tipo o valor quede fuera del modelo de compensación de punto negro de PDF 2.0
Version 3.474.0
Cambiado
- El preflight PDF/X-6 valida ahora los indicadores de anotaciones imprimibles, las apariencias normales deterministas, los estados de apariencia de botones, los campos AcroForm y de firma, las exclusiones de apariencias generadas por el visor y la colocación y las cadenas de acciones seguras
- La creación PDF/X-6 permite JavaScript solo en anotaciones Link activadas directamente, limita las acciones con nombre a la navegación de páginas y rechaza las rutas de acción no seguras, de nivel de documento, de nivel de página y de campos de formulario antes de que alteren el documento
Version 3.473.0
Añadido
SetPDFXModeacepta ahora el modo 5 para el intercambio de colores de proceso PDF/X-6p y el modo 6 para el intercambio de n colorantes PDF/X-6n, ambos usando PDF 2.0 y referencias a perfiles de salida externos- Las nuevas API
SetOutputIntentProfileReferenceyAddOutputIntentProfileReferenceURLcrean diccionarios/DestOutputProfileRefde nivel de documento o de página, derivan la suma de comprobación ICC, la versión y la firma del espacio de color, validan los metadatos del dispositivo de salida y de los colorantes, y conservan una o más ubicaciones de recuperación RFC 3986 sin incrustar los bytes del perfil
Cambiado
- El preflight PDF/X reconoce los identificadores XMP de PDF/X-6p y PDF/X-6n y valida el tipo de perfil externo, las longitudes de los metadatos, las firmas de colores de proceso o de n colorantes, las tablas de colorantes y las especificaciones de archivo URL
GetEffectivePageOutputIntentJSONinforma ahora de los metadatos del perfil referenciado, incluidosprofileCS,profileName,iccVersion,checkSum,profileURLsycolorants, tras la creación o la carga de ida y vuelta
Version 3.472.0
Añadido
- Las nuevas API
SetPageOutputIntent,ClearPageOutputIntentsyGetEffectivePageOutputIntentJSONcrean, eliminan e inspeccionan output intents de nivel de página de PDF 2.0, incluido el recurso alternativo efectivo a nivel de documento
Cambiado
- El preflight PDF/X-6 acepta ahora los output intents de nivel de página, les da precedencia sobre el output intent del documento y verifica que cada página se resuelva a un perfil Gray, RGB o CMYK incrustado
Version 3.471.0
Añadido
SetPDFXMode(4)crea documentos de intercambio completo PDF/X-6 con sintaxis PDF 2.0, identificación XMP de PDF/X-6 y un output intent incrustado con gestión de color
Cambiado
- El preflight PDF/X reconoce PDF/X-6, exige sintaxis PDF 2.0 y verifica que el output intent lleve una declaración de perfil ICC Gray, RGB o CMYK incrustado
Version 3.470.0
Añadido
- La maquetación HTML admite dirección, ajuste de línea, crecimiento, contracción, tamaño base, espaciados, justificación y alineación del eje transversal de Flexbox
- La maquetación HTML admite pistas explícitas de CSS Grid, tamaños fraccionarios, pistas repetidas, expansiones, colocación automática por filas o columnas, espaciados y alineación de elementos
- Las historias HTML admiten notas al pie numeradas que reservan la parte inferior del marco, reajustan el texto del cuerpo y conservan la numeración a lo largo de las continuaciones de página
Cambiado
- La medición HTML y la reproducción desde caché incluyen la geometría de Flexbox, Grid y de las notas al pie, conservando los límites acotados de contenedores y pistas
Corregido
- El borrado masivo de diccionarios PDF y el cambio de nombre de claves invalidan los índices de claves en caché, lo que evita búsquedas obsoletas durante la compactación de memoria y el procesamiento repetido de documentos
Version 3.469.1
Corregido
- La importación de EMF y la conversión de DC de lienzo ahora conservan el texto Unicode y las asignaciones de glifos de las fuentes TrueType incrustadas y no incrustadas
NewPageFromCanvasDCañade todas las páginas solicitadas, mientras queTPDFlibPrinterconfirma cada lienzo exactamente una vez, sin perder ni duplicar páginas
Version 3.469.0
Añadido
SetImageSoftMaskExadjunta máscaras suaves de imagen en escala de grises con colores mate opcionalesNewSoftMaskGraphicsStatecrea estados gráficos reutilizables de alfa, luminosidad, función de transferencia y restablecimiento a partir de Form XObjects capturadosFlattenTransparencysustituye las páginas seleccionadas por contenido estático opaco con la resolución y el color de fondo elegidos, pensado para versiones de PDF antiguas y flujos de archivo
Cambiado
- El aplanado de transparencias procesa una página cada vez, normaliza la rotación visual, conserva opcionalmente las anotaciones interactivas, admite progreso y cancelación, y elimina por defecto los recursos de transparencia inalcanzables
Version 3.468.0
Añadido
- Las imágenes AVIF, HEIF, HEIC y JPEG XL pueden importarse a través de las API de imagen existentes o de los métodos dedicados
AddModernImageFromFile,AddModernImageFromStreamyAddModernImageFromString SetModernImageCodecLibrary,ModernImageCodecAvailabley una retrollamada de descodificador proporcionan selección de códecs en proceso, lista para implementar, sin archivos de conversión temporales
Cambiado
- La descodificación de imágenes modernas conserva la orientación del origen, la transparencia alfa, los perfiles ICC y hasta 16 bits de profundidad por canal antes de reutilizar la canalización nativa de imágenes PNG
Corregido
- La validación del uso de claves de la semilla de firma ahora lee el contexto nativo del certificado con la alineación de punteros correcta en Win64
Version 3.467.0
Añadido
DeduplicateSimilarImagesconsolida XObjects de imagen perceptualmente similares con umbrales configurables de hash de diferencias, error medio de canal y error máximo de canal, además de admitir la ejecución en seco y la recopilación opcional de huérfanosGetSimilarImageDeduplicationReportJSONyTPDFlibImageSimilarityDedupStatsinforman de la cobertura de descodificación, del trabajo con candidatos indexados, de los errores aceptados, de las referencias redirigidas y del ahorro estimado de la carga codificada
Cambiado
- La coincidencia aproximada de imágenes exige diccionarios de imagen semánticamente idénticos, confirma muestras de color descodificadas de 64 × 64 y usa un índice hash de ocho bandas para evitar comparaciones exhaustivas por pares
Version 3.466.0
Añadido
EncodeImageToJPXStreamyEncodeImageToJPXFilecodifican la entrada de mapa de bits como JPEG 2000 con pérdida configurable o reversible sin pérdida, en un contenedor JP2 estándarAddImageJPXFromFile,AddImageJPXFromStreamyAddImageJPXFromStringañaden la entrada de mapa de bits codificada directamente como XObjects de imagenJPXDecode
Cambiado
- La creación de imágenes JPEG 2000 valida las opciones de calidad y de pérdida cero, restaura las posiciones de los flujos de entrada propiedad del llamador, elimina la salida parcial en caso de error, exige automáticamente PDF 1.5 y conserva la barrera existente de compatibilidad con PDF/A-1
Version 3.465.0
Añadido
RenderPageTileToStreamyRenderPageTileToFilerenderizan regiones arbitrarias en píxeles de dispositivo con solapamiento recortado y fondos blanco, de clave transparente o personalizadosRenderPageTilesToFiles,RenderPageTiledToStreamyRenderPageTiledToFileproducen rejillas de mosaicos en paralelo o unen sus límites núcleo exactos en una imagen de página sin costurasSetRenderSurfaceCacheLimit,GetRenderSurfaceCacheInfoyClearRenderSurfaceCacheproporcionan una caché LRU opcional y segura para subprocesos, con presupuestos independientes de entradas y de bytes, para superficies de mosaico totalmente compuestas
Cambiado
- La renderización paralela de una sola página ahora precalienta una lista de visualización compartida antes de repartir el trabajo entre los subprocesos, de modo que los flujos de contenido se analizan una sola vez, mientras que los compiladores no admitidos conservan una ruta serial determinista
Version 3.464.0
Añadido
GetXFARenderedPageCounty la familiaRenderXFAPageToStream,RenderXFAPageToStringyRenderXFAPageToFileproducen páginas ráster estáticas a partir de plantillas XFA, conjuntos de datos enlazados y saltos de página explícitos, sin modificar el documento de origenConvertXFAToAcroFormconvierte en campos editables los controles admitidos de texto, contraseña, selección, casilla de verificación, botón pulsador y firma, conservando nombres, valores, opciones, indicadores, páginas y límites
Cambiado
- La compresión Flate grande en una sola pasada ahora entrega al motor nativo un final de entrada protegido, lo que evita sumas de comprobación Adler no válidas en la salida PNG de alta resolución conservando la salida comprimida
Version 3.463.0
Añadido
RenderPageLayerToStream,RenderPageLayerToStringyRenderPageLayerToFileexportan el contenido base de la página, las anotaciones, los campos de formulario o todos los objetos interactivos como capas PNG componibles de forma independienteFlattenFormFieldTaggedyFlattenFormFieldsTaggedOnPageRangeintegran las apariencias de los campos en el contenido estático de la página conservando o creando semántica de estructuraFormaccesible
Cambiado
- La renderización de solo objetos interactivos omite el intérprete del contenido base, usa una única pasada de apariencias de anotaciones y escribe un fondo transparente sin alterar la configuración persistente del renderizador
- El aplanado etiquetado convierte una asociación
OBJRdel ParentTree específica de un Widget en contenido marcadoMCRde página, conserva el texto alternativo y el texto real existentes y deja los campos intactos cuando no puede demostrarse una asociación segura
Version 3.462.0
Añadido
HitTestAnnotationyGetAnnotationHitsJSONlocalizan la anotación superior o todas las anotaciones en un punto de la página mediante geometría consciente del subtipo y opciones de tolerancia, visibilidad y rectángulo delimitadorMoveAnnotationZOrderreordena in situ las referencias de anotación existentes, ySimplifyInkAnnotationsreduce los puntos de los trazos Ink con desviación geométrica acotada y estadísticas detalladas
Cambiado
- La interacción con anotaciones ahora comprueba cuadriláteros de marcado, trazados vectoriales, geometría de elipse y regiones rellenas tras un descarte rectangular rápido, mientras que las apariencias Ink modificadas se reconstruyen automáticamente salvo que se aplace explícitamente
Version 3.461.0
Añadido
RepairAnnotationAppearancesreconstruye en todas las páginas las apariencias normales ausentes, obsoletas, no válidas, incoherentes con su estado o invisibles, y devuelve estadísticas de problemas y de categorías de anotacionesGetAnnotationAppearanceAuditJSONinforma de los problemas de apariencia de cada anotación y de los recuentos agregados sin modificar el documento
Cambiado
- La generación de apariencias de marcado, formas, trazados, texto libre e iconos ahora comparte un escáner de documentos de una sola pasada, constructores de salida incrementales y huellas compactas de origen para una detección determinista de obsolescencia
Version 3.460.0
Añadido
ExecuteFormFieldScriptejecuta un subconjunto local acotado de acciones de validación, cálculo y formato de formularios sin exponer capacidades de archivo, red, proceso, interfaz de usuario ni código dinámicoRecalculateFormFieldsrealiza el cálculo incremental completo o limitado a dependencias, yGetFormCalculationGraphJSONinforma de las dependencias entre campos, de las posiciones en el orden de cálculo y de los ciclos
Cambiado
- El recálculo del formulario evalúa sobre una instantánea privada de valores, ordena los campos listos según el orden de cálculo del AcroForm, rechaza los ciclos de dependencia antes de cualquier mutación y solo confirma los valores cuando el grafo seleccionado se completa
Version 3.459.0
Añadido
MergeDocumentExañade políticas explícitas para campos de formulario duplicados: rechazar la fusión, conservar un nombre compartido con valores sincronizados o asignar sufijos numéricos deterministas
Cambiado
- El rechazo por campos duplicados se comprueba antes de alterar números de objeto, árboles de página o matrices de formulario, de modo que los documentos de origen y destino siguen siendo reutilizables tras una fusión rechazada
Version 3.458.0
Añadido
DrawOpenTypeText,GetOpenTypeTextWidthyGetOpenTypeGlyphRuncomponen, miden, dibujan e inspeccionan texto directamente desde un identificador de fuente TrueType u OpenType existente, sin necesidad de un nombre de familia instalado- Se incluyen módulos nativos portátiles de composición y de subconjuntos OpenType para Windows de 32 y 64 bits, con fuentes compilables para Linux y macOS y una variable de entorno para las rutas de implementación personalizadas
Cambiado
- El dibujo de escrituras complejas ahora prefiere la composición GSUB y GPOS a partir de los bytes de la fuente, incluidas sustituciones, interletraje, cursiva y adición de marcas, mientras que un mecanismo alternativo acotado en Pascal cubre la unión árabe y los formatos de búsqueda de maquetación OpenType habituales cuando el módulo nativo no está disponible
- La creación de subconjuntos de fuentes compuestas ahora conserva los identificadores de glifo y clausura las dependencias de maquetación, de fuentes variables y de fuentes de color, incluidos los datos COLR/CPAL y fvar/gvar/HVAR
Version 3.457.0
Añadido
CreateOpenTypeFontVariationcrea fuentes CFF estáticas reutilizables a partir de las coordenadas de ejes solicitadas de una fuente variable CFF2
Cambiado
- La importación OpenType CFF2 ahora selecciona una instancia predeterminada estática para dibujo e incrustación inmediatos, conservando el programa variable para una instanciación posterior
- La instanciación CFF2 evalúa los almacenes de variación,
vsindexyblendsobre las subrutinas locales y globales expandidas, aplica las variaciones de métricas horizontales y globales, y emite una fuente OpenType CFF1 acotada y con suma de comprobación correcta para las rutas existentes de incrustación y subconjuntos CFF
Version 3.456.0
Añadido
- Entrada WOFF2 añadida a los puntos de entrada de archivo TrueType, OpenType y colecciones en Windows 10 versión 1703 o posterior, incluidos los contornos y métricas TrueType transformados, las fuentes CFF y las caras de colecciones
Cambiado
- Los contenedores de fuentes web se desempaquetan una sola vez en memoria, usan el cmap Unicode mejor disponible para la asignación de caracteres, e incrustan o exportan el sfnt resultante en lugar del contenedor comprimido
Version 3.455.0
Añadido
GetFontVariationAxesexpone cada eje de fuente variable TrueType con su nombre localizado, su intervalo de diseño, su valor predeterminado y su estado oculto, mientras queCreateTrueTypeFontVariationcrea una fuente estática reutilizable a partir de las coordenadas de ejes solicitadas
Cambiado
- La instanciación variable TrueType aplica los datos
avar,gvar,HVARyMVAR, aplana los contornos compuestos, reconstruye las métricas horizontales y globales, elimina las tablas obsoletas de variación e interletraje, y emite un sfnt con suma de comprobación correcta para dibujo, incrustación, subconjuntos e inspección de glifos SaveFontToFilepuede exportar directamente los programas TrueType retenidos en memoria, incluidas las instancias de fuentes variables recién creadas antes de guardar un PDF
Version 3.454.0
Añadido
GetFontColorGlyphyGetFontColorGlyphByIndexexponen grafos de pintura COLR v0 y v1, paletas CPAL, documentos SVG-in-OT y series de mapas de bits incrustados para inspección y renderización directas desde la aplicación
Cambiado
- La inspección de tablas de fuentes de color usa un acceso acotado y diferido al sfnt y participa en el presupuesto de bytes compartido de la caché de fuentes, evitando el análisis anticipado de contornos en fuentes de color grandes
Version 3.453.0
Añadido
SetFontCacheLimit,GetFontCacheInfoyClearFontCacheproporcionan un presupuesto de bytes compartido, expulsión del menos usado recientemente y estadísticas de aciertos, fallos y ocupación para los recursos de caras de fuente retenidos, las ejecuciones de texto compuesto y los programas de contorno analizadosGetFontGlyphIndexasigna puntos de código Unicode completos a través de las tablas TrueType cmap de formato 4 y formato 12, mientras queGetFontGlyphOutlinedevuelve trazados simples y compuestos transformados con métricas de avance sin procesar, proyección izquierda, rectángulo delimitador y unidades por em
Cambiado
- Las mediciones repetidas de texto compuesto y las llamadas de dibujo reutilizan ejecuciones compuestas de copia profunda dentro del presupuesto compartido de caché, y la inspección repetida de glifos reutiliza el programa de fuente ya analizado en lugar de reanalizarlo para cada glifo
- Los programas de fuente binarios cargados desde cadenas y contenedores WOFF retienen un flujo propio de bytes sin procesar, lo que evita la recodificación del texto y las referencias a flujos caducados durante el acceso diferido a las tablas
Version 3.452.0
Añadido
soCanonicalEquivalentpermite que la búsqueda de texto, la búsqueda por lotes y los flujos de trabajo de sustitución coincidan con texto NFC y NFD canónicamente equivalente, notificando desplazamientos y longitudes en el texto extraído originalsoGraphemeClustersrestringe las coincidencias a los límites de las agrupaciones de grafemas ampliadas y hace que el comodín?consuma una agrupación completa, protegiendo los pares suplentes, las secuencias combinantes, las secuencias emoji ZWJ, las banderas y las ligaduras índicas
Cambiado
- La normalización Unicode y la segmentación por grafemas usan tablas compactas generadas de Unicode 15.1 en todas las plataformas compatibles, sin depender de un servicio de texto del sistema operativo
Version 3.451.0
Añadido
ExternalizeInlineImagessustituye en un intervalo de páginas seleccionado las imágenes en línea admitidas que se repiten por un único XObject de imagen compartido cuando el tamaño serializado estimado disminuye
Cambiado
- La externalización de imágenes en línea conserva las máscaras de imagen, la interpolación, las matrices de descodificación, los filtros y los parámetros de descodificación, y comprime con Flate de forma oportunista las cargas sin filtrar cuando resultan más pequeñas
- La agrupación exacta por SHA-256, los nombres deterministas de recursos, la eliminación de páginas duplicadas, el informe de progreso y la cancelación cooperativa mantienen los resultados de la optimización acotados y repetibles
- Las entradas desconocidas de los diccionarios en línea y los espacios de color no de dispositivo permanecen idénticos a nivel de bytes, en lugar de promoverse sin una semántica completa
Version 3.450.0
Añadido
NormalizeContentStreamscanoniza los espacios en blanco y los tokens numéricos en un intervalo de páginas seleccionado, conservando los operadores, los valores de cadena y las cargas de imágenes en línea
Cambiado
- La compresión de contenido ahora emite tokens canónicos incluso cuando la optimización de ventana no encuentra instrucciones redundantes
Corregido
- Los números reales PDF con un signo más inicial explícito ahora conservan su valor durante el análisis y la normalización
- Los datos de flujo sustituidos ya no conservan parámetros de descodificación obsoletos de su canalización de filtros anterior
Version 3.449.0
Añadido
SetTempFileQuota,GetTempFileQuotayCompactDocumentMemoryproporcionan una cola de objetos respaldada en disco y acotada, con reserva automática en memoria
Cambiado
- Los datos temporales de objetos ahora usan una búsqueda indexada consciente de la generación y siguen disponibles después de que se cierre el identificador de escritura de la cola
Version 3.448.0
Añadido
SetRecoveryModeyGetRecoveryModeseleccionan la reparación estricta, la reparación basada en el trailer o la recuperación de mejor esfuerzo antes de cargar una entrada PDF dañada
Cambiado
SaveToStreamahora escribe directamente en destinos de solo escritura no posicionables conservando la ruta de serialización por fragmentos existente- La recuperación de mejor esfuerzo sigue siendo el valor predeterminado, mientras que el modo estricto desactiva la reconstrucción en bruto y el modo de reparación exige un trailer superviviente en lugar de sintetizarlo
Version 3.447.0
Añadido
SetOptimizationWorkersyGetOptimizationWorkersconfiguran lotes acotados de subprocesos de trabajo para la optimización de imágenes y la recompresión de flujos Flate, con selección automática de procesadores por defecto y un modo de compatibilidad serialOptimizeImages,RecompressStreams,MergeFileList,MergeFileListFastyMergeFileListStrictahora informan de un progreso rastreado y aceptan la cancelación cooperativa medianteAbort
Cambiado
- La recompresión Flate y la transcodificación autónoma de imágenes se ejecutan en lotes paralelos acotados, mientras que las mutaciones del documento siguen siendo deterministas y de un solo subproceso
- La optimización de imágenes ahora conserva los datos de mapa de bits descodificados para la recodificación, omite las imágenes con máscara de plantilla y de clave de color, y elimina los parámetros de descodificación obsoletos al aplicar sustituciones JPEG
- Las fusiones de grandes listas de archivos mantienen abiertos solo los lectores de origen activos, informan del progreso por entrada y por recuento de objetos, y eliminan la salida incompleta al cancelarse o fallar
Corregido
- Las operaciones de fusión de varios archivos ahora informan de su finalización correcta cuando se fusionó más de un origen
- El submuestreo y la optimización de imágenes ahora conservan el mapa de bits descodificado que requieren sus rutas de recodificación
Version 3.446.0
Cambiado
- La sobrecarga de dos parámetros de
SetDisplayListCacheLimitacota tanto la memoria retenida de las listas de visualización como su recuento de entradas, mientras que la sobrecarga existente conserva el presupuesto de bytes configurado - La expulsión de listas de visualización ahora favorece el contenido reutilizado con frecuencia y con mayor valor de reconstrucción por byte retenido, y las listas individualmente desproporcionadas omiten la retención sin bloquear la renderización
- Las operaciones activas de captura y reproducción fijan sus listas, las búsquedas concurrentes nunca observan grabaciones parcialmente construidas, y las capturas canceladas o fallidas se descartan
GetDisplayListCacheInfoyGetResourceUsageStatisticsJSONinforman de los bytes retenidos, los límites, el coste estimado de reproducción, las expulsiones, las omisiones, las capturas rechazadas y la contención de construcción
Corregido
- La reproducción de listas de visualización ahora libera las cadenas de operandos sustituidas en lugar de retener una asignación de cada operador anterior
Version 3.445.0
Cambiado
- La sobrecarga de tres parámetros de
SetMemoryBudgetañade un presupuesto de bytes descodificados para la caché de flujos de objetos comprimidos de cada documento - Las entradas de la caché de flujos de objetos ahora usan expulsión del menos usado recientemente según el recuento de entradas y el tamaño de la carga descodificada, mientras que las entradas desproporcionadas omiten la caché sin bloquear el acceso a objetos
- Los presupuestos de memoria configurados antes de la carga ahora se aplican a los documentos existentes y futuros, y pueden consultarse mediante
GetMemoryBudget GetResourceUsageStatisticsJSONahora informa de los bytes actuales de la caché de flujos de objetos, de los límites de bytes y de los recuentos de expulsión
Version 3.444.0
Añadido
- La sobrecarga de tres parámetros de
SetParserLimitslimita los errores de análisis tolerados y detiene la recuperación determinista conpdsErrorLimitcuando se agota el presupuesto SetStreamDecodeLimitsrechaza las cadenas de filtros excesivamente largas antes de asignar los descodificadores y aplica un presupuesto acumulado de bytes descodificados entre flujos en una única operación rastreada- Las rutas de descodificación en flujo y en memoria comparten la misma contabilidad de filtros y de bytes, incluida la descodificación de flujos de objetos durante la carga del documento
GetResourceUsageStatisticsJSONinforma de las estimaciones de memoria de estructura y flujos, los recuentos de imágenes y fuentes, los picos de bytes descodificados, los fallos, y los aciertos y errores de las cachés de objetos, flujos de objetos y listas de visualizaciónResetResourceUsageStatisticsrestablece los contadores de diagnóstico sin descartar los documentos cargados ni las cachés reutilizables
Version 3.443.0
Añadido
SetParserLimitsyGetParserLimitsconfiguran e inspeccionan límites estrictos para los objetos PDF anidados y el número de entradas de cualquier matriz o diccionario analizado directamente- Los límites del analizador se aplican antes de que las rutas de carga desde archivo, flujo, cadena, diario de ediciones, QDF y comprobación de integridad consuman objetos, mientras que el valor predeterminado conserva el límite de anidamiento existente y el tamaño de contenedor sin restricciones
TPDFStructure.DecodeMaxContainerItemsrechaza matrices y diccionarios desproporcionados con el estado distintivopdsContainerLimity conserva la posición del falloRegenerateFormAppearancesrenueva en un solo recorrido cada campo AcroForm de nivel superior y secundario, conserva opcionalmente las apariencias utilizables y borraNeedAppearances
Version 3.442.0
Añadido
CheckFileComplianceacepta la prueba de conformidad 3 para PDF/X y audita un documento terminado frente a las reglas de intercambio de impresión de ISO 15930: identificación de edición pdfxid, nivel de sintaxis según la parte, exactamente un output intent GTS_PDFX con perfil incrustado e identificador de condición, estado de trapping declarado, geometría TrimBox y BleedBox por página, programas de fuente incrustados, tipos de anotación prohibidos, JavaScript a nivel de documento, archivos incrustados, cifrado y filtros LZWDecode- Los problemas aparecen como líneas con el prefijo PDFX a través del mismo identificador de lista de cadenas que usan los verificadores de PDF/A y PDF/UA
Version 3.441.0
Añadido
SetPDFXModeselecciona un modo de conformidad PDF/X (1 = PDF/X-1a:2003, 2 = PDF/X-3:2003, 3 = PDF/X-4) que aplica las reglas de intercambio de impresión de ISO 15930 en tiempo de creación y escribe la identificación de edición pdfxid en el XMP- El modo instala un OutputIntent GTS_PDFX (CMYK como valor predeterminado de impresión), declara el estado /Trapped y basa la versión de guardado en la parte (PDF 1.4 para X-1a / X-3, PDF 1.6 para X-4)
- Barreras de creación: los espacios DeviceRGB e ICCBased se rechazan bajo X-1a (X-3 / X-4 exigen un OutputIntent RGB para DeviceRGB), la transparencia y el contenido opcional se rechazan fuera de X-4, y el JavaScript, los archivos adjuntos, el cifrado, las imágenes LZWDecode y las fuentes no incrustadas se rechazan en todos los modos
- Correcciones al guardar: cada página recibe un TrimBox (con el MediaBox como valor predeterminado), los indicadores Print de las anotaciones y NeedAppearances del AcroForm se normalizan y /Trapped se declara
GetInformation(203)informa del modo PDF/X activo
Version 3.440.0
Añadido
AddWatermarkAnnotationFromImageIDescribe una anotación /Subtype /Watermark con la matriz de almacenamiento /FixedPrint /Matrix, de modo que la impresión escala la apariencia junto con la página (ISO 32000-1 12.5.6.17)AddPrinterMarkAnnotationFromImageIDescribe una anotación /Subtype /PrinterMark que porta el nombre de marca de impresión /PN (ISO 32000-1 12.5.6.18)SetFillColorICCBasedySetLineColorICCBaseddibujan mediante espacios de color /ICCBased a nivel de contenido respaldados por un archivo de perfil ICC incrustado, con el recuento de componentes leído de la cabecera del perfil y los perfiles idénticos compartiendo un único recurso
Version 3.439.0
Añadido
- Los contenedores de fuentes web WOFF 1.0 se importan de forma transparente a través de todos los puntos de entrada TrueType (
AddTrueTypeFontFromFile, API de flujo); las tablas se descomprimen desde sus flujos zlib y el directorio sfnt aplanado se reconstruye antes del análisis - Los documentos incrustan el programa sfnt desempaquetado en FontFile2, nunca el contenedor WOFF, lo que mantiene las fuentes incrustadas válidas para todos los visores
Version 3.438.0
Añadido
- La aplicación de los seed values se extiende a
LegalAttestation, las entradasIssuerde certificado aceptables y los patrones posicionalesKeyUsage(ISO 32000-2 Tables 237 and 238), con las API de creación correspondientes: los valores de atestación legal deSetSignatureFieldSeedValue,AddSignatureFieldSeedIssuerySetSignatureFieldSeedKeyUsage SetSignProcessLegalAttestationdeclara la atestación del firmante, validada en el momento de la firma frente a una restricción LegalAttestation exigidaTPDFlibPKCS11Client.InitializeUserPINyChangeUserPINadministran los PIN del token mediante una sesión dedicada de lectura/escritura, con inicio de sesión de oficial de seguridad paraC_InitPIN
Version 3.437.0
Añadido
SetSignProcessRSAPSSPaddinggenera firmas RSA desprendidas con relleno RSASSA-PSS, emitiendo el conjunto completo de parámetros de RFC 4055 (MGF1 con el resumen de firma, longitud de sal igual al resumen) dentro del identificador del algoritmo de firma CMS- Las firmas con relleno PSS hacen el recorrido completo por el verificador de la biblioteca, que ahora analiza los parámetros de RFC 4055 (codificaciones explícitas e implícitas) y los valida mediante CNG con la longitud de sal declarada
Version 3.436.0
Corregido
- La extracción de texto ahora descodifica los nombres de glifo suplementarios AGL (formas
uniXXXXyuXXXXXX) transportados en matrices /Differences de fuentes que no incluyen un mapa ToUnicode - Las ranuras de codificación cuyo nombre de glifo no resuelve a nada ahora recurren a la codificación base de la fuente, en lugar de mostrar puntos de código sin procesar o caracteres de sustitución durante la extracción
- Las fuentes TrueType simbólicas incrustadas sin mapa ToUnicode ahora se descodifican a través de las tablas cmap del programa de fuente incrustado, recuperando el Unicode real que hay detrás de cada código de carácter
Version 3.435.0
Añadido
AddTrueTypeCollectionFontFromFileincrusta cualquier cara de una colección TrueType (.ttc) por índice de base cero; el comportamiento anterior tomaba siempre la primera caraGetJPEGFileOrientationlee la etiqueta de orientación EXIF (1..8, 0 si está ausente) de un archivo JPEG yGetJPEGFileICCProfileToFileextrae su perfil ICC de APP2 sin importar la imagen
Version 3.434.0
Añadido
- Las opciones de renderización 11..15 corresponden a los indicadores de calidad de PDFium: renderización de texto LCD activada o desactivada, texto sin suavizado, imagen sin suavizado, trazado sin suavizado y tramado forzado; los valores predeterminados conservan la salida histórica y los motores GDI+/Cairo ignoran estos indicadores
SetDisplayListCacheLimitlimita la caché de listas de visualización de flujos de contenido analizados una sola vez; un límite positivo expulsa las entradas menos recientemente creadas antes de insertar, y cero restaura el comportamiento sin límite
Version 3.433.0
Añadido
- La selección del resumen del sello de tiempo de firma acepta la familia SHA-3 (códigos 5..7 en
SetPAdESSignatureTimeStampDigestAlgorithm), en línea con las opciones de resumen del firmante SetTimeStampRetryCountconfigura de 0 a 10 intentos TSA adicionales tras fallos de transporte o respuestas 5xx, con una espera lineal entre intentosTPDFlibCertificateInfoincorporaFriendlyName,ThumbprintSHA1yThumbprintSHA256, leídos de las propiedades del contexto de certificado duranteEnumCertificates- El informe de validación histórica AdES incorpora
BaselineProfile: 0 para los subfiltros no PAdES y, a partir de la evidencia de sello de tiempo y DSS, 1=B-B, 2=B-T, 3=B-LT y 4=B-LTA
Version 3.432.0
Añadido
- Las cadenas de intervalo de páginas aceptan las palabras clave
odd,also even,firstylast, también como extremos de intervalo (3-last), en todas las API que reciben un intervalo ReversePagesinvierte el orden de las páginas del documento cargadoFlattenAnnotsOnPageRangeintegra en una sola llamada todas las anotaciones de un intervalo en el contenido de la páginaGetPageContentBoxinforma de los límites de unión de todos los elementos de texto, imagen y trazado, yAutoCropPagesfija el CropBox de cada página en ese cuadro más un margenAddBatesNumberingestampa números secuenciales rellenados con ceros, con prefijo y sufijo, en nueve posiciones de estilo teclado numéricoExtractDocumentRevisionescribe en un archivo nuevo el estado del documento en cualquier revisión incremental anterior, truncando la cadena de revisionesSplitDocumentByOutlinedivide el documento por sus entradas de esquema hasta un nivel, en un archivo por secciónComparePageTextsWithcompara dos documentos página por página según el texto extraído e informa del recuento de diferencias y de la primera discrepanciaSanitizeDocumentincorporaSANITIZE_XMP_PACKET(valor 32), que elimina el flujo completo de metadatos XMP y todos los diccionarios/PieceInfo
Version 3.431.0
Añadido
- La opción de extracción 19 (
SetTextExtractionOptionsy la variante de acceso directo) descarta del resultado extraído el texto con modo de renderización 3, como las capas OCR, sin tocar el contenido visible - La opción de extracción 20 sustituye durante la extracción los glifos de las secuencias de contenido marcado
/Spanpor su valor/ActualText(ISO 32000-1 §14.9.4), respetando tanto los diccionarios de propiedades en línea como los recursos de propiedades con nombre DAGetTextBlockCharBoxderiva cajas alineadas con los ejes por carácter a partir de los cuadriláteros y avances del bloque, para rectángulos de resaltado y cálculos de regiones de acierto sobre caracteres individualesExportFormValuesToJSONserializa los valores de los campos AcroForm en una matriz JSON con el escape correcto, con posibilidad de omitir los campos vacíosGetPageTextStatisticscuenta caracteres, palabras separadas por espacios en blanco y bloques de cualquier páginaGetXMPPropertylee valores simples del paquete XMP del documento (descendiendo por los envoltoriosrdf:Alt/rdf:Bag/rdf:Seqy resolviendo entidades XML) ySynchronizeXMPToInfocopia los metadatos XMP de vuelta al diccionario Info- Los inventarios de fuentes informan de los tamaños de los programas incrustados:
TPDFlibDocumentFontincorporaFontFileBytesy el registro de diagnóstico incorpora unEmbeddedBytessumado
Version 3.430.0
Añadido
- La búsqueda de texto incorpora cuatro opciones nuevas:
soDiacriticInsensitivehace coincidir las consultas mediante un plegado Unicode 1:1, de modo que las letras simples encuentran sus contrapartes acentuadas (Latin-1, Latin Extended-A, griego y cirílico, respetando además la distinción de mayúsculas al combinarse consoCaseSensitive);soWildcardsinterpreta*y?en la consulta con una semántica de coincidencia más a la izquierda y más larga, compatible consoWholeWord;soAcrossLinesencuentra frases que atraviesan saltos de línea y de bloque uniendo los bloques extraídos de cada página, ysoPreserveStylehace queSearchAndReplaceTextredibuje las sustituciones con el tamaño y color de texto del bloque sustituido en lugar de con la configuración vigente del llamador - Los aciertos de búsqueda ahora informan de la posición y la longitud de la coincidencia dentro del texto del bloque (
MatchStart,MatchLength), además de ventanas de contexto opcionales (ContextBefore,ContextAfter) controladas por la nueva propiedadSearchContextChars AddTextMarkupFromSearchHitsyHighlightTextSearchHitsconvierten los aciertos de búsqueda, o los aciertos retenidos por una sesiónBeginTextSearchen curso, en anotaciones de marcado Highlight / Underline / Squiggly / StrikeOut en sus páginas- Las agujas de búsqueda literales de cuatro caracteres o más usan ahora una tabla de salto Boyer-Moore-Horspool con intercalación conservadora de caracteres anchos, lo que acelera las búsquedas por lotes en páginas largas
Corregido
- Las fuentes TrueType incrustadas escritas con una codificación base WinAnsi y una matriz Differences generaban un CMap
/ToUnicodeque solo enumeraba las entradas de Differences, de modo que los lectores que dependían de él descodificaban como basura los demás códigos WinAnsi acentuados: la extracción devolvía sustitutos?, la recolección de bloques podía detenerse en la línea afectada y la búsqueda sensible a diacríticos pasaba por alto esos documentos. El generador de CMap ahora cubre toda la codificación base con las invalidaciones de Differences, agrupadas en secciones conformes a la especificación de 100 entradas - La contabilidad de fusión de palabras del embudo de texto insertaba una entrada fantasma de avance al anexar ejecuciones sin separador, lo que desplazaba en uno todos los desplazamientos posteriores por carácter y corrompía los datos derivados, como los subrectángulos de los aciertos de búsqueda y los espacios inferidos de los huecos
Version 3.429.0
Corregido
- La creación de subconjuntos mediante
AddTrueTypeSubsettedFontproducía documentos cuyo texto se renderizaba en blanco en todos los visores: el flujo de asignación CID a GID se sobrescribía silenciosamente con una entrada/Identitycodificada de forma fija, de modo que los CID derivados de Unicode direccionaban los contornos de glifo equivocados. El flujo ahora es autoritativo y/Identityqueda solo como reserva cuando no puede derivarse una asignación; los documentos con subconjuntos que contienen CJK y conjuntos de glifos actualizados automáticamente vuelven a renderizarse correctamente - Los rellenos de sombreado axial y radial se renderizaban como negro sólido en el renderizador GDI+ interno:
GdipCreateLineBrushrechazaWrapModeClamp(un modo exclusivo de las brochas de textura) y el fallo al crear la brocha caía a la alternativa de negro sólido. Las brochas de degradado ahora se crean conWrapModeTiley los rellenos de sombreado se renderizan de forma idéntica al motor Cairo y a los visores externos - La creación de una instancia de
TPDFlibprovocabaEIntOverflowcuando la biblioteca se compilaba con la comprobación de desbordamiento activada (los indicadores de release de los scripts de construcción de la demostración por línea de comandos): el hash de nombres FNV-1a, la acumulación de estado del MD5 y los contadores de bits del MD5 son aritmética modular por diseño y ahora se ejecutan con las comprobaciones locales de desbordamiento desactivadas. La salida release distribuida debuild-Win32-Demo/build-Win64-Demoya deja de bloquearse al arrancar
Version 3.428.1
Añadido
- Nueva demo insignia
Showcase(Demo\Delphi\Showcase): construye al arrancar un documento de siete páginas —portada con degradado, gráficos vectoriales con sombreados y patrones, tipografía TrueType incrustada, tablas con estilo, una galería de códigos de barras, enlaces interactivos con anotaciones de revisión y marcadores, y una página de resumen— y lo previsualiza en vivo dentro del control incrustadoTPDFlibViewer - La demo Showcase también se ejecuta sin interfaz (
Showcase.exe <output.pdf>) con un argumentorenderopcional que exporta cada página como PNG, de modo que la canalización completa del documento puede ejercitarse desde scripts de construcción
Corregido
- El análisis de flujos de contenido ya no lee mal el operador de color de trazado
RG: la anticipación de referencias indirectas del descodificador de objetos consumía0 0 0 RGcomo un numérico más la referencia fantasma0 0 R, lo que corrompía los colores de trazado tras la optimización de contenido y producía errores de sintaxis de operadores en visores estrictos - El optimizador de ventana del contenido ya no descarta un establecedor
cs(espacio de color) repetido que sigue a cualquier operador de color:rg/g/krestablecen implícitamente el espacio de color, de modo que los rellenos de patrón (scn) posteriores a cambios de color de texto conservan su/Pattern csy vuelven a renderizarse correctamente
Version 3.428.0
Añadido
- Diecinueve demos de consola nuevas de Free Pascal / Lazarus en
Demo\Lazarus: OutlineBuilder, WatermarkDemo, NamedDestinations, EmbeddedFiles, XmpMetadata, TextBlockExtraction, AnnotationInspector, BarcodeGallery, TaggedPDF, SearchReplace, Redaction, LinearizeDemo, PatternShowcase, DocumentProperties, SecurityPermissionMatrix, PageStitch, OutputStream, MergePDF y PdfToImage - Una capa de compatibilidad de
IOUtils(TPath / TDirectory / TFile) para las construcciones FPC mantiene las demos portadas idénticas en el código fuente a sus homólogas de Delphi
Cambiado
- El sustituto gráfico NOVCL bajo Windows ahora materializa objetos GDI reales: TBitmap asigna una sección DIB de arriba abajo, TCanvas posee un DC de memoria y reselecciona los objetos GDI de brocha, lápiz y fuente al cambiar las propiedades, y TBrush / TPen / TFont reconstruyen sus identificadores cuando cambian los colores, los estilos o los atributos de fuente
- La renderización de páginas bajo FPC ahora produce una salida de píxeles idéntica a la construcción Delphi (rasterización GDI+ a través del DC sustituto), lo que además restaura la exportación a JPEG y BMP de
PdfToImage
Corregido
- La creación de PDF cifrados bajo FPC corrompía los valores de cadena binaria (lectura retrospectiva del
/IDdel trailer,/Ude cifrado), haciendo que la salida no superara la verificación de recarga; las construcciones FPC ya no pasan-FcUTF8, cuyo etiquetado de página de códigos de los ansistring hacía que la concatenaciónAnsiString + AnsiCharsustituyera cada byte por encima de $7F por un signo de interrogación
Version 3.427.0
Añadido
- Compatibilidad con Free Pascal / Lazarus: la biblioteca ahora compila bajo FPC 3.2 (Win64) desde las mismas fuentes que las construcciones Delphi, con los nuevos scripts de construcción
build-Lazarus-Lib,build-Lazarus-Lib-TRIAL,build-Lazarus-Testsybuild-Win64-Demo-Laz, y el paquetePDFlibPasLaz - La compresión y descompresión Flate bajo FPC pasan por el zlib estático incluido en FPC; el cifrado AES enlaza el mismo objeto unity que usan las construcciones Delphi; las imágenes JPEG se descodifican mediante el motor GDI+
- Una suite de pruebas de consola FPCUnit (
Tests\Lazarus) cubre los ciclos completos de creación, guardado y carga de documentos, deflate/inflate, AES y extracción de texto, y se incluyen dos demos de consola de Lazarus (HelloWorld,TextExtract) enDemo\Lazarus
Cambiado
- Los prefijos de ámbito de unidad (
System.SysUtils,Winapi.Windows, ...) se eliminaron de todas las fuentes de la biblioteca para que las mismas unidades se resuelvan bajo ambos compiladores; las construcciones de línea de comandos de la biblioteca Delphi ahora pasan la lista de ámbitos de unidad explícitamente - Corregidas dos erratas de directiva
NO_VCL/NOVCLen el renderizador y en la exportación de mapas de bits de Cairo que solo se hicieron visibles cuando la configuración NOVCL de Windows se compiló efectivamente
Version 3.426.0
Añadido
- La renderización de páginas ahora puede simular la sobreimpresión de tintas de proceso y con nombre mediante API configurables de Delphi, DLL y ActiveX
Cambiado
- Los estados gráficos extendidos ahora conservan la semántica acumulativa de
/OP,/opy/OPM, mientras que la composición de píxeles acotada retiene los canales de tinta superpuestos en los renderizadores GDI+ y Cairo
Version 3.425.0
Añadido
- La extracción de imágenes ahora conserva los segmentos de página y globales JBIG2 en archivos independientes y mantiene las cargas de fax CCITT dentro de envoltorios TIFF independientes
- Un manifiesto de solo lectura para la deduplicación de imágenes agrupa los duplicados codificados exactos por resumen, identidad de objeto, uso en páginas y bytes de carga recuperables, en los clientes Delphi, DLL y ActiveX
Cambiado
- Las listas de imágenes de página ahora identifican las cargas nativas JPX y JBIG2 sin forzar la expansión a mapa de bits, incluidos los flujos de imagen alcanzados a través de Form XObjects anidados
Version 3.424.0
Añadido
- Las API de archivos asociados a nivel de documento ahora crean, enumeran, asignan, añaden y eliminan la pertenencia
/AFdel catálogo en los clientes Delphi, DLL y ActiveX - Las anotaciones RichMedia ahora pueden reutilizar un archivo incrustado o asociado existente, manteniendo una única carga multimedia compartida por el panel de adjuntos y el grafo de recursos de la anotación
Cambiado
- La creación de archivos asociados acepta archivos, flujos de Delphi, cadenas binarias, búferes de DLL y matrices de bytes de ActiveX, preservando las sumas de comprobación, las descripciones, los metadatos de relación y los bytes cero binarios
- La eliminación de un archivo incrustado ahora elimina también las referencias coincidentes a archivos asociados del catálogo, de modo que los documentos cargados no pueden retener entradas
/AFcolgantes
Version 3.423.0
Añadido
- Las API de contenido opcional ahora construyen etiquetas anidadas del panel de capas y ramas de grupo en los clientes Delphi, DLL y ActiveX
- Las API de creación, pertenencia, eliminación e inspección de grupos de opción añaden controles de capa mutuamente excluyentes para flujos de trabajo de CAD y cartografía
Cambiado
- Las actualizaciones de capas bloqueadas ahora informan de su correcta finalización, las configuraciones alternativas usan sus identificadores correctos de base uno y las jerarquías de capas mal formadas se recorren con protección acotada contra ciclos
- Eliminar un grupo de contenido opcional retira sus referencias de las estructuras de orden, estado, bloqueo, grupo de opción y estado automático de capas en cada configuración
Version 3.422.0
Añadido
- Las API de anotaciones 3D PRC incrustan modelos desde archivos, flujos, cadenas de memoria, búferes de DLL y matrices de bytes de ActiveX, con vistas predeterminadas con nombre y políticas de activación explícitas
- Las anotaciones PRC admiten documentos técnicos PDF/A-4e y promueven automáticamente la salida ordinaria a PDF 2.0
Cambiado
- Las anotaciones PRC y U3D ahora incluyen una vista 3D completa, diccionarios de activación y desactivación, indicadores de anotación imprimibles, nombres alternativos y una apariencia normal
- La incrustación heredada de U3D rechaza los perfiles PDF/A que no permiten anotaciones 3D y acepta PDF/A-4e
Version 3.421.0
Añadido
- Las API de partes de documento añaden
/DPartRootde PDF 2.0,/DPartsjerárquico, hojas de intervalo de páginas, niveles de registro, nombres de nivel y metadatos/DPMvalidados en los clientes Delphi, DLL y ActiveX - Las API de inspección y ciclo de vida exponen la validación de la jerarquía, los recuentos de partes alcanzables, la búsqueda de página a parte, los ciclos completos de metadatos y la eliminación de la jerarquía completa
Cambiado
- Los conjuntos grandes de hijos usan bloques de matriz acotados, mientras que la validación comprueba los enlaces al padre, los ciclos, la profundidad uniforme de las hojas, la cobertura ordenada y completa de páginas, los enlaces inversos de página, los tokens de nombre XML y los grafos de metadatos acotados
- La creación de una jerarquía de partes de documento promueve la salida a PDF 2.0 y participa en la detección de características del documento cargado y en el bloqueo de la versión de guardado
Version 3.420.0
Añadido
DrawHTMLStoryañade un flujo HTML con estilo de alto nivel a través de columnas de igual anchura y páginas generadas automáticamente en los clientes Delphi, DLL y ActiveX- Los límites finitos de páginas devuelven una cadena de continuación reutilizable que conserva la cascada de hojas de estilo activa, el estado de estilo anidado, los bloques estructurados, las tablas, los enlaces, las asignaciones de fuentes y los enlaces de imágenes
Cambiado
- Las páginas de historia generadas heredan las dimensiones efectivas de la página inicial seleccionada y cada columna reutiliza planes de maquetación de medición y reproducción guardados en caché
- La maquetación de la historia rechaza la geometría no válida, acota las columnas y las páginas generadas, y termina cuando los marcos consecutivos no pueden avanzar
Version 3.419.0
Añadido
TPDFlibPrinterañade una fachada de componente VCL con los métodos de ciclo de vidaBeginDoc,Canvas,NewPage,EndDocyAbortpara la creación directa de PDF- Los trabajos de impresión PDF admiten dimensiones de papel configurables, orientación vertical u horizontal, DPI del lienzo, opciones de importación vectorial, títulos de documento y salida directa opcional a archivo
Cambiado
- Cada trabajo del componente posee un documento PDF independiente, confirma el primer lienzo y los siguientes con una semántica de página coherente, y retiene la salida completada para un procesamiento posterior con la biblioteca
- El componente nunca abre un diálogo de impresión ni accede a la cola de impresión del sistema operativo, lo que permite migrar el código VCL existente de dibujo en lienzo sin depender de una impresora física
Version 3.418.0
Añadido
RenderPagesToPrintStream,RenderPagesToPrintString,RenderPagesToPrintFile,RenderPagesToPrintDatayRenderPagesToPrintBufferañaden salida de impresión independiente del controlador en los clientes Delphi, DLL y ActiveX- Los intervalos de páginas seleccionados pueden emitirse como PostScript Level 3, EPS de una página, PCL 5c o PWG Raster, con controles opcionales de monocromo, dúplex, volteo y encuadre de trabajos PCL
Cambiado
- PostScript y EPS conservan el contenido vectorial de la página, mientras que PCL y PWG Raster usan codificadores de fila acotados para la entrega directa a servidores y dispositivos integrados
- Los flujos de impresión se generan sin abrir una impresora, sin mostrar un diálogo de impresión y sin enviar trabajo a la cola del sistema operativo
Version 3.417.0
Añadido
ExportPageSVGyExportPageSVGToFileañaden exportación escalable de páginas en los clientes Delphi, DLL y ActiveX- La salida SVG puede incluir de forma independiente trazados pintados nativos, texto buscable, imágenes PNG incrustadas, enlaces de anotación pulsables y un fondo de página transparente
Cambiado
- Los trazados de la página conservan sus transformaciones, la apariencia de relleno y trazado, la opacidad, los estilos de línea, las reglas par-impar y los límites de recorte efectivos, sin rasterizar la página completa
- Cada página se procesa en pasadas acotadas y produce un documento SVG autónomo, sin dependencias de imágenes externas
Version 3.416.0
Añadido
DrawSVG,DrawSVGFromFile,GetSVGWidthyGetSVGHeightañaden colocación y medición vectorial SVG nativa en los clientes Delphi, DLL y ActiveX- El dibujo SVG admite cajas de vista, alineación por proporción de aspecto, grupos, definiciones y reutilización, transformaciones, recorte, CSS sencillo y estilos en línea, opacidad, trazados con arcos elípticos y las formas estándar de rectángulo, círculo, elipse, línea, polilínea y polígono
Cambiado
- La geometría SVG se escribe como trazados PDF escalables sin XObjects de imagen ráster, y la medición y el dibujo repetidos reutilizan el árbol SVG acotado analizado más recientemente
- La entrada SVG que no es de confianza queda acotada por el tamaño del origen, el recuento de elementos y la profundidad de anidamiento, no realiza ningún acceso a recursos externos y usa el primer punto de color como alternativa sólida determinista para los servidores de pintura de degradado
Version 3.415.0
Añadido
DrawFormula,GetFormulaWidthyGetFormulaHeightañaden maquetación matemática anidada en los clientes Delphi, DLL y ActiveX- El marcado de fórmulas admite fracciones apiladas, superíndices y subíndices simultáneos, raíces cuadradas con índices opcionales, letras griegas, símbolos matemáticos habituales, caracteres de escape, grupos de texto y anidamiento acotado
Cambiado
- El texto de la fórmula usa la fuente, el tamaño de texto, el color, la composición y la cadena de reserva seleccionados, mientras que las líneas de fracción y de radical permanecen como contenido vectorial
- La medición y el dibujo repetidos reutilizan el árbol de cajas analizado y medido, mientras que el documento, la escala de medición y el estado completo del pintor permanecen sin cambios
Version 3.414.0
Añadido
MarkdownToHTML,DrawMarkdownText,DrawMarkdownTextBox,GetMarkdownTextHeight,GetMarkdownTextWidthyGetMarkdownTextLineCountañaden conversión directa de Markdown, medición, dibujo y continuación limitada por altura en los clientes Delphi, DLL y ActiveX- La entrada Markdown admite encabezados ATX y setext, párrafos, citas en bloque, listas ordenadas y no ordenadas, tablas de barras verticales con alineación, código cercado y con sangría, énfasis, texto fuerte, tachado, enlaces, imágenes, enlaces web automáticos, escapes y saltos de línea duros
Cambiado
- La medición y el dibujo repetidos de Markdown reutilizan el HTML convertido y la caché acotada de maquetación HTML, mientras que los corchetes angulares sin procesar permanecen como texto con escape
DrawMarkdownTextBoxdevuelve un token de continuación opaco aceptado por el mismo método, de modo que el estado en línea parcialmente renderizado puede continuar en otra página
Version 3.413.0
Cambiado
- La medición y el dibujo HTML ahora comparten planes de maquetación acotados que guardan en caché el análisis, la resolución CSS, la geometría de líneas y tablas, las imágenes, los fondos con estilo y los enlaces
- Las llamadas coincidentes a
GetHTMLTextHeight,GetHTMLTextWidthoGetHTMLTextLineCountpueden alimentar aDrawHTMLTextsin repetir el análisis ni el trabajo de maquetación del HTML
Corregido
- La medición de HTML con fondos de texto con estilo ya no escribe operadores de rectángulo en el flujo de contenido de la página seleccionada
Version 3.412.0
Añadido
BeginDeferredPageLayer,EndDeferredPageLayer,ComposeDeferredPageLayers,CancelDeferredPageLayersyGetDeferredPageLayerCountproporcionan composición diferida por índice z en los clientes Delphi, DLL y ActiveX- Las capas negativas se renderizan bajo el contenido existente de la página, mientras que las capas cero y positivas se renderizan sobre él, con un orden de grabación estable para los valores de z-index iguales
Cambiado
- Las capas diferidas se retienen como Form XObjects del tamaño de la página y se componen mediante una operación de colocación por capa, sin analizar ni reproducir sus órdenes de dibujo
Version 3.411.0
Añadido
SetPageHeaderFooterVariant,ApplyPageHeaderFooterSetyClearPageHeaderFooterSetproporcionan plantillas reutilizables con nombre de encabezados y pies de página corridos, con variantes de primera página, páginas impares, páginas pares y predeterminada- Las variantes de encabezado y pie pueden representar texto sin formato con la fuente actual o HTML enriquecido con medición automática de altura, expansión de variables por página, alineación, márgenes y opacidad, en los clientes Delphi, DLL y ActiveX
Cambiado
- Los encabezados y pies corridos generados son artefactos de paginación, conservan el estado de página y de pintor del llamador, y admiten variantes en blanco explícitas que suprimen la alternativa en las páginas de título o de apertura de sección
Version 3.410.0
Añadido
StartPageNumberChapter,AddPageNumberPlaceholderyResolvePageNumberPlaceholdersproporcionan un flujo de trabajo de dos pasadas para los números de página finales del documento y de los capítulos dentro del texto ordinario del cuerpo- Las plantillas de paginación admiten números de página físicos, totales finales del documento, nombres de capítulo, números de página relativos al capítulo y totales finales de capítulo, en los clientes Delphi, DLL y ActiveX
Corregido
- Las cajas de texto de cadena ancha ahora pasan su texto suministrado al motor de ajuste de línea, en lugar de producir una caja vacía
Version 3.409.0
Añadido
AutoFitTableColumnsasigna las anchuras de las columnas de la tabla a partir del contenido con estilo de las celdas, respetando una anchura exacta de tabla y los límites por columna definidos por el llamador- Los clientes Delphi, DLL y ActiveX comparten el mismo comportamiento de dimensionado automático de tablas, incluidas las restricciones de celdas combinadas
Cambiado
- El dimensionado automático correcto invalida las mediciones de filas en caché, mientras que las restricciones de anchura inviables dejan todas las columnas existentes sin cambios
Version 3.408.0
Añadido
DrawTextFlowColumnshace fluir un pasaje retenido por entre una y 64 columnas de igual anchura, con medianiles configurables y equilibrado opcional de la región final- Los clientes DLL y ActiveX ahora pueden crear, dibujar, medir, inspeccionar, rebobinar y liberar identificadores TextFlow a través del ciclo de vida público completo
Cambiado
- Las columnas equilibradas usan recuentos exactos de líneas cuando el pasaje restante cabe, mientras que las regiones desbordadas conservan la altura completa de la columna para maximizar la capacidad de la página
Version 3.407.0
Añadido
- La renderización de texto HTML ahora admite hojas de estilo incrustadas, CSS en línea, encabezados, bloques estructurales, tablas con celdas combinadas en columnas e imágenes ligadas al documento
SetHTMLImageyClearHTMLImagesexponen controles equivalentes en Delphi, DLL y ActiveX para orígenes de imágenes HTML reutilizables
Cambiado
- La medición y el dibujo HTML ahora comparten las decisiones de cascada resuelta y de maquetación, las filas de tabla continúan de forma atómica entre cajas de texto, y el estado de continuación conserva el formato CSS anidado
Version 3.406.0
Añadido
- TextFlow ahora admite la división con guion automática, acotada y consciente del idioma para inglés, alemán, neerlandés, francés, español, italiano, portugués, ruso y turco, incluida la herencia del idioma desde el valor
/Langdel catálogo del documento SetTextFlowLanguageySetTextFlowHyphenationexponen controles equivalentes en Delphi, DLL y ActiveX para el idioma y las longitudes mínimas de prefijo o sufijo
Cambiado
- El salto de línea de TextFlow ahora mide palabras completas, usa una búsqueda acotada solo para tokens desproporcionados, y representa guiones blandos discrecionales o automáticos únicamente cuando se elige ese salto
Version 3.405.0
Añadido
- La reserva automática de fuentes ahora resuelve las agrupaciones faltantes de CJK, símbolos, matemáticas, escrituras complejas y emojis a través de caras instaladas en caché, conservando la composición y el orden de las ejecuciones bidireccionales
SetAutomaticFontFallback,AddFontFallbacky las API de inspección de la cadena de reserva exponen controles equivalentes en Delphi, DLL y ActiveX
Cambiado
- El dibujo de texto y la medición de anchura ahora comparten las mismas decisiones de reserva conscientes de agrupaciones, e incrustan de forma diferida solo las fuentes de reserva elegidas para la salida
Version 3.404.0
Añadido
- Los glifos ausentes ahora se detectan como valores escalares Unicode en texto sin formato y compuesto, se retienen en un informe JSON acotado y se exponen mediante retrollamadas de Delphi, DLL y ActiveX
SetMissingGlyphPolicypermite conservar el comportamiento de descartar e informar, o rechazar una operación de texto antes de escribir contenido, conLastErrorCode 521
Version 3.403.0
Añadido
GetAPIScopeReportJSONyClearAPIScopeReportexponen diagnósticos deterministas de tiempo de ejecución y de flujos de contenido mediante las API de Delphi, DLL y ActiveX- Las transiciones no válidas de trazado, estado gráfico, actualización de página, contenido marcado, formulario, patrón, página, documento y finalización de salida ahora fallan de inmediato con
LastErrorCode 117
Version 3.402.0
Añadido
AnalyzePageSkewJSON,DeskewPageyDeskewPageRangedetectan y corrigen la rotación de páginas escaneadas mediante las API de Delphi, DLL y ActiveX- El análisis de enderezado usa rásteres acotados de resolución adaptativa y una puntuación de perfiles de línea de grueso a fino, mientras que la corrección conserva el contenido PDF original y ofrece un modo opcional de relleno de página
Version 3.401.0
Añadido
DetectPageBarcodesJSONreconoce códigos de barras unidimensionales y bidimensionales a partir de una página PDF completa o de una región acotada de la página, y devuelve texto, simbología, orientación, validez, puntos de esquina y límites como JSON determinista- Los escaneos de región renderizan solo los píxeles solicitados, conservan la página seleccionada, admiten máscaras de formato y de opciones del descodificador, y exponen API equivalentes en Delphi, DLL y ActiveX
Version 3.400.0
Añadido
SaveDOCXToStreamySaveDOCXToFileconvierten intervalos de páginas PDF en párrafos editables de WordprocessingML, con encabezados inferidos, listas nativas de viñetas y numeradas, tablas detectadas, estilo de fuente, saltos de página e imágenes PNG posicionadas- El escritor determinista de paquetes DOCX usa entradas Deflate sin procesar con comprobación CRC y sin automatización de Office, escribe los datos de imagen a medida que se procesa cada página, conserva el orden explícito de páginas y restaura la página PDF seleccionada
Version 3.399.0
Añadido
ExportPageMarkdownyExportDocumentMarkdownconvierten el contenido semántico de la página en párrafos Markdown con escape, encabezados inferidos, listas ordenadas o no ordenadas y tablas de barras verticales, con marcadores de página y estilo de fuente opcionalesSaveMarkdownToStreamySaveMarkdownToFileescriben UTF-8 página a página sin almacenar en búfer la salida completa del documento, mientras que los puntos de entrada DLL y ActiveX correspondientes exponen flujos de trabajo de exportación a cadena y a archivo
Version 3.398.0
Añadido
ExportPageHTMLyExportDocumentHTMLcrean HTML5 autónomo con texto posicionado, imágenes PNG incrustadas, enlaces URI y anclajes internos de página- La exportación del documento conserva el orden explícito del intervalo de páginas, restaura la página seleccionada, retiene un solo modelo de extracción de página a la vez y expone API equivalentes en Delphi, DLL y ActiveX
Version 3.397.0
Añadido
ExtractStructuredPageyExtractStructuredDocumentconvierten el texto de la página en jerarquías de párrafo, línea, tramo, tabla, fila y celda, y exportan el mismo modelo como JSON, XHTML semántico o CSV de tablas detectadas- La extracción del documento retiene una jerarquía de página a la vez, restaura la página seleccionada y expone puntos de entrada equivalentes en Delphi, DLL y ActiveX
Version 3.396.0
Añadido
ApplyOCRTextLayeracepta JSON de OCR neutro respecto al proveedor y anexa texto invisible filtrado por confianza y ajustado a cajas delimitadoras, que hace buscables las páginas escaneadas sin alterar los píxeles renderizadosOCRPage,OCRDocumentyOnOCRPageproporcionan una canalización de OCR conectable de una página por vez con memoria de ráster acotada, mientras que los llamadores DLL y ActiveX pueden combinar la renderización de páginas existente conApplyOCRTextLayer
Version 3.395.0
Añadido
AddImageFromFileyAddImageFromStreamahora aceptan imágenes WebP; la biblioteca detecta el contenedor RIFF/WEBP y descodifica mediante GDI+, que incluye un códec WebP integrado en Windows 10 1809 y posteriores
Version 3.394.0
Añadido
SetRenderTargetICCpermite al llamador suministrar un perfil ICC de destino, de modo que las transformaciones ICC del renderizador asignan los colores de origen a través de un perfil de prueba CMYK en lugar del sRGB predeterminado, lo que habilita la prueba suave CMYK y la vista previa de gama
Version 3.393.0
Añadido
OptimizeImagesexamina cada imagen incrustada, la descodifica, la recodifica como JPEG con la calidad indicada por el llamador y sustituye el flujo original in situ solo cuando el JPEG resulta estrictamente más pequeño —lo que reduce automáticamente los documentos escaneados y las imágenes sin comprimir, a la vez que protege las imágenes que crecerían
Version 3.392.0
Añadido
GetImageInfoJSONexamina cada XObject de imagen del documento y devuelve metadatos por imagen (número de objeto, dimensiones en píxeles, espacio de color, bits por componente, filtro) como JSON sin descodificar ningún dato de píxel, de modo que auditar inventarios de imágenes se mantiene en O(número de imágenes) en memoria en lugar de O(bytes totales de imagen)
Version 3.391.0
Añadido
- Las imágenes JPEG2000 (JPXDecode) ahora se extraen con traspaso directo de bytes nativos cuando el modo de extracción lo admite, preservando el flujo comprimido original sin descodificar y recodificar, igual que el comportamiento existente de traspaso de JPEG
Version 3.390.0
Añadido
NewMultiStopAxialShaderyNewMultiStopRadialShadercrean degradados con cualquier número de puntos de color interiores en cualquier espacio de color PDF (DeviceRGB, DeviceCMYK, DeviceGray, ICCBased), usando funciones de cosido de Type 3 para encadenar una interpolación exponencial Type 2 por segmento- El nuevo registro
TPDFGradientStoptransporta una posición en[0,1]y valores de color por componente para cada punto
Version 3.389.2
Cambiado
- La composición de texto complejo ahora guarda en caché la SCRIPT_CACHE de Uniscribe, el HFONT y el DC por fuente durante la vida del documento, de modo que las tablas cmap/GSUB/GPOS analizadas de la fuente sobreviven entre llamadas a
DrawShapedTexten lugar de recrearse y liberarse cada vez
Version 3.389.1
Cambiado
- La conversión de real a cadena en la escritura de flujos de contenido ahora usa un bucle de dígitos en línea con una tabla precalculada de potencias de diez, en lugar de la ruta genérica
Power+IntToStr+Insert, lo que reduce notablemente la carga de CPU en la generación de gráficos de alta densidad manteniendo una salida idéntica a nivel de bytes
Version 3.389.0
Añadido
SetMemoryBudgetacota la memoria consumida por los documentos grandes limitando el umbral de tamaño de flujos descodificados y la caché de flujos de objetos comprimidos, manteniendo la memoria máxima dentro de un presupuesto fijado por el llamador
Cambiado
- La caché de flujos de objetos comprimidos del lector de acceso aleatorio ahora tiene un valor predeterminado de 50 entradas en lugar de crecer sin límite, de modo que tocar muchos flujos ObjStm ya no acumula contenido descodificado indefinidamente
Version 3.388.1
Cambiado
- Los tokens de nombre PDF analizados durante la carga del documento ahora se internalizan en un grupo de hash por estructura, de modo que los millones de nombres duplicados de los documentos grandes comparten un único búfer con recuento de referencias en lugar de asignar cadenas nuevas; las búsquedas de claves de diccionario se resuelven con simples comparaciones de punteros
Version 3.388.0
Añadido
- Las fuentes CFF, OpenType-CFF y de claves CID ahora reciben su subconjunto al guardar mediante el mismo servicio
CreateFontPackageque usa el subconjunto TrueType, incrustando solo los glifos que el flujo de contenido dibujó realmente y reduciendo notablemente los documentos CJK y OTF - Las salidas CIDFontType0 con subconjunto ahora llevan un flujo
/CIDSetque declara qué CID están incrustados, lo que satisface la regla 00032 de PDF/A y las expectativas de los lectores conformes
Version 3.387.0
Añadido
SetRenderBandingrenderiza una página banda horizontal a banda horizontal en un mapa de bits corto y compone las bandas en una salida de tamaño completo, de modo que las páginas de alto DPI y gran formato mantienen una memoria máxima acotada en lugar de asignar un único mapa de bits giganteGetRenderBandHeightinforma de la altura de banda activa, o 0 cuando el banding está desactivado- Nuevas API de renderización por bandas en Delphi, DLL y ActiveX exponen el flujo de trabajo en todas las superficies públicas
Version 3.386.0
Añadido
SetDisplayListCachinggraba una sola vez el flujo de contenido de una página en una lista de visualización reproducible, de modo que las renderizaciones posteriores a cualquier zoom o DPI omiten la re-tokenización; los Form XObjects y los procedimientos de glifo Type 3 guardan en caché una lista cada unoGetDisplayListCacheInfoinforma en JSON de si la caché está activa, además del recuento de entradas y de los contadores de aciertos y fallos, yClearDisplayListCachedescarta las grabaciones y recupera su memoria- Nuevas API de listas de visualización en Delphi, DLL y ActiveX exponen el flujo de trabajo en todas las superficies públicas
Version 3.385.0
Añadido
StartRenderPageJobrenderiza una página en una tarea en segundo plano a través de una instancia aislada, de modo que una página grande ya no puede bloquear el subproceso anfitrión mientras se renderizaPauseRenderJob,ResumeRenderJobyCancelRenderJobinterrumpen una sola página en curso en los límites de operadores del flujo de contenido, mediante un indicador cooperativo de cancelación y una compuerta de pausa enhebrados en el renderizadorWaitForRenderJob,GetRenderJobStateyGetRenderJobResultinforman del progreso y del resultado del trabajo mediante los códigosRENDER_JOB_STATE_*- Nuevas API de trabajos de renderización en Delphi, DLL y ActiveX exponen el flujo de trabajo en todas las superficies públicas
Version 3.384.0
Añadido
DAOpenFromURLabre un PDF remoto por HTTP mediante peticiones de intervalo de bytes, descargando solo los objetos que el lector toca realmente y precargando la sección de primera página de los documentos linealizados para que la página 1 se renderice primeroGetLinearizedURLAccessPlansondea una URL remota con una única petición de intervalo pequeña y devuelve un informe JSON con la longitud total, la compatibilidad con intervalos de bytes, la linealización, el recuento de páginas, el objeto y el fin de sección de la primera página, el alcance del flujo de pistas y la lista fusionada de intervalos de bytes que requiere la página 1- La nueva opción
PDF_NET_OPT_NO_WARMINGy los códigos de errorPDFLIB_ERROR_NET_OPEN,PDFLIB_ERROR_NET_RANGE_UNSUPPORTEDyPDFLIB_ERROR_NET_HTTPhacen visible la lectura de red en Delphi, DLL y ActiveX
Version 3.383.0
Añadido
SaveQDFToFileyConvertFileToQDFcrean PDF de diagnóstico editables a mano, con formato de objetos legible, comentarios de identidad de objeto original, flujos de contenido comunes expandidos y longitudes de flujo indirectas y reparablesRepairQDFFilerecalcula las longitudes de flujo editadas y reconstruye los datos de referencia cruzada, los trailers ystartxref, incluida la reparación in situ- Nuevas API QDF en Delphi, DLL y ActiveX y la opción
PDF_QDF_OMIT_ORIGINAL_OBJECT_IDSexponen el flujo de trabajo en todas las superficies públicas
Version 3.382.0
Añadido
PDF_LINEARIZE_OBJECT_STREAMShabilita el empaquetado acotado de flujos de objetos y un flujo xref principal comprimido, conservando legibles directamente los datos de referencia cruzada de la primera página
Cambiado
SaveToFileOptionsahora conserva el empaquetado de flujos de objetos cuandoLinearizeyPackObjectStreamsse activan a la vez
Corregido
LinearizeFileahora admite rutas de entrada y salida idénticas sin truncar los bytes del origen antes de que la pasada de linealización los lea
Version 3.381.0
Añadido
ValidateLinearizationFileyGetLinearizationValidationReportauditan de forma independiente los diccionarios de Fast Web View, los intervalos y tablas de bits de pistas, las dependencias y límites de bytes de la primera página, los recuentos de páginas y la entrada de la referencia cruzada principal
Corregido
- La salida linealizada ahora escribe tablas de pistas deterministas de desplazamiento de página y de objetos compartidos en orden MSB, con vectores alineados por bytes, longitudes de página exactas y desplazamientos relativos a las pistas
- Las tablas de pistas generadas ya no contienen anchuras de bits aleatorias, campos little-endian, filas de grupos compartidos incompletas ni desplazamientos de contenido de relleno que pudieran hacer que lectores conformes rechazaran los datos de Fast Web View
Version 3.380.0
Añadido
- Los flujos Flate grandes ahora pueden comprimirse y descomprimirse en fragmentos acotados, incluida la extracción en flujo directo mediante
GetEmbeddedFileContentToStreamyGetEmbeddedFileContentToFile
Cambiado
- El guardado de flujos grandes cifrados con RC4, AES-CBC y AES-GCM ahora escribe el texto cifrado directamente en el destino con longitudes exactas precalculadas, en lugar de materializar copias temporales completas y descifrarlas después
- Las importaciones grandes de archivos incrustados se comprimen de forma incremental en su flujo almacenado y los guardados cifrados repetidos conservan los bytes de origen en memoria y los metadatos del flujo
Version 3.379.0
Añadido
StartEditJournal, los límites explícitos de transacción, la reversión, deshacer, rehacer, el restablecimiento del historial, las consultas de estado y la recuperación ante fallos están disponibles para los llamadores de Delphi, DLL y ActiveX- Los diarios persistentes anexan registros de estado y de cursor del PDF con suma de comprobación independiente, vuelcan los registros completos al almacenamiento y recuperan la última confirmación completa cuando una escritura final está incompleta o dañada
Cambiado
- Deshacer, rehacer, la reversión y la recuperación conservan el identificador de documento seleccionado e invalidan los identificadores transitorios cuyos objetos de documento subyacentes fueron sustituidos
- La memoria de deshacer queda acotada por el recuento de pasos configurado, las instantáneas solo se serializan en los límites de transacción y las contraseñas del documento nunca se escriben en los diarios de recuperación
Version 3.378.0
Añadido
ConvertTextToPathsconvierte el texto de fuentes de contorno y los programas de glifo Type 3 en Form XObjects vectoriales reutilizables en las páginas seleccionadas y en los Forms anidados- Los llamadores de Delphi, DLL y ActiveX pueden seleccionar la conversión recursiva de Forms y la limpieza automática de los recursos de fuente de origen
Cambiado
- El contenido convertido conserva el posicionamiento de texto, el espaciado, el modo de escritura, las transformaciones, los colores y los ajustes de trazado, a la vez que elimina los operadores originales de presentación de texto
- Los modos de renderización con recorte de texto y los ámbitos de recursos compartidos ambiguos se rechazan antes de modificar cualquier objeto del documento
Version 3.377.0
Añadido
CopyPageRangesExaceptaPDF_COPY_PAGE_SMART_RESOURCESpara reutilizar las fuentes, imágenes, espacios de color, patrones, sombreados y estados gráficos equivalentes ya presentes en el documento de destinoPDF_COPY_PAGE_KEEP_ORDERda nombre a la opción existente de páginas duplicadas ordenadas y puede combinarse con la copia inteligente de recursos
Cambiado
- La copia inteligente de páginas normaliza números de objeto, orden de claves de diccionario, grafía numérica y longitudes de flujo antes de calcular el hash, confirma estructuralmente cada coincidencia y omite los grafos cíclicos o sensibles a la identidad
CollateDocumentsExahora aplica la reutilización semántica de recursos entre sus documentos de origen sin asignar primero grafos de recursos duplicados
Version 3.376.0
Añadido
TrimPageContentToCropBoxelimina las ejecuciones completas de texto de nivel superior, los trazados pintados, las colocaciones de imagen y las invocaciones de Form XObject que quedan íntegramente fuera del CropBox de una páginaTPDFContentProgram.TraceGraphicsStatePairscaptura en una sola reproducción los estados de las instrucciones antes y después, mientras prolonga un rastreador propiedad del llamador a través de las capas de contenido- Los llamadores de Delphi, DLL y ActiveX pueden aplicar márgenes con signo al recortar el sangrado de la página y reducir el contenido retenido
Cambiado
- El recorte por CropBox conserva los objetos que se cruzan o no se resuelven, los trazados de recorte, los modos de recorte de texto y los internos de Forms compartidos, manteniendo los avances relativos de texto tras las cadenas eliminadas
Version 3.375.0
Añadido
TPDFStructureexponeDecodeMaxDepth,LastDecodeStatusyLastDecodePositionpara el análisis acotado de objetos de bajo nivel y diagnósticos precisos de límites
Cambiado
- Las matrices y diccionarios PDF ahora se analizan mediante una pila de estados explícita y acotada, incluidos los operandos anidados de los flujos de contenido de página
Seguridad
- Los objetos directos que no son de confianza y superan el límite predeterminado de 256 contenedores se rechazan antes de que puedan agotar la pila del subproceso
Version 3.374.0
Añadido
AddType3Fontcrea fuentes Type 3 programables con matrices y límites de fuente definidos por el llamadorAddType3Glyphescribe programas gráficos de glifo codificados por bytes, con métricas, codificación, anchuras y mapas de extracción Unicode automáticosAddType3FontResourceexpone fuentes, imágenes, estados gráficos, sombreados y otros recursos indirectos a los programas de glifo- Los llamadores de Delphi, DLL y ActiveX pueden crear fuentes Type 3 de símbolos, sellos y propósito especial sin instalar ni incrustar un programa de fuente externo
Cambiado
- Las actualizaciones de glifos Type 3 reconstruyen in situ las tablas derivadas compactas de la fuente, conservando el identificador de fuente usado por los recursos de página existentes
Version 3.373.0
Añadido
- Los cursores del árbol de estructura navegan por padres, hijos y hermanos conservando la identidad de los elementos a través de reparaciones y reordenaciones
ReparentStructTreeCursormueve o reordena elementos de estructura y rechaza la autoasignación de padre y los ciclos entre descendientesNormalizeStructTreecanoniza las colecciones de hijos, repara los enlaces al padre, promueve los elementos directos y elimina las aristas no válidas, duplicadas o cíclicas
Cambiado
- La reparación del árbol de estructura conserva la propiedad del contenido marcado y las asignaciones del árbol de padres, haciendo seguras las ediciones de jerarquía para los guardados posteriores
Version 3.372.0
Añadido
EnumeratePageElementsdevuelve identificadores estables de vida corta para contenido editable de texto, imagen y trazadoDeletePageElementelimina un objeto enumerado conservando el posicionamiento relativo del texto posteriorTransformPageElementescribe una matriz afín alrededor del objeto seleccionado sin alterar el contenido no relacionado
Cambiado
- Los identificadores de elementos editables validan la huella del contenido original y rechazan mutaciones obsoletas o ambiguas
Version 3.371.0
Añadido
ExportObjectJSONemite en flujo el trailer completo y el grafo de objetos indirectos a un JSON tipado, determinista y reversibleImportObjectJSONvalida y fusiona grafos de objetos, o bien sustituye el conjunto completo de objetos indirectosGetObjectJSONySetObjectJSONexponen la inspección y la actualización atómicas por objeto mediante Delphi, DLL y ActiveX
Cambiado
- El JSON del grafo de objetos conserva los nombres binarios, las claves de diccionario, las cadenas, los flujos, las generaciones de referencia, los tipos escalares y el orden por número de objeto, sin conversiones ambiguas de JSON
Version 3.370.0
Añadido
- Un cargador compilado de modelos Arlington TSV proporciona identificadores estables y reutilizables, además de recuentos de definiciones y de reglas
- La validación sintáctica dirigida por modelo comprueba las claves de objeto, las entradas obligatorias, los tipos, la disponibilidad por versión de PDF, las referencias directas e indirectas, los valores permitidos y los grafos de objetos enlazados
- Las API de Delphi, DLL y ActiveX validan archivos o canalizaciones de validación compartidas existentes y devuelven listas de diagnóstico estructuradas
Cambiado
- La validación sintáctica reutiliza las cachés compartidas de análisis y de objetos, selecciona los enlaces ambiguos mediante discriminadores de objeto y suprime las visitas repetidas a definiciones de objetos
Version 3.369.0
Añadido
- Las canalizaciones de validación reutilizables abren y analizan un PDF una sola vez y luego ejecutan tareas PDF/A y PDF/UA o construyen informes combinados sobre el lector compartido y la caché de objetos
- Las API de Delphi, DLL y ActiveX exponen la creación de canalizaciones, la ejecución de tareas, la generación de informes, la inspección del recuento de análisis y la liberación explícita
Cambiado
CreatePreflightReportyCreateValidationReportcomparten un único análisis y una caché diferida de objetos cuando se seleccionan varias comprobaciones de conformidad
Version 3.368.0
Añadido
AddStructureNamespaceregistra espacios de nombres de estructura de PDF 2.0 y escribe diccionarios/Namespacecompartidos a través deStructTreeRoot/NamespacesAddRoleMapNSasigna tipos de estructura personalizados dentro de un espacio de nombres o entre los espacios de nombres registrados- Los selectores de espacio de nombres predeterminado y por elemento, las consultas de espacios de nombres, las exportaciones DLL y los métodos ActiveX exponen el flujo de trabajo completo
Cambiado
- Los modos de accesibilidad PDF/UA-2 y WTPDF asignan automáticamente el espacio de nombres de estructura estándar de PDF 2.0 a los elementos de estructura existentes y futuros sin asignar
GetStructTreeItemTextresuelve las cadenas/RoleMapNSy devuelve el URI del espacio de nombres del elemento mediante InfoID 9
Version 3.367.0
Añadido
SetPDFUA2Modeactiva los metadatos PDF/UA-2, el versionado PDF 2.0, el idioma del documento, las salvaguardas de contenido marcado y las preferencias de visualización del títuloSetWTPDFModedeclara el nivel de accesibilidad WTPDF 1.0, el nivel de reutilización o ambos, conservando las PDF Declarations no relacionadas- Los descriptores de acceso de Delphi, DLL y ActiveX exponen la parte PDF/UA activa y la máscara de declaración WTPDF
Cambiado
- Los diagnósticos PDF/UA reconocen la parte 2, exigen
pdfuaid:rev=2024y aplican la versión mínima PDF 2.0
Version 3.366.0
Añadido
SetCryptFilterConfigurationselecciona de forma independiente el cifrado de las cadenas PDF, los flujos ordinarios y los flujos de archivos incrustados mediante/StrF,/StmFy/EFF- Los descriptores de acceso de Delphi, DLL y ActiveX exponen cada destino de cifrado pendiente, mientras que el ajuste establecido de solo archivos incrustados sigue siendo compatible
Cambiado
- El cifrado AES por contraseña, clave pública y huella usa una única política de filtros de cifrado, rechaza las configuraciones sin destino protegido e impide aplicar políticas selectivas a los gestores RC4
Corregido
- Las huellas de cifrado ahora restauran su registro de cifrado completo y guardan mediante el escritor de objetos normal, sin truncar el prefijo de la huella ni cifrar dos veces el contenido del objeto
Version 3.365.0
Añadido
- Los envoltorios no cifrados de PDF 2.0 pueden portar un PDF completo cifrado como documento inicial oculto de la colección, con los metadatos estándar de carga cifrada
- Las API de Delphi, DLL y ActiveX crean, identifican, inspeccionan y extraen cargas cifradas desde archivos, cadenas binarias, flujos o matrices de bytes
Cambiado
- La creación del envoltorio impide el cifrado y el PDF MAC exteriores, valida los nombres de gestor, evita revelar la ruta de origen y conserva los bytes de la carga exactamente
Version 3.364.0
Añadido
TPDFlibEUTSLTrustSourceverifica las firmas XML de la LOTL de la UE y de las TSL nacionales, expone instantáneas de servicios de confianza y suministra anclajes CA y TSA conscientes del tiempoTPDFlibSignatureVerifieracepta orígenes de confianza externos e informa del estado de certificado cualificado, firma electrónica, sello electrónico y QSCD, con la procedencia del servicio
Cambiado
- La carga de listas de confianza falla de forma cerrada ante firmantes no fijados, firmas desprendidas o ambiguas, algoritmos débiles, cambios de resumen, desajustes de territorio, listas obsoletas, criterios mal formados y entrada de red o XML sin límites
- Las actualizaciones completas de la TSL son transaccionales, mientras que los motores de cadenas de certificados combinan anclajes manuales y de origen, y los reutilizan por revisión de lista de confianza y tiempo de verificación
Version 3.363.0
Añadido
TPDFlibPKCS11Clientcarga módulos PKCS #11 2.x y 3.x, enumera tokens, autentica usuarios, empareja certificados y claves privadas, y firma resúmenes PDF sin registro en CSP ni KSP- Los tipos de token, ranura, mecanismo, tabla de funciones y retrollamada admiten tanto la carga directa de módulos como listas de funciones gestionadas por la aplicación
Cambiado
- La firma RSA construye el
DigestInfoDER requerido antes delCKM_RSA_PKCSen bruto, mientras que la firma ECDSA convierte la salida P1363 del token a DER cuando se solicita - Las vidas compartidas de módulo, las sesiones persistentes, las rutas de autenticación protegida, la autenticación por operación, los reintentos acotados de conexión en caliente y la recuperación de sesión previa a la operación mejoran la fiabilidad y el rendimiento de los HSM
Version 3.362.0
Añadido
TPDFlibCSCClientdescubre credenciales de firma remotas, obtiene datos de activación de firma ligados al hash o precargados, y envía firmas de resumen individuales o por lotes a través de la API CSC- El cliente se conecta directamente a
OnExternalDigestSign, de modo que las firmas remotas RSA y ECDSA DER reutilizan la construcción CMS existente, el dimensionado de firma y la ruta de verificación de clave pública
Cambiado
- El transporte HTTP integrado acepta cabeceras de petición suministradas por el llamador para la autenticación portadora de OAuth, conservando los límites de tamaño de respuesta y de tiempo por fase
- Las respuestas de credencial, autorización y firma ahora rechazan campos JSON duplicados o mal formados, datos X.509 o Base64 no válidos, algoritmos no admitidos, tamaños de lote inconsistentes, datos de activación obsoletos e infracciones de ligado de hash de SCAL
Version 3.361.0
Añadido
VerifyAdESHistoricalyVerifyAdESHistoricalByNamederivan automáticamente tiempos de control históricos de confianza a partir de las marcas de tiempo de las firmas y de las marcas de tiempo de documento que las cubrenTPDFlibAdESHistoricalValidationReportexpone los resultados solicitados y efectivos de la cadena, el origen y el tiempo de la prueba, la cobertura de archivo, los recuentos de marcas de tiempo y el estado específico del fallo
Cambiado
- La validación histórica de revocación falla de forma cerrada salvo que una marca de tiempo de confianza de documento completo selle la evidencia DSS y VRI vigente
- Los tiempos de validación de certificados y OCSP ahora se convierten a la hora de archivo de Windows con aritmética exacta de milisegundos enteros, evitando derivas en los límites de las transiciones de validez del certificado
Version 3.360.0
Añadido
SetSignatureFieldSeedValue,AddSignatureFieldSeedCertificateyClearSignatureFieldSeedValuecrean y gestionan restricciones/SVestándar para campos de firma sin firmarGetSignProcessSeedValueErrorinforma del filtro, SubFilter, resumen, motivo, información de revocación, certificado, versión o restricción no admitida exactos que impidieron firmar
Cambiado
- La firma ahora aplica los seed values obligatorios del campo de firma después de abrir la identidad seleccionada y antes de modificar el campo o el destino de salida
- Las restricciones de seed value obligatorias no admitidas fallan de forma cerrada, mientras que los valores permitidos delimitados por punto y coma y los certificados DER exactos del firmante se aplican de forma coherente en las API de Delphi, DLL y ActiveX
Version 3.359.0
Añadido
AddSignProcessRevocationCRLyAddSignProcessRevocationOCSPincrustan material de validación en el atributo firmadoadbe-revocationInfoArchivalpara las firmas tradicionalesadbe.pkcs7.detachedClearSignProcessRevocationInfoelimina todo el material de revocación de archivo de un proceso de firma antes de producir la firma
Cambiado
- Los valores
BasicOCSPResponsedesnudos se normalizan a estructurasOCSPResponsecorrectas, y las CRL idénticas a nivel de bytes y las respuestas OCSP normalizadas se deduplican - Los atributos de archivo de revocación de Adobe son compatibles tanto con la ruta de Windows CryptoAPI como con las rutas modernas de firma RSA, ECDSA, Ed25519, CNG y resumen externo
Version 3.358.0
Añadido
SetSignProcessContentsEstimatedimensiona los marcadores de firma a partir del CMS base, la cadena de certificados en caché, el material CRL y OCSP previsto, un token RFC 3161 esperado y un margen de seguridad configurableGetSignProcessEstimatedContentsBytesinforma de la capacidad en bytes sin procesar, alineada, seleccionada para el intento de firma más reciente
Cambiado
- Los nuevos procesos de firma descubren automáticamente espacio adicional de cadena de certificados en las cachés locales y aplican un margen del 15 por ciento antes de alinear la capacidad de
/Contentsa 256 bytes - La firma con CNG, HSM y resumen externo ahora deriva los tamaños de firma RSA, ECDSA y Ed25519 del certificado público, en lugar de reservar una carga fija de 16 KiB del proveedor
- La estimación automática no realiza ninguna recuperación de red ni invoca una clave privada o una retrollamada de firma externa
Version 3.357.0
Añadido
SetSignProcessAppearanceTemplateconstruye diseños reutilizables de firma visible a partir de marcadores del firmante, motivo, ubicación, contacto, fecha, campo, página y definidos por la aplicaciónSetSignProcessAppearanceVariableañade valores personalizados sin distinción de mayúsculas a un proceso de firma individual y puede eliminarlos sin recrear el proceso
Cambiado
- Las plantillas de firma visible admiten formatos configurables de la hora de firma y llaves literales con escape, conservando las reglas existentes de precedencia de imagen y de marca de tiempo del documento
- La expansión de plantillas usa tamaños de entrada acotados y un búfer de salida lineal amortizado, de modo que los diseños reutilizables grandes no provocan copias repetidas de la cadena completa
Version 3.356.0
Añadido
TPDFlibSignatureVerifierpuede añadir anclajes de confianza X.509 basados en DER o en archivos, informar de su recuento sin duplicados y borrarlos sin modificar los almacenes de certificados de Windows
Cambiado
- Un conjunto no vacío de anclajes de confianza personalizados dirige tanto la validación del certificado del firmante como la de las marcas de tiempo RFC 3161 a través de un motor raíz exclusivo en memoria
- Borrar el conjunto personalizado restaura el motor de confianza del sistema predeterminado para las comprobaciones posteriores
Seguridad
- La validación con confianza personalizada excluye los almacenes
RootyTrustedPeoplede Windows, mientras que los certificados incrustados del PDF y del DSS siguen siendo material de construcción de cadena sin confianza
Version 3.355.0
Añadido
SetSignProcessExternalDigestSignery su variante de archivo construyen firmas CMS desprendidas en torno a resultados RSA o ECDSA suministrados por un firmante externoOnExternalDigestSign,DLSetExternalDigestSignCallbackySetExternalDigestSignCallbackproporcionan superficies de retrollamada síncronas en Delphi, DLL y ActiveX para integraciones HSM y firma remota- Las retrollamadas ECDSA externas pueden devolver tanto firmas DER como valores P1363
r || sde anchura fija
Cambiado
- Los firmantes externos reciben solo el resumen final de los atributos autenticados del CMS y se invocan una sola vez, cuando los intervalos de bytes del PDF y los atributos están completos
- El dimensionado del marcador usa la reserva de firma configurada sin invocar al firmante externo
- Las firmas vacías o desproporcionadas sin traspaso ahora hacen fallar el proceso de firma, en lugar de escribir un valor
/Contentsvacío o truncado
Seguridad
- Cada firma devuelta externamente se verifica contra el certificado X.509 configurado antes de poder escribirse en el PDF
Version 3.354.0
Añadido
SetSignProcessCNGKeyySetSignProcessCNGKeyFromFilefirman con claves NCrypt con nombre desde proveedores de almacenamiento de software, TPM, token de hardware o nube, sin exportar material de clave privadaSetSignProcessCNGKeyByHandleacepta unNCRYPT_KEY_HANDLEpropiedad del llamador para flujos de descubrimiento de claves y de políticas gestionados por la aplicaciónSetSignProcessPrivateKeyUIcontrola si los proveedores enlazados a certificado pueden mostrar interfaces de PIN, consentimiento, token o aprobación en la nube
Cambiado
- Las claves CNG con nombre y prestadas usan una única ruta de firma NCrypt directa para firmas RSA y ECDSA desprendidas en las familias de resumen SHA-1, SHA-2 y SHA-3
- El dimensionado del marcador de firma CNG ya no realiza una operación preliminar de clave privada, evitando avisos duplicados de token, aprobaciones remotas, entradas de auditoría o cargos del proveedor
- La firma silenciosa sigue siendo el valor predeterminado, mientras que el modo interactivo elimina los indicadores de adquisición y firma silenciosas para que los proveedores externos completen su flujo de autenticación
Seguridad
- Las identidades CNG explícitas se comprueban contra grupos de algoritmos compatibles con el certificado y la firma CMS completada se verifica contra el certificado suministrado antes de aceptarse
Version 3.353.0
Añadido
- Las firmas PDF desprendidas pueden generarse y verificarse con certificados ECDSA P-256, P-384 y P-521 usando las familias de resumen SHA-1, SHA-2 o SHA-3
- La firma Ed25519 acepta un certificado X.509 DER con una semilla en bruto o una clave privada PKCS #8 sin cifrar a través de las interfaces de Delphi, DLL y ActiveX
SetSignProcessDigestAlgorithmacepta SHA3-256, SHA3-384 y SHA3-512 como códigos de algoritmo 5, 6 y 7
Cambiado
- Las firmas desprendidas modernas usan un constructor CMS canónico con identificadores de algoritmo de resumen y de firma alineados con los estándares, en lugar de depender de identificadores elegidos por el proveedor
- La verificación de firmas modernas valida el resumen del contenido desprendido, los atributos firmados canónicos, la identidad del firmante incrustada y la firma de clave pública, sin requerir compatibilidad heredada con los algoritmos de CryptoAPI
Seguridad
- La verificación Ed25519 rechaza escalares no canónicos, codificaciones de punto no canónicas, claves de orden pequeño, identidades de certificado no coincidentes y atributos firmados modificados
Version 3.352.0
Añadido
EncryptPublicKeycrea documentosAdobe.PubSeccon AES-128 o AES-256 para múltiples destinatarios con certificado X.509, sin contraseña compartida- Los destinatarios pueden cargarse desde DER, PEM, PKCS #12 PFX, almacenes de certificados del usuario actual o del equipo local, y pueden recibir máscaras de permisos PDF independientes
- Las credenciales PFX y de almacén de certificados abren documentos cifrados con clave pública mediante las API normales de carga desde archivo, flujo y cadena
- Los recuentos de destinatarios, de grupos de permisos, el estado de autenticación y los controles del ciclo de vida de credenciales están disponibles mediante las interfaces de Delphi, DLL y ActiveX
Corregido
- La generación de la biblioteca de tipos ActiveX ahora conserva los métodos existentes de PDF/UA, PDF etiquetado, artefactos, idioma del documento y archivos asociados, anexando las API de clave pública sin desplazar las posiciones binarias de interfaz ya establecidas
DecryptFilealcanza la ruta de reescritura directa AES-256 sin un análisis previo del lector completo para los documentos cifrados ordinarios, validando aun así las señales de PDF MAC antes de reescribir el contenido protegido
Seguridad
- El EnvelopedData CMS se valida con análisis DER acotado, los grupos de permisos de destinatarios se autentican con su carga semilla cifrada, y los sobres ambiguos o mal formados se rechazan con códigos de error dedicados
- Los destinatarios que comparten los mismos permisos se agrupan en un solo sobre para reducir el tamaño de salida y el trabajo de derivación de claves, conservando el transporte de claves específico de cada certificado
Version 3.351.0
Añadido
SetPDFMACEnabledcrea tokens de integridad PDF MAC autónomos para documentos cifrados con AES-256 revisión 6 y AES-GCM, incluida la sal de derivación de clave exigida, la señal de permisos, los intervalos de bytes y los datos de autenticación CMSGetPDFMACStatusyValidatePDFMACexponen los resultados de la validación mediante las interfaces de Delphi, DLL y ActiveX
Seguridad
- Los documentos protegidos se verifican automáticamente tras la autenticación por contraseña y antes de exponer las páginas; los tokens ausentes, el DER mal formado, los algoritmos no admitidos, la cobertura incompleta, los fallos de desenvoltura de clave y los valores de autenticación alterados se rechazan con códigos de error dedicados
EncryptFile,EncryptFileExyDecryptFileahora conservan las garantías de PDF MAC en los flujos de cifrado a nivel de archivo y de descifrado validado
Version 3.350.0
Añadido
Encrypt,EncryptFileyEncryptFileExaceptan la fuerza 5 para crear documentos PDF 2.0 con cifrado autenticado AES-GCM de 256 bits, diccionarios de seguridad de revisión 7 y la declaración de extensión ISO TS 32003- El lector y las rutas de descifrado de archivo abren documentos AES-GCM y exponen el nuevo modo mediante
EncryptionAlgorithm,GetEncryptionLevelySecurityInfo
Seguridad
- Los fallos de autenticación AES-GCM ahora rechazan las cadenas o flujos alterados y hacen que
DecryptFileelimine cualquier salida parcial
Version 3.349.0
Cambiado
LinearizeFileahora ordena los grafos de objetos grandes con una pasada de fusión estableO(n log n)y recorre las dependencias indirectas con una pila de trabajo explícita, evitando el trabajo de ordenación cuadrático y un marco de llamada por objeto alcanzable
Corregido
- La sección de primera página ahora incluye los diccionarios de anotación y sus apariencias, acciones y recursos alcanzables, lo que permite a los clientes Fast Web View mostrar las anotaciones de la primera página sin recuperar objetos más allá del límite de esa página
Version 3.348.2
Corregido
- La biblioteca ahora compila sin avisos ni sugerencias en la construcción Win64. El inicializador del hash de cadenas FNV-1a superaba el rango de
Integer, por lo que su acumulador pasó aCardinalcon un resultado enmascarado idéntico byte a byte, y se eliminaron diez asignaciones que el compilador demostró que nunca se leían —más una variable sin usar—. Ningún comportamiento en tiempo de ejecución cambió
Version 3.348.1
Corregido
- El control de visor vuelve a compilar en Delphi XE5 y XE6. Su gestor de DPI por monitor usaba
WM_DPICHANGED, una constante de mensaje queWinapi.Messagesno incluía antes de XE7, por lo que la matriz de construcciones de prueba —que aún apunta a las cadenas de herramientas antiguas— se detenía enPDFlibViewer.pascon un error de identificador no declarado. La constante ahora se declara localmente solo en los compiladores que no la proporcionan, dejando intacto el tratamiento del DPI en tiempo de ejecución
Version 3.348.0
Añadido
ConvertToPDFAconvierte un documento ordinario en uno de archivo con una sola llamada: elimina lo que la parte elegida prohíbe, añade lo que la parte exige, declara la parte que el documento reclama y después comprueba el resultado- La reclamación solo se informa como cumplida cuando la comprobación pasa. Un archivo que dice ser de archivo y no lo es atraviesa justo los sistemas que de otro modo lo habrían detectado, de modo que el veredicto procede de la comprobación y no del intento
GetPDFAConversionReportenumera lo que se hizo y, donde el documento aún se queda corto, qué lo impide
Version 3.347.1
Corregido
SanitizeDocumentahora elimina de verdad el JavaScript que dice eliminar. Pedía a la lista de paquetes una entrada anterior a la primera, no obtenía nada y se detenía antes de quitar un solo script —de modo que un documento supuestamente saneado seguía ejecutando sus scripts al abrirse- Eliminar el último script ahora elimina también el árbol de nombres vacío que deja detrás, que de otro modo seguía indicando al lector que el documento llevaba scripts
Version 3.347.0
Añadido
RepairDocumentMetadatapone de acuerdo los dos lugares donde un PDF dice quién lo escribió. Un validador lee tanto la información del documento como el paquete XMP y rechaza un archivo en el que discrepen, y la mayoría de los archivos que fallan en este punto simplemente nunca llegaron a escribir la mitad XMP- Cuando solo una mitad lleva un valor, la otra se rellena a partir de ella, de modo que no se descarta nada ya registrado
- Un documento configurado en un modo PDF/A recupera su identificación de estándar si se perdió, lo que ocurre siempre que el llamador aporta un paquete propio. Sin ella, un validador lee el archivo como un PDF ordinario e informa de que no se cumple ninguna regla de la parte reclamada
- Devuelve cuántas entradas se repararon
Version 3.346.0
Añadido
RecolorDocumentahora convierte también los degradados que pinta un documento. El espacio de color del degradado y los puntos que lo componen se mueven juntos, de modo que un degradado convertido se lee como un solo color y no como un canal confundido con un nivel de gris- Los degradados escritos dentro del patrón que los pinta, o dentro de los recursos de sombreado de una página, se localizan igual que los que tienen objeto propio
Cambiado
- Un degradado construido a partir de una función de muestreo o PostScript se deja tal cual, y lo mismo ocurre con los tipos de malla, que llevan sus colores en un flujo y no en una función. Reescribirlos es una operación distinta de convertir un color
Version 3.345.0
Añadido
RecolorDocumentahora convierte una imagen indexada convirtiendo su tabla de colores, dejando que cada muestra conserve el índice que ya tenía. Una imagen así se convierte con independencia de cómo estén empaquetadas o comprimidas sus muestras, incluidas las imágenes de paleta con las que suele guardarse una captura de pantalla o un gráfico
Version 3.344.0
Añadido
RecolorDocumentahora convierte las imágenes que dibuja una página además de los colores que fija, de modo que un documento pasado a gris ya no muestra imágenes en color sobre páginas grises- Las máscaras suaves y las máscaras de plantilla se dejan intactas. Ambas se leen como cobertura y no como color, y convertir una dejaría la página mostrando la máscara como si fuera una imagen
Cambiado
- Una imagen se convierte cuando lleva ocho bits por componente, un espacio de color de dispositivo y, o bien sin compresión, o bien Flate simple. Una imagen JPEG o de fax tendría que recodificarse, lo cual es una operación distinta de convertir sus colores, de modo que esas conservan sus propios bytes
Version 3.343.0
Añadido
- Mueve un documento completo, o una sola página, a un único espacio de color.
RecolorDocumentyRecolorPagetoman 1 para gris, 2 para RGB y 3 para CMYK, y devuelven cuántos colores se convirtieron - Útil antes de enviar trabajo a una imprenta que espera un solo espacio, o para convertir en gris un documento en color sin redibujarlo. La geometría, el texto y las imágenes quedan exactamente como estaban; solo cambian los operadores de color
- Un color ya fijado en el espacio de destino se deja como está, de modo que una página cuyos colores no necesitan cambios conserva sus bytes originales
- Los colores fijados mediante un espacio ICCBased, Separation, Indexed o Pattern se dejan tal cual. Convertirlos sin leer su perfil cambiaría el aspecto de la página en lugar de conservarlo
Version 3.342.0
Añadido
- Archivado PDF/A-4, la parte del estándar construida sobre PDF 2.0.
SetPDFAModeadmite tres modos nuevos: 9 para PDF/A-4, 10 para PDF/A-4e, que además permite 3D y medios enriquecidos, y 11 para PDF/A-4f, que permite un archivo incrustado de cualquier formato - Un documento de parte 4 se identifica como pide el estándar: por número de parte y por el año de publicación de esa parte, sin letra de conformidad para el PDF/A-4 simple y con la letra E o F para las dos extensiones
- Cada archivo incrustado de un documento de parte 4 declara su relación con el documento, como exigen tanto la parte 3 como la 4
Cambiado
- La comprobación PDF/A reconoce la parte 4, juzga sus archivos contra PDF 2.0 en lugar de 1.7, e informa de un archivo de parte 4 que no declara su año de revisión
Version 3.341.2
Corregido
- Los documentos PDF/A-3 y PDF/UA ahora declaran cómo se relaciona cada archivo incrustado con el documento. La relación solo se escribía para los adjuntos posteriores al primero y nunca para el último, de modo que un documento con un único adjunto —el caso ordinario— no llevaba ninguna y fallaba la validación por ese punto
- El informe PDF/UA ya no pasa por alto el último archivo incrustado al comprobar que la relación está presente
Version 3.341.1
Corregido
- La comprobación PDF/A ahora lee la marca de estándar que lleva un archivo. No podía, así que todo archivo se juzgaba contra la parte 1 declarara lo que declarara: un documento PDF/A-2 o PDF/A-3 válido se informaba como sin marca y con una versión demasiado alta, que es lo contrario de la verdad
- La marca se lee tanto si el productor la escribió como elemento como si lo hizo como atributo. Ambos son XMP ordinario, de modo que aceptar una sola forma dejaba a los archivos de otros productores con aspecto de no llevar marca
Version 3.341.0
Corregido
- El texto vertical ahora usa la forma vertical de cada carácter. Los corchetes, la marca vocálica larga y los kana pequeños se dibujan de otra manera cuando el texto corre hacia abajo por la página, y la propia fuente nombra esas formas; hasta ahora se dibujaban las horizontales, lo que dejaba los corchetes tendidos a través de la columna en lugar de ir a lo largo de ella
- Las formas se toman de la característica vertical de la propia fuente, de modo que cada cara aporta lo que dibujó su diseñador y no una sustitución adivinada a partir del carácter
GetVerticalTextHeightmide las formas que se van a dibujar, de modo que una columna cuyos caracteres cambian de forma sigue midiéndose correctamente- Una cara que no nombre formas verticales se dibuja exactamente igual que antes
Version 3.340.0
Añadido
- Escritura vertical, para texto japonés y chino compuesto hacia abajo por la página.
SetVerticalWritingModela activa y las llamadas ordinarias aDrawTextcorren entonces hacia abajo;GetVerticalWritingModelo informa. Antes, poner texto en vertical significaba colocar cada carácter a mano - El texto dibujado así pasa por una fuente Type0 en modo de escritura vertical que lleva las métricas verticales de la propia cara, de modo que el lector avanza cada carácter la distancia que su diseñador previó y no un paso uniforme, y copiar el texto devuelve los caracteres originales
- Una cara que no lleva métricas verticales propias avanza un em por carácter, que es lo que haría un lector con el valor predeterminado
GetVerticalTextHeightinforma de hasta dónde correrá una cadena por la página antes de dibujarla, yDrawVerticalTextdibuja una ejecución en vertical sin cambiar el modo- Las formas horizontal y vertical de una misma cara se mantienen separadas, de modo que una página puede llevar ambas sin que una moleste a la otra
Version 3.339.0
Añadido
- El etiquetado automático ahora cubre las tablas. Con el nuevo bit de tabla activado,
DrawTableRowslleva la tabla, sus filas y sus celdas al árbol de estructura, de modo que un lector puede decir en qué columna está un valor en lugar de leer la tabla entera como una secuencia de texto sin relación SetTableHeaderRowCountfija cuántas filas iniciales son encabezados, yGetTableHeaderRowCountlo informa. Esas filas se escriben como celdas de encabezado con un ámbito de columna, que es lo que permite a un lector nombrar el rótulo del valor en que se encuentra- Las filas de encabezado designadas así se quedan donde están. Repetirlas al principio de cada página sigue siendo una decisión de maquetación que se toma con
DrawTaggedTableRows
Cambiado
AUTOTAG_DEFAULTahora cubre las tablas además del texto, el moblaje de página y las figuras. Pasar el modo como número conserva lo que siempre significó
Version 3.338.0
Añadido
- El etiquetado automático ahora cubre las imágenes. Con el nuevo bit de figura activado, una imagen dibujada se convierte en una figura del árbol de estructura, de modo que un lector la alcanza en lugar de pasar sobre ella en silencio
RegisterFigureaporta la descripción que llevará la siguiente imagen. Un lector lee esa descripción en lugar de la imagen, que es todo lo que un lector sin visión obtiene de ellaRegisterDecorationdeclara que la siguiente imagen es una línea, un borde o un fondo sin significado, y se dibuja dentro de un artefacto de maquetación para que el lector la salte en lugar de anunciar una imagen que no dice nada- Ambos ajustes se consumen en una sola imagen, de modo que una posterior nunca hereda una descripción pensada para una anterior
Cambiado
AUTOTAG_DEFAULTahora cubre las figuras además del texto y del moblaje de página, de modo que pedir el valor predeterminado es pedir las tres cosas. Pasar el modo como número conserva lo que siempre significó- Un encabezado registrado con
RegisterHeadingahora espera al texto que nombra. Una imagen dibujada en medio se convierte en figura y deja el encabezado para el texto que sigue, en lugar de quedarse ella el nivel de encabezado
Version 3.337.1
Corregido
- Un documento construido solo con
BeginTagahora queda marcado como etiquetado. Hasta ahora ese archivo llevaba un árbol de estructura completo que ningún lector miraba, porque un lector considera que un documento no está etiquetado salvo que el catálogo diga lo contrario (ISO 32000-1 §14.7.1); la tecnología de asistencia anunciaba la página como si no tuviera estructura alguna - La marca solo se añade cuando de verdad se escribe un árbol de estructura, de modo que un documento sin etiquetas sigue informándose como no etiquetado, y un ajuste de
SetMarkInfohecho por el llamador se deja tal como está
Version 3.337.0
Añadido
- Etiquetado estructural automático.
SetAutoTagModeactiva un modo en el que el dibujo ordinario lleva su propia estructura: el texto se convierte en párrafo, el texto dibujado justo después deRegisterHeadingse convierte en un encabezado de ese nivel, y los encabezados y pies corridos se convierten en artefactos que el lector salta. Antes, producir un documento accesible significaba envolver a mano cada llamada de dibujo enBeginTagyEndTag - Activar el modo marca también el documento como etiquetado, algo que un lector necesita antes de dar la estructura por presente
- El etiquetado automático se aparta dentro de una etiqueta abierta a mano, de modo que parte de un documento puede describirla el llamador y el resto dejarlo a la biblioteca, sin que ambos se aniden entre sí
- Dentro de un artefacto no se etiqueta nada, y el texto vacío no abre ningún elemento, de modo que ninguno de los dos puede producir un elemento de estructura que un lector anunciaría en blanco
Version 3.336.0
Añadido
- Flujo de texto, para pasar un mismo pasaje por varias cajas, columnas o páginas.
NewTextFlowtoma el texto yDrawTextFlowllena una caja con todo lo que cabe, dejando el flujo en la primera palabra que no pudo tomar, de modo que la siguiente caja continúa exactamente allí MeasureTextFlowinforma de cuántas líneas necesita el texto restante a una anchura dada sin dibujar nada, de modo que una maquetación puede dimensionarse antes de comprometerse con ella- Una caja sin sitio para una línea no toma nada y deja el flujo intacto, de modo que ofrecer una nunca pierde texto
SetTextFlowMinLinesmantiene juntas un número fijo de líneas: una caja que solo pudiera tomar menos no toma ninguna y las empuja hacia delante, en lugar de dejar huérfana una sola línea al pie de una columnaGetTextFlowRemaining,TextFlowFinishedyRewindTextFlowinforman del progreso y lo reinician; antes, dibujar una caja descartaba lo desbordado sin forma de saber qué se perdió
Version 3.335.0
Añadido
- Tabla de contenido automática. Los encabezados se registran con
RegisterHeadingmientras se escribe el cuerpo, yDrawTOClos maqueta después: cada entrada sangrada según su nivel, una línea de puntos que alcanza un número de página alineado a la derecha, y la fila completa enlaza al encabezado - Un encabezado recuerda a dónde apunta y no qué número de página tenía, de modo que insertar la página de contenido delante del cuerpo terminado —lo que renumera todas las páginas a las que se refiere— deja intactas todas las entradas y todos los enlaces
MeasureTOCinforma de cuántas páginas necesita la lista antes de dibujar nada, yDrawTOCdevuelve cuántas entradas colocó, de modo que una lista más larga que una página se dibuja llamando de nuevo con el recuento ya colocadoPopulateOutlineFromHeadingsconvierte los mismos encabezados en marcadores del documento, anidados por nivel- Un título demasiado ancho para el espacio que deja su número de página se acorta un carácter cada vez y recibe puntos suspensivos, en lugar de permitírsele correr por debajo del número
Version 3.334.1
Corregido
- Seleccionar una página después de insertar páginas por delante alcanzaba la página que tenía ese número antes de la inserción, de modo que dibujar páginas preliminares en un documento existente podía escribir sobre la página del cuerpo equivocada. La selección de página ahora sigue la numeración nueva
Version 3.334.0
Añadido
GetSignatureModificationVerdictresponde a la pregunta que un lector de verdad se hace sobre un documento firmado: ¿las actualizaciones anexadas tras esta firma son de las que su nivel de certificación permite? Una firma certificadora lleva un nivel de permisos, y el veredicto comprueba contra él cada revisión posterior, de modo que añadir material de validación se lee como permitido mientras que reescribir una página noGetSignatureEffectiveMDPLevelinforma del nivel vigente yGetSignatureModificationDetailnombra la revisión y la clase de cambio que hay detrás de la respuesta- El veredicto distingue "no se anexó nada", "solo cambios permitidos", "algo no permitido", "no pudo determinarse" y "la firma no termina en un límite de revisión". Esta última significa que hay bytes dentro del intervalo que la firma dice cubrir
- La duda nunca se informa como aprobación: una certificación cuya estructura no pudo verificarse, un bloqueo de campos cuyos campos afectados no pueden rastrearse, una revisión que contiene algo ilegible, o bytes más allá del intervalo firmado que no forman ninguna revisión reconocible, todo ello se informa como indeterminado y no como permitido
Cambiado
- Una matriz indirecta que nada justifica ahora se informa como indeterminada y no como contabilidad. La lista de anotaciones o de contenido de una página es una matriz, y reescribirla cambia lo que el documento muestra dejando intactos todos los diccionarios
Version 3.333.0
Añadido
- Inspección de revisiones incrementales. Una firma cubre los bytes de la revisión en la que se escribió, y todo lo que se añade después es una actualización separada cuyo contenido decide si la firma sigue valiendo para el documento tal como está ahora.
GetDocumentRevisionCount,GetDocumentRevisionStartyGetDocumentRevisionEnddisponen esas revisiones, yGetSignatureRevisionIndexindica en cuál termina una firma GetDocumentRevisionKindinforma de lo que hizo una actualización, como lo más amplio de los objetos que tocó: contabilidad, material de validación, un sello de tiempo del documento, una firma, un campo de formulario, una anotación o contenido del documento. Añadir material de validación para la validación a largo plazo por tanto ya no parece editar el documentoGetDocumentRevisionChangesenumera cada objeto que una actualización añadió, cambió o eliminó, junto con qué es cada uno y, para un diccionario cambiado, qué claves difieren realmenteGetDocumentRevisionsCompleteinforma de si todo el historial era recuperable. Una cadena rota, cíclica o más larga de lo que el lector seguirá deja las actualizaciones más antiguas sin ver, y los conteos son entonces un límite inferior en lugar de una respuesta- Un objeto cuya versión anterior no se puede leer, o cuyo cuerpo de flujo nunca se comparó, se notifica como indeterminado en lugar de como inofensivo: una actualización que reescribe una página dejando intacto su diccionario no se confunde con un reempaquetado
Version 3.332.0
Añadido
ApplyPAdESLongTermValidationpromueve un PDF ya firmado a PAdES-B-LT en una sola llamada. Construye el camino de certificados del firmante a partir de la propia firma, recopila material OCSP y CRL para cada eslabón a través de las direcciones que indican los certificados y escribe los certificados y los datos de revocación en el document security store con una entrada VRI para la firma, en una única actualización incremental.ApplyPAdESLongTermValidationToStreamescribe el resultado en un flujo en lugar de un archivo- El comportamiento es configurable mediante una máscara de opciones
PADES_LTV_*: si escribir la entrada VRI, si consultar a los respondedores OCSP, si recurrir a las CRL, si seguir las direcciones del emisor para completar el camino y si omitir la revocación para una raíz autoemitida - Un nombre de campo vacío procesa cada firma en una sola revisión; un campo con nombre procesa solo ese
GetPAdESLTVCertificateCount,GetPAdESLTVCRLCount,GetPAdESLTVOCSPCountyGetPAdESLTVErrorinforman de lo que reunió la última llamada y de por qué se detuvo antes, de modo que un resultado parcial sobre un respondedor inalcanzable es visible en lugar de silencioso- El material idéntico a algo ya preparado se escribe una sola vez y lo referencia cada firma que lo necesita, y una firma que no porta ningún certificado legible se notifica en lugar de hacerse pasar por una promoción correcta
Version 3.331.0
Añadido
- Una firma lleva su propio camino de certificación, de modo que el material que necesita un perfil de validación a largo plazo puede leerse únicamente del archivo firmado.
GetSignatureSignerCertificateDER,GetSignatureEmbeddedCertificateCountyGetSignatureEmbeddedCertificateDERdevuelven los certificados que una firma incrusta, yGetSignatureCertificateChainLengthyGetSignatureCertificateChainDERlos ordenan en un camino desde el firmante hacia afuera GetSignatureContentsHashHexdevuelve la clave con la que se direcciona una entradaAddPAdESDSSVRI, calculada a partir de la propia firma- El certificado del firmante se identifica tanto si la firma lo designa por emisor y número de serie como por identificador de clave de sujeto, y un camino se detiene en el último emisor que la firma realmente porta en lugar de fingir estar completo
Corregido
- El lector DER rechaza una longitud de elemento declarada mayor que los datos en lugar de dejar que un valor casi máximo desborde su comprobación de límites, y el recorrido de las extensiones del certificado ya no lee más allá del final de un certificado truncado o demasiado largo. Ambos son alcanzables desde un documento manipulado, por lo que los descriptores anteriores siguen siendo seguros con entrada no fiable
- Los descriptores de firma leen el documento con un identificador compartido, de modo que responden mientras un verificador o visor ya tiene el archivo abierto, en lugar de fallar como si la firma estuviera ausente
Version 3.330.0
Añadido
- Solicitudes de estado OCSP.
BuildOCSPRequestcodifica una solicitud RFC 6960 para un certificado y su emisor,FetchOCSPResponsela envía al respondedor y devuelve la respuesta, yAddPAdESDSSOCSPFromCertificatesrealiza ambas operaciones y archiva el resultado en el almacén de seguridad del documento - La dirección del respondedor es opcional: si se omite, se utiliza la indicada por el propio certificado, por lo que quien ya disponga de la cadena de certificados no necesita ninguna configuración adicional
- Los pares de certificados que no se corresponden se rechazan antes de enviar nada, en lugar de generar la respuesta "unknown" que el respondedor devolvería para una solicitud así y que podría interpretarse como un problema de revocación
- Solo se almacena una respuesta correcta; si el respondedor contesta
tryLaterounauthorized, el error se comunica medianteGetTimeStampErroren vez de archivarse como si fuera una respuesta de estado
Version 3.329.0
Corregido
- La reutilización de una matriz de resultados en llamadas de enumeración sucesivas ya no pierde las cadenas de las posiciones que una llamada posterior deja sin rellenar. El problema afectaba al patrón documentado "llamar una vez para obtener el recuento, redimensionar y volver a llamar" cuando una llamada posterior devolvía menos elementos que la capacidad de la matriz; el texto abandonado se acumulaba durante toda la vida del proceso
- Los puntos de entrada afectados incluyen
EnumPageContentStates,EnumPageContentStatesEx,EnumAttachments,EnumDocumentFonts,EnumPageElements,EnumNamedDestinations,EnumSignatures,EnumFormFields,GetFormValues,GetTextInAreaExy las llamadas de búsqueda de texto, acciones de campos de formulario y enumeración de certificados
Cambiado
- El parámetro de matriz de resultados de esas llamadas se pasa ahora como
varen lugar deout. El código existente para Delphi y C++Builder compila y enlaza sin cambios; la única diferencia visible es que las posiciones posteriores al recuento devuelto conservan su contenido anterior en vez de vaciarse de forma silenciosa
Version 3.328.0
Añadido
- Los certificados indican ahora dónde puede comprobarse su estado:
GetCertificateOCSPURLs,GetCertificateIssuerURLsyGetCertificateCRLURLsleen del certificado las direcciones del respondedor, del certificado emisor y de la CRL, por lo que ya no es necesario saber dónde publica cada autoridad para reunir material de validación a largo plazo FetchRevocationMaterialdescarga material desde esas direcciones, mientras queAddPAdESDSSCRLFromURLyAddPAdESDSSCertificateFromURLlo descargan y archivan en el almacén de seguridad del documento en una sola operación- Las direcciones que no identifican un recurso descargable, como un nombre de directorio o una dirección de correo, se omiten en vez de presentarse como contenido disponible para descarga
Version 3.327.0
Añadido
- Cliente RFC 3161 de sellado de tiempo integrado.
SetTimeStampServerySetTimeStampOptionsconfiguran la autoridad, el algoritmo hash, la política solicitada, el uso de nonce y el tiempo de espera;FetchTimeStampTokendevuelve un TimeStampToken para cualquier resumen ApplyPAdESSignatureTimeStampcompleta una firma PAdES-B-T en una sola llamada: calcula el hash del valor de firma, obtiene el token de la autoridad configurada y lo adjunta como atributo de sello de tiempo de la firma, sustituyendo el intercambio de tres pasos que antes debía implementar quien llamaba- Cuando se utiliza un nonce, se comprueba que el token devuelva el mismo valor, de modo que las respuestas repetidas o sustituidas se rechazan en vez de incrustarse en el documento
GetTimeStampStatusyGetTimeStampErrorinforman del ‘estado y texto de error propios de la autoridad', por lo que una solicitud rechazada explica el motivo
Version 3.326.0
Añadido
- El renderizador PDFium escribe ahora los mismos formatos de imagen que los renderizadores GDI+ y Cairo.
RenderPageToFile,RenderPageToStreamyRenderPagesToFilesaceptan BMP (opción 0), JPEG (1), PNG (5), GIF (6), TIFF (7) y G4 TIFF (10) después deSelectRenderer(3), en lugar de aceptar únicamente BMP - La calidad JPEG establecida mediante
SetJPEGQualityy la configuración activa de compresión TIFF se aplican también a la salida de PDFium, por lo que cambiar de renderizador ya no altera la codificación del archivo generado
Corregido
- La solicitud de PNG o de cualquier otro formato distinto de BMP al renderizador PDFium devolvía 0 y dejaba un archivo vacío. Las aplicaciones que permitían elegir renderizador producían silenciosamente una salida ilegible cuando se seleccionaba PDFium
- Al solicitar al renderizador PDFium un formato de metarchivo que no puede generar (WMF, EMF, EPS, EMF+ o HTML5),
LastRenderErrorindica ahora los formatos disponibles en vez de presentar BMP como la única opción
Version 3.324.0
Cambiado
- El renderizador PDFium proporciona ahora el documento al motor mediante un origen de datos en flujo en lugar de un búfer residente. Antes, el renderizado y la impresión serializaban el documento y volvían a copiarlo en una cadena, por lo que cada página consumía en memoria el doble del tamaño del documento; esa copia se ha eliminado y PDFium lee únicamente los bloques que necesita
- Al renderizar un intervalo de páginas en archivos, el documento se analiza una sola vez para todo el lote y no una vez por página, de modo que un intervalo largo ya no vuelve a leer el archivo completo por cada imagen generada
- Las versiones antiguas de PDFium que no exportan el punto de entrada en flujo siguen funcionando sin cambios mediante la ruta en memoria
Corregido
- La prueba rápida del renderizador buscaba las bibliotecas opcionales PDFium y Cairo un directorio por encima de su ubicación y omitía silenciosamente ambos motores; ahora las encuentra y ejecuta las rutas de renderizado reales
Version 3.323.0
Añadido
CreateValidationReportySaveValidationReportproducen un informe de validación PDF/A y PDF/UA-1 estructurado en XML o JSON. Cada hallazgo incluye el identificador de regla, el estándar que la posee, un nombre de regla corto, la cláusula ISO que aplica, una severidad y el número de objetos afectados, y el informe se cierra con estadísticas de aprobado/fallado por estándar y a nivel de documento- Un estándar que no se solicitó se notifica como
not-checkeden lugar de como una aprobación silenciosa, de modo que una ejecución parcial no se pueda confundir con un certificado de salud limpio - Las pipelines de compilación ahora pueden filtrar por un identificador de regla o una cláusula ISO en lugar de comparar subcadenas en el texto: la familia de informes preflight genera primero un informe humano y convierte ese texto a JSON, HTML o CSV, mientras que el informe de validación se ensambla a partir de la salida de comprobación en bruto y mantiene intactos los campos legibles por máquina
Version 3.322.0
Añadido
- La referencia ahora documenta los cuatro tipos públicos declarados externamente usados en la superficie
TPDFlibque antes no tenían página dedicada:TPDFlibProgressEvent,TPDFlibLogger,TPDFlibCertificateInfoyTPDFlibWatermarkBase, completando la cobertura de tipos públicos de evento, logger, resultado de enumeración y marca de agua
Version 3.321.0
Añadido
CheckDocumentPolicyevalúa reglas internas declarativas comoFonts.NotEmbedded = 0,Security.Encrypted = nooDocument.Pages <= 500contra el documento y notifica cada regla como aprobada o fallida con el valor real, convirtiendo una puerta de ingesta para editores, archivos e imprentas en configuración en lugar de código de inspección escrito a mano
Version 3.320.1
Corregido
- Dibujar texto en un modo PDF/A sin cargar primero una fuente ya no falla: PDF/A exige que cada programa de fuente esté incrustado, por lo que el atajo implícito a una fuente integrada se rechazaba y no quedaba ninguna fuente seleccionada, y
DrawTexty las demás llamadas de texto se colgaban en lugar de dibujar - La ruta de fuente implícita ahora resuelve una fuente real incrustable mientras un modo PDF/A está activo, de modo que el texto dibujado sin una llamada
AddTrueTypeFontexplícita se incrusta y sigue siendo conforme; una llamada directa aAddStandardFontsigue rechazándose bajo PDF/A - En hosts donde no se pueda resolver ninguna fuente incrustable, el dibujo recurre a las métricas integradas en lugar de fallar y notifica la carencia de conformidad mediante
LastErrorCode605, de modo que el archivo pueda interceptarse antes de publicarse como conforme
Version 3.320.0
Añadido
GetDocumentFeatureReportdevuelve un informe de características estructurado en una sola llamada — metadatos del documento, recuentos de páginas y objetos, estado de cifrado, inventarios de fuentes e imágenes, etiquetado y esquemas, campos de formulario, firmas, adjuntos y el desglose de bytes por categoría — sustituyendo la docena de consultas separadas que una pipeline de catalogación o ingesta tenía que ensamblar antes
Version 3.319.0
Añadido
SetCollectionView,AddCollectionField,SetCollectionSortySetCollectionItemValueconstruyen portafolios PDF sobre los adjuntos existentes, de modo que un conjunto de archivos incrustados se presenta como un paquete navegable con sus propias columnas, orden de clasificación y valores por archivo en lugar de como una simple lista de adjuntosGetCollectionViewyGetCollectionFieldCountnotifican el modo de presentación y el número de columnas declaradas de un portafolio cargado
Version 3.318.1
Corregido
- La opción de extracción de texto 12 (ignorar texto rotado) ahora descarta las secuencias rotadas hacia donde giren: un cuarto de giro en sentido horario y un cuarto de giro en sentido antihorario se trataban de forma distinta, por lo que las notas marginales laterales se descartaban en una dirección y se devolvían en la otra
- La misma opción conserva el texto inclinado que solo está cortado, como una itálica sintética, y la tolerancia ahora escala con el tamaño del texto y la transformación de página, de modo que los grandes titulares inclinados ya no se descartan como si estuvieran rotados
Version 3.318.0
Añadido
DecodeAllStreamsexpande los flujos comprimidos de un documento in situ, de modo que guardarlo produce una copia cuyos flujos de contenido, metadatos y estructura pueden leerse directamente con herramientas de diff, revisión forense y flujos de trabajo de soporte; las imágenes, los flujos de predicción y los flujos de referencia cruzada conservan su codificación, y los flujos de objeto se materializan primero para que no se pierda nada
Version 3.317.0
Añadido
SetTrappedyGetTrappeddeclaran y leen el estado de trapping del documento que PDF/X exige, escrito como el nombre/Trappedque la especificación requiere en lugar de como una cadena de textoSetOutputIntentSubtypeyGetOutputIntentSubtypereetiquetan el output intent, de modo que un perfil de color cargado puede describir una condición de impresiónGTS_PDFXen lugar de la condición de archivadoGTS_PDFA1que los modos PDF/A crean
Version 3.316.0
Añadido
SetEncryptEmbeddedFilesOnlyyGetEncryptEmbeddedFilesOnlyrestringen el cifrado AES a los archivos incrustados: el documento se abre y se renderiza en cualquier lector sin petición de contraseña mientras sus adjuntos siguen cifrados, el arreglo estándar para facturas, historiales médicos y expedientes cuyas páginas de portada son públicas pero cuya carga útil no lo es
Version 3.315.0
Añadido
- La opción de extracción de texto 18 rota las secuencias pintadas a 90, 180 o 270 grados al marco de lectura horizontal y agrupa cada cuarto de giro por separado, de modo que las notas marginales rotadas, las cabeceras de tabla y las etiquetas de ejes de gráficos se extraen como líneas legibles en lugar de entrelazarse con el texto vertical o descartarse
Corregido
DASetTextExtractionOptionsacepta la opción 16 (eliminación de guion) y la opción 17 (división de palabras por hueco de caracteres) en lugar de rechazarlas, y la ruta de extracción de acceso directo ahora reenvía las opciones 15, 16 y 17 al extractor, de modo que la eliminación de reglas de subrayado, la eliminación de guion y la división por hueco de caracteres se aplican a los manejadores de archivo igual que a un documento cargado
Version 3.314.0
Añadido
GetFontHasToUnicodenotifica si la fuente seleccionada lleva una correspondencia Unicode, y el inventario de fuentes gana un campoHasToUnicodecorrespondiente por fuente además de un resumenNoToUnicodeCount, de modo que los documentos pueden comprobarse en busca de fuentes seguras para extracción y convertibles a PDF/A-*u o PDF/UA antes del procesamiento
Version 3.313.0
Añadido
SetPDFAModegana el modo 8 para PDF/A-2u (ISO 19005-2 Level U), el nivel de conformidad que declara correspondencias de texto Unicode sin permitir archivos incrustados, completando la familia PDF/A-2 junto a los modos 2b y 2a existentes
Version 3.312.0
Añadido
GetObjectByPathyGetObjectByPathCountleen cualquier nodo del árbol de objetos mediante expresiones de ruta comoRoot/Pages/Kids[0]/MediaBox[2]opages[0]/Type— tipos, valores escalares, formas serializadas y recuentos de elementos en una llamada, sustituyendo el recorrido de objetos escrito a mano para sondeos de metadatos, comprobaciones de conformidad puntuales y diagnósticos de soporte
Version 3.311.0
Añadido
SetBlackPointCompensationdeclara la compensación de punto negro (ON, OFF o Default) para el dibujo posterior mediante el estado gráfico/UseBlackPtCompde PDF 2.0, permitiendo a las salidas de preimpresión y pruebas fijar conversiones ICC de tonos oscuros que antes eran privadas del visor; la versión del documento se eleva automáticamente y los modos PDF/A rechazan el estado
Version 3.310.0
Añadido
SetCompressionLevelyGetCompressionLevelexponen el nivel deflate para cada compresión que realiza la biblioteca: 0 mantiene el motor acelerado por SIMD predeterminado, 1 favorece el rendimiento y 9 comprime los archivos al mínimoRecompressStreamsre-deflate cada flujo FlateDecode simple del documento seleccionado al nivel actual y mantiene la codificación más pequeña por flujo, reduciendo documentos que se escribieron originalmente con un ajuste de compresión rápido sin tocar su contenido
Version 3.309.0
Añadido
SetObjectStreamModeyGetObjectStreamModeañaden un control de flujo de objeto de tres estados: deshabilitar, generar (predeterminado) o preservar, donde preservar mantiene la ‘agrupación comprimida original del archivo cargado' y escribe los contenedores verbatim, haciendo que las conversiones de archivos PDF 1.5+ existentes sean más baratas porque nada se desempaqueta ni reagrupa
Cambiado
- En modo preservar, los miembros editados desde la carga se promocionan a objetos de nivel superior para que sus cambios se guarden, y cualquier miembro comprimido restante selecciona automáticamente la forma de flujo de referencia cruzada binaria
Version 3.308.0
Añadido
CheckDocumentStructureejecuta una comprobación de salud estructural en una llamada: cada objeto y flujo se fuerza a través de su decodificador, los flujos Flate simples se verifican estrictamente contra el marcador final de zlib para que se detecten los datos truncados, y el informe marca trailers ausentes, catálogos y páginas no resolubles, manejadores de cifrado no admitidos y archivos reparados por exploración de bytes con hallazgos por objeto y una línea de resumen
Version 3.307.0
Corregido
- Los documentos dañados que usan flujos de referencia cruzada ahora se reparan con éxito: la reconstrucción en bruto recupera los miembros de los flujos de objetos comprimidos y, cuando no existe ninguna palabra clave trailer en el archivo, sintetiza el trailer a partir del catálogo de documento alcanzable más reciente, de modo que un desplazamiento startxref roto ya no vuelve inabribles tales archivos
Version 3.306.0
Añadido
ExportDocumentDataescribe las claves de información del documento, todo el árbol de marcadores y los rangos de etiquetas de página como texto sin formato editable en el formato de línea dump_data clásicoImportDocumentDataaplica el mismo formato a la inversa — las claves de información se actualizan, el árbol de marcadores se reconstruye con niveles de anidamiento y páginas de destino, y los rangos de etiquetas de página se reemplazan — permitiendo la edición masiva de marcadores y la migración de metadatos entre documentos en una llamada en cada sentido
Version 3.305.0
Añadido
AuditDocumentSpacedesglosa el ‘uso de bytes del documento' por categoría — imágenes, programas de fuente y diccionarios, flujos de contenido, Form XObjects, flujos de objeto, archivos incrustados, metadatos, árbol de estructura, anotaciones, árbol de páginas y otros — con recuentos de objetos, totales de bytes y porcentajes, respondiendo a por qué un archivo es tan grande como es y qué optimización compensa mejor
Version 3.304.0
Añadido
StructTreeItemCount,GetStructTreeItemTextyGetStructTreeItemIntPropertyleen el árbol de estructura de un documento etiquetado como una lista de elementos aplanada en recorrido en profundidad — tipos de elemento (en bruto y mapeados por rol), texto alternativo y real, idioma, títulos, identificadores de contenido marcado, números de página y relaciones padre/hijo
Cambiado
- El lector del árbol de estructura se protege frente a documentos dañados: los ciclos de referencia, los números de objeto fuera de rango y los árboles anidados más allá de 64 niveles se cortan en lugar de bucle
Version 3.303.1
Corregido
- Los sellos de subcapa translúcidos creados por
StampTextyStampImageya no filtran su opacidad al contenido de página original — el estado de transparencia ahora está confinado al sello mismo, de modo que la página conserva su opacidad completa
Version 3.303.0
Añadido
OverlayDocumentPagesestampa las páginas de otro documento abierto sobre las páginas del documento seleccionado, una página de origen por página de destino, encima o debajo del contenido existente — papel membrete, fondos de página continuos y plantillas de formulario escaneadas en una llamada- El agotamiento del origen es configurable: detenerse, recorrer cíclicamente las páginas de origen o seguir repitiendo la última página de origen; una opción adicional impide que el sello se amplíe más allá de su tamaño natural
Cambiado
- Los sellos de documento se ajustan al ‘CropBox de la página de destino' y se colocan en posición vertical en las páginas que llevan una entrada
/Rotate, y cada página de origen se importa una vez como Form XObject compartido para que las plantillas repetidas nunca dupliquen sus recursos
Version 3.302.0
Corregido
- Las contraseñas AES-256 ahora se procesan con SASLprep (RFC 4013) antes del hash, de modo que las contraseñas que contienen espacios no ASCII, guiones blandos, caracteres de compatibilidad o secuencias de combinación se abran correctamente en Acrobat y otros lectores conformes
- La apertura de documentos AES-256 prueba primero la contraseña preparada estándar y recurre a la forma de bytes heredada, de modo que los archivos escritos por versiones anteriores con contraseñas no ASCII sigan abriéndose
Añadido
- El código de error 604 notifica una contraseña AES-256 rechazada por SASLprep porque contiene puntos de código prohibidos o infringe las reglas bidireccionales
Version 3.301.0
Añadido
SplitDocumentToFilesdivide el documento seleccionado en un lote de archivos de salida con un número fijo de páginas cada uno, usando un marcador de posición%ppara el nombre de archivo
Cambiado
- La división por lotes analiza el documento de origen una vez y copia cada fragmento desde la misma estructura en memoria, sustituyendo el reanálisis completo repetido que un bucle sobre
ExtractFilePagesrealiza para cada rango
Version 3.300.0
Añadido
CollateDocumentsfusiona las páginas de varios documentos abiertos en el documento seleccionado en rotación, tomando un número configurable de páginas de cada origen por vuelta (A1, B1, A2, B2, …)CollateDocumentsExacepta una lista de rangos de páginas por origen en la que los rangos descendentes como3-1invierten un origen, de modo que los pases de escáner de anverso y reverso invertido se fusionan en orden de lectura en una llamada
Cambiado
- Las fusiones intercaladas importan cada origen a través de un único mapa de objetos y entrelazan por reordenación de páginas, de modo que las fuentes e imágenes compartidas dentro de un origen se escriben solo una vez independientemente del tamaño del grupo
Version 3.299.0
Añadido
SetDeterministicDocumentIDyGetDeterministicDocumentIDcambian el identificador de archivo del trailer a un valor reproducible de modo que entradas idénticas produzcan bytes de salida idénticos para caché de compilación, almacenamiento direccionable por contenido y comparación de regresión a nivel de bytesSetDocumentIDSeedsuministra una semilla explícita para el identificador de archivo reproducible; sin una semilla el identificador se deriva de los metadatos del documento, la cabecera de versión y el recuento de páginas
Cambiado
- Los identificadores de archivo reproducibles se refrescan solo en guardados completos; las actualizaciones incrementales y los documentos cifrados conservan su identificador existente de modo que las firmas y los archivos protegidos por contraseña sigan abriéndose correctamente
Version 3.298.0
Añadido
AddLinkToArticleThreadySetOutlineArticleThreadconectan puntos interactivos de página y contornos con un hilo de artículo o bead mediante acciones Thread estándarAddActionNextArticleThreadyPDF_ACTION_BUILDER_THREADañaden acciones Thread a flujos de trabajo de acciones encadenadas, de formulario, de página y de documento
Cambiado
- Los destinos de acción Thread utilizan referencias indirectas estables de hilo y bead y rechazan índices no válidos sin cambiar el contenedor de destino
- Los constructores de acciones de campo de formulario rechazan acciones adicionales mientras el modo PDF/A está activo, preservando la prohibición PDF/A de diccionarios
/AAde campo y widget
Version 3.297.0
Añadido
- La referencia de la DLL plana
DLdocumenta ahora todos los puntos de entrada ANSI con sufijoA(char), añadiendo 353 páginas de referencia que reflejan a sus contrapartes Unicode con firmas exactas dePAnsiCharDelphi yconst char *C BufferUtilities,DirectAccessFunctionalityyMiscellaneousFunctionsse han reconstruido como páginas de índice limpias de grupos de funciones, impulsadas por el esquema de categorías compartido, corrigiendo el marcado roto, las secciones mal etiquetadas y los chips que faltaban- El índice de navegación y el índice de búsqueda compartido ahora cubren toda la superficie de la DLL tanto para llamadores Unicode como ANSI
Corregido
- Se ha eliminado la entrada obsoleta
SetLogger, que no tenía ningún símbolo coincidente en el código fuente; la propiedad documentada esLogger
Version 3.296.0
Añadido
AddAlternateImage,AlternateImageCount,GetAlternateImageInfoyRemoveAlternateImageproporcionan creación e inspección tipadas de las variantes de imagen de visualización e impresión- Las imágenes alternativas pueden asociarse a un grupo de contenido opcional o a un diccionario de pertenencia, mientras que una variante por imagen base puede seleccionarse como valor predeterminado de impresión
Cambiado
- El renderizador integrado selecciona ahora las imágenes alternativas de contenido opcional cuando una imagen base está oculta y respeta el valor predeterminado de impresión en los destinos de impresora
FindImagesregistra ahora los XObjects de imagen alternativa accesibles desde los recursos de página para que las variantes importadas reciban manejadores de imagen utilizables
Version 3.295.0
Añadido
AddArticleThreadcrea una navegación de artículos conforme a los estándares con metadatos tipados, rectángulos de página ordenados, enlaces circulares de cuentas y matrices de cuentas por páginaArticleThreadCount,GetArticleThreadInfoyGetArticleThreadBeadinspeccionan hilos de artículo creados o importados con un recorrido limitado de los ciclos de enlaces dañados
Cambiado
DeletePageselimina ahora los hilos de artículo que pierden todas las cuentas y repara los enlaces circulares de los hilos supervivientes- El seguimiento de páginas eliminadas conserva ahora referencias de página indirectas estables para que la limpieza de outline y artículos no pueda desviarse al moverse el cursor del árbol de páginas
Version 3.294.0
Añadido
SearchTextBatchbusca múltiples consultas de texto mientras cada extracción de página está residente y devuelve el índice de consulta de origen en base cero con cada coincidenciaSearchTextBatchEachproporciona la misma búsqueda en una sola pasada mediante una devolución de llamada de streaming con informe de progreso y cancelación
Cambiado
- La búsqueda de texto de consulta única y por lote comparten ahora un único núcleo de coincidencia, preservando la semántica de mayúsculas/minúsculas, palabra completa y rango de páginas al tiempo que se evita la extracción repetida de páginas, el plegado de texto y el trabajo de geometría de coincidencias
Version 3.293.1
Corregido
- La rasterización del sombreado de malla ya no falla al compilar en ninguna versión de Delphi, resolviendo
E2089 Invalid typecasten las conversiones de real a coma flotante en el painter de GDI+ - El renderizado paralelo de páginas por lote compila ahora en Delphi XE5 y XE6, donde
System.Threadingno está disponible; las cadenas de herramientas más antiguas recurren a la ruta de renderizado serie como en sistemas no Windows - La detección de capacidades de la impresora ya no genera un error de tipos incompatibles en versiones heredadas de Delphi alineando la llamada
SetPrintercon el resto del código de impresión - La enumeración del almacén de certificados se compila ahora en RAD Studio 10.3 Rio, que anteriormente abortaba con un error interno del compilador al optimizar la rutina de enumeración
Version 3.293.0
Añadido
- Los diccionarios de pertenencia de contenido opcional pueden ahora crearse, actualizarse y enumerarse con las políticas de compatibilidad
AnyOn,AllOn,AnyOffyAllOff - Las expresiones de visibilidad
/VEanidadas de PDF 1.6 admitenAnd,OryNotmediante una representación prefija compacta compartida por Delphi y C++Builder
Cambiado
- Los ámbitos de contenido opcional, los flujos de contenido, las páginas capturadas, las imágenes, los campos de formulario y las anotaciones aceptan ahora ya sea un manejador de grupo o un manejador de pertenencia
- El renderizado evalúa primero las expresiones
/VEválidas y recurre a/OCGsmás/Ppara las expresiones mal formadas o no admitidas
Corregido
- El contenido opcional anidado ya no puede hacer visible el contenido cuando un grupo o pertenencia contenedor está oculto
- Los diccionarios de pertenencia sin grupos de contenido opcional efectivos dejan ahora la visibilidad sin cambios según lo exigido por la especificación PDF
Version 3.292.0
Añadido
EnumAttachmentsinforma ahora de las fechas de creación y modificación, las sumas de comprobación hexadecimales, las relaciones de archivos asociados y los números de objeto de especificación de archivo tanto para los adjuntos de documento como de anotaciónValidateAttachmentChecksumverifica bajo demanda una carga útil de adjunto frente a su suma de comprobación almacenada, mientras que los archivos incrustados nuevos reciben ahora automáticamente metadatos de suma de comprobación
Corregido
SetEmbeddedFileAFRelationshipacepta ahora los mismos índices de archivos incrustados en base 1 que el resto de la API de adjuntos, incluidos los documentos con un solo adjunto
Version 3.291.0
Añadido
DeduplicateResourcesconsolida ahora los flujos duplicados exactos de imagen, Form, patrón, sombreado, función, perfil ICC, programa de fuente, CMap, CharProc Type 3, archivo incrustado, metadatos y PostScript en todo un documento cargado- La desduplicación de recursos proporciona indicadores de tipo independientes, análisis en seco, recolección opcional de huérfanos y estadísticas detalladas de hash, comparación, carga útil, referencia y por categoría
Cambiado
- La detección de duplicados canoniza los diccionarios de flujo completos con independencia del orden de claves, aplica hash a cada carga útil candidata una vez con SHA-256 y confirma los cubos coincidentes byte a byte antes de redirigir las referencias
- Los grupos de equivalencia exacta conservan el número y la generación de objeto más bajos para una salida determinista, mientras que los ciclos de objetos directos mal formados y las diferencias semánticas de diccionario permanecen sin fusionar
Version 3.290.0
Cambiado
PurgeUnusedResourcescalcula ahora un cierre de dependencia transitiva sobre patrones de teselado, glifos Type 3, estados de apariencia de anotación, grupos de máscara suave de ExtGState, imágenes, sombreados y espacios de color anidados- Las opciones de limpieza predeterminadas habilitan ahora el análisis de dependencias de patrón, Type 3, apariencia, máscara suave e imagen, con indicadores independientes para los llamadores que necesitan un análisis más restringido
- Los programas de contenido anidados y las entradas de dependencia se almacenan en caché, los ámbitos de recursos compartidos se privatizan antes de la poda y los ciclos mal formados están limitados por guardianes de flujo activo y de profundidad
Corregido
- Los recursos de página utilizados solo a través de espacios de color de imagen, bases Indexed, alternativas de Separation o DeviceN, espacios subyacentes de Pattern, alternativas ICCBased o diccionarios de sombreado ya no se eliminan como no utilizados
- Los recursos utilizados solo por CharProc Type 3, celdas de patrón de teselado, apariencias de anotación o grupos de máscara suave de transparencia ya no se eliminan de su propio ámbito o heredado
Version 3.289.0
Añadido
PurgeUnusedResourceselimina ahora los recursos de página con nombre que no están referenciados por las capas de contenido seleccionadas y puede devolver estadísticas detalladas por categoría- La limpieza de recursos admite ahora rangos de páginas, informe en seco, progreso y cancelación, análisis recursivo de Form XObject, eliminación de ProcSet obsoletos y recolección opcional de objetos huérfanos
Cambiado
- El análisis de recursos sigue ahora la distinción entre mayúsculas y minúsculas de los nombres PDF, los recursos de Form heredados, los espacios de color de imagen en línea personalizados y las siete categorías de recursos estándar
- Los programas de Form repetidos se almacenan en caché, los conjuntos de recursos utilizados emplean búsqueda ordenada y las entradas de diccionario se eliminan en orden descendente para un rendimiento predecible en documentos grandes
Corregido
- La eliminación de entradas de diccionario invalida ahora los índices de claves de diccionarios grandes para que las búsquedas posteriores no puedan devolver entradas obsoletas
- Los flujos mal formados y los operadores desconocidos preservan por defecto su ámbito de recursos completo, mientras que los diccionarios de recursos compartidos o heredados se clonan antes de la mutación
Version 3.288.0
Añadido
- Las firmas digitales pueden ahora emitir estructuras completas de certificación DocMDP y de bloqueo de campos FieldMDP, con informes de permisos estructurales para cada firma seleccionada
- Las marcas de tiempo de documento RFC 3161, las marcas de tiempo de firma, la inyección de tokens PAdES-B-T, la validación de cadena de certificados, la evidencia OCSP y el material de validación DSS o VRI disponen ahora de flujos de trabajo completos de creación y verificación
- Las anotaciones RichMedia admiten ahora recursos incrustados, ajustes de activación y desactivación, apariencias de póster, enumeración, extracción y eliminación
- La impresión de póster admite ahora la imposición vectorial de páginas, las marcas de solapamiento y de corte, la colocación consciente de los márgenes físicos y los planes de teselado reutilizables
- Las tablas etiquetadas emiten ahora estructura semántica de Table, TR, TH y TD con identificadores estables, asociaciones de encabezado, spans, encabezados repetidos y decoración convertida en artefactos
- El visor proporciona ahora edición de AcroForm accesible mediante teclado para campos de texto, elección, casilla de verificación, radio y botón mientras despacha acciones a la aplicación host
Cambiado
- Los sombreados de malla basados en función Type 1 y de Type 4 a 7 se renderizan ahora mediante evaluación de función nativa y teselado de malla limitado
- El renderizado de color ICCBased comparte ahora las transformaciones en caché entre imágenes y sombreados preservando el comportamiento del espacio de color calibrado
- Los guardados incrementales reconstruyen ahora los flujos de objetos y los flujos de referencias cruzadas de forma consistente, y las firmas seleccionadas se verifican frente a su propia revisión firmada
Corregido
- Las solicitudes de marca de tiempo de firma SHA-1 aplican ahora el hash al valor de firma del firmante con SHA-1 en lugar de recurrir a SHA-256
- Los reemplazos de bloqueo de campo rechazados ya no descartan una configuración de bloqueo de campo previamente válida
- Los widgets de radio con nombres de estado de apariencia duplicados preservan ahora el widget seleccionado y mantienen apagados a los widgets hermanos
Version 3.287.0
Cambiado
- Los diccionarios de imagen en línea siguen ahora los límites de comentario, delimitador, literal, hexadecimal, matriz y diccionario de PDF con anidamiento limitado
- Las cargas útiles de imagen en línea usan ahora la terminación consciente del formato para datos raw, DCT, ASCII85, ASCIIHex, RunLength y Flate
- El descubrimiento de carga útil Flate realiza ahora una descompresión limitada desde el desplazamiento del flujo de contenido con contabilización exacta de bytes comprimidos, mientras que los filtros sin pérdida encadenados comparten un techo de salida de extremo a extremo
- Los flujos ASCII85, ASCIIHex, LZW, de predictor, de perfil de color y de imagen auxiliar aplican ahora una salida intermedia limitada sin asignaciones temporales sobredimensionadas
Corregido
- Las imágenes en línea mal formadas o truncadas ya no leen más allá de los datos de origen, no entran en bucle sobre valores no terminados ni conservan estado obsoleto al reutilizar el decodificador
- Las filas de imagen empaquetada calculan ahora los bits de componente antes del redondeo de bytes, evitando longitudes incorrectas para imágenes RGB de pocos bits y de varias filas
- Los espacios de color de recursos preservan ahora sus nombres originales mientras derivan los recuentos de componentes Lab, ICCBased indirectos y DeviceN y decodifican los flujos de paleta Indexed bajo límites estrictos
- Los límites de imagen en línea rechazan ahora de forma consistente las dimensiones no válidas, las profundidades de bit, los filtros no admitidos, las cadenas de filtros no seguras, los flujos comprimidos y los marcadores de fin ambiguos
- El renderizado de color Indexed valida ahora cada acceso a la paleta y rechaza los datos de búsqueda truncados en lugar de leer más allá de la tabla decodificada
- Los predictores PNG de 10 a 15 se decodifican ahora correctamente para los flujos Flate y LZW, rechazan los filtros de fila no válidos y validan todos los tamaños de fila y de estado antes de la asignación
- Las cargas útiles JPEG y JPEG 2000 verifican ahora sus dimensiones codificadas, componentes, precisión, estructura de marcadores, longitudes de caja y huella de almacenamiento decodificado antes de la asignación de imagen
- La validación de imagen en línea limita ahora tanto el almacenamiento de mapa de bits empaquetado como expandido y acota los perfiles ICC, los globales de JBIG2 y los parámetros de filtro terminal
- Las cargas útiles de filtro binario que contienen texto de marcador de fin incrustado continúan ahora hasta el primer candidato que pasa la validación de formato limitada
Version 3.286.0
Cambiado
- La tokenización de flujos de contenido respeta ahora los límites de espacios en blanco, comentarios, delimitadores, cadenas literales, cadenas hexadecimales y nombres definidos por PDF
- La división de texto y la sustitución de recursos utilizan ahora búferes de salida con crecimiento geométrico para procesar linealmente flujos de contenido grandes
- Los procesadores reutilizables de flujos de contenido restablecen ahora la salida derivada y el estado del analizador antes de cada llamada a
Process
Corregido
- Las cadenas literales o hexadecimales mal formadas o truncadas ya no leen más allá del búfer de origen ni emiten un token vacío adicional
- La sustitución de recursos conserva ahora la distinción entre mayúsculas y minúsculas de los nombres PDF, acepta barras iniciales opcionales y actualiza de forma determinista las asignaciones duplicadas
- Los operandos XObject y de sombreado situados al principio de un flujo se excluyen ahora de la salida de texto, mientras que los operadores de restauración sin pareja ya no cancelan estados gráficos guardados posteriormente
Version 3.285.0
Cambiado
- La codificación LZW utiliza ahora búsquedas de diccionario en tiempo constante y escrituras de flujo con búfer, mientras que la descodificación emplea tablas compactas de prefijos y sufijos con crecimiento geométrico de la salida
- La descodificación de predictores Flate procesa ahora las filas directamente en el búfer de salida y admite muestras TIFF empaquetadas, de 8 bits y de 16 bits con cualquier número de componentes de color
- Los flujos Deflate almacenados se escriben ahora en un resultado preasignado con el tamaño exacto, y los envoltorios zlib liberan de forma segura los búferes temporales cuando falla la compresión o la descompresión
Corregido
- Los cambios de anchura de código LZW ahora siguen la semántica de
EarlyChangede PDF para códigos de 9 a 12 bits, incluidos los reinicios del diccionario yEarlyChange=0 - La descodificación LZW ahora rechaza los códigos futuros no válidos y los flujos de bits truncados sin leer más allá del búfer de origen
- Los predictores PNG ahora usan la anchura en bytes redondeada hacia arriba de un píxel, conservan las filas descodificadas anteriores y rellenan de forma segura una fila final parcial
- La descodificación del predictor TIFF ahora trata de forma coherente los componentes de 1, 2, 4, 8 y 16 bits tanto en las rutas LZW como Flate
Version 3.284.0
Cambiado
- Las búsquedas en búferes ahora examinan bloques fijos de 64 KiB, usan tablas de consulta de bytes para comprobar la pertenencia a conjuntos y conservan la posición del llamador en todas las rutas de búsqueda
- Las conversiones Unicode, Latin-1, de resúmenes hexadecimales y ARC4 ahora reservan una sola vez una salida limitada, en lugar de ampliar repetidamente cadenas o arrays temporales
- La codificación ASCII85 ahora lee los flujos de entrada en bloques de 32 KiB, mientras que la descodificación usa aritmética entera exacta y escribe directamente en un búfer de salida con tamaño preasignado
- El hash MD5 de cadenas ya no utiliza un flujo de memoria temporal, la comparación de resúmenes examina todos los bytes y la programación de claves ARC4 ya no asigna un array de claves expandido
Corregido
DistanceToAnyByteahora devuelve el desplazamiento correcto más allá de su primer bloque, en vez de volver a leer el mismo prefijo y contabilizar en exceso los bytes omitidos- Las lecturas de búfer respaldadas por flujos ahora respetan el número real de bytes devuelto por los flujos personalizados, reducen los resultados y avanzan las posiciones únicamente en función de los bytes recibidos
- Las reducciones de longitud del búfer ahora limitan la posición actual, y los punteros nulos o los flujos de origen nulos se comportan como entradas vacías en vez de exponer memoria no válida
- La descodificación Latin-1 ahora asigna todo el intervalo de bytes 0x00-0xFF en lugar de sustituir los bytes 0x7F-0xFF
- La descodificación ASCII85 ahora conserva el grupo máximo válido de 32 bits
s8W-!y se detiene en el primer marcador de fin sin perder precisión en los límites por el uso de coma flotante
Version 3.283.0
Añadido
TPDFlibSignatureVerifierahora puede enumerar campos de firma y firmantes CMS, abrir archivos, flujos o cadenas y verificar un campo y firmante seleccionados mediante el índice o el nombre del campo- Los informes de verificación detallados ahora separan la integridad criptográfica de la cobertura de la revisión firmada, la cobertura del archivo actual, las revisiones posteriores, la validación estricta del intervalo de Contents y los errores criptográficos nativos
Cambiado
- La validación CMS separada ahora transmite ambos segmentos de ByteRange a través de Windows CryptoAPI en fragmentos limitados, en lugar de materializar el PDF completo en memoria
- Los campos de firma situados en matrices Kids anidadas de AcroForm y las entradas
/FT /Sigheredadas ahora se enumeran con nombres completos, y se admiten diccionarios directos de valores de firma
Corregido
- La validación de ByteRange ahora rechaza el desbordamiento, el solapamiento, el truncamiento, una separación que no sea exactamente el token hexadecimal
/Contentsseleccionado y una revisión firmada que no termine en su propio%%EOF - La búsqueda de certificados ya no recurre a un certificado incrustado no relacionado cuando el identificador del firmante CMS seleccionado no coincide exactamente por emisor y número de serie
- Las actualizaciones incrementales que utilizan flujos de referencias cruzadas ahora incluyen la entrada de tipo 1 del propio objeto de flujo de referencias cruzadas, lo que evita que los validadores PDF estrictos notifiquen una entrada propia ausente tras la firma
Version 3.282.1
Cambiado
- Los guardados completos ahora reconstruyen los flujos de objetos importados a partir del grafo de objetos activo, conservan las raíces privadas del tráiler y mantienen las generaciones de objetos libres sin reutilizar números de objetos estructurales
- Los flujos de referencias cruzadas ahora dimensionan sus campos de desplazamiento para archivos grandes, preasignan su carga útil, incluyen su propia entrada y conservan las claves de extensión del tráiler
Corregido
- El empaquetado de flujos de objetos ahora escribe contenedores
/ObjStmreales y entradas de miembro de tipo 2 en vez de limitarse a cambiar a un flujo xref - La recogida de basura ya no escribe los números de objeto ausentes como entradas en uso con desplazamiento cero y ahora emite una cadena enlazada de objetos libres tanto en referencias cruzadas de texto sin formato como de flujo
- Los PDF empaquetados cargados ahora se pueden guardar repetidamente con el empaquetado activado o desactivado sin conservar flujos de objetos obsoletos, perder miembros activos ni necesitar reparar las referencias cruzadas
Version 3.282.0
Añadido
- Los colores ICCBased importados ahora utilizan el perfil ICC incrustado en la pintura vectorial, los sombreados de función y malla, las paletas indexadas, las imágenes de mapa de bits sin procesar, CCITT y JBIG2, las imágenes JPEG CMYK y las imágenes JPEG 2000
Cambiado
- Las transformaciones ICC ahora usan una tabla de consulta acotada de Windows Color System con interpolación multilineal, en sustitución del recorrido temporal de ida y vuelta por PNG empleado durante la representación de imágenes
- El motor de renderizado ahora respeta los propósitos de renderizado del flujo de contenido y del estado gráfico, el valor ICCBased
/Range, el valor/Decodede la imagen y las máscaras de clave de color del dominio original, al tiempo que valida el número de canales del perfil con el diccionario de espacio de color PDF - Los usos repetidos del mismo perfil y propósito de representación ahora comparten una tabla de consulta entre colores vectoriales, patrones, sombreados e imágenes
Corregido
- Los flujos de perfiles ICC cifrados ahora solo se descifran mientras se descodifican y se restauran después, y los perfiles incrustados ya no se comprimen dos veces al escribir la salida de imagen
Version 3.281.0
Añadido
- El representador GDI+ integrado ahora dibuja sombreados importados de PDF basados en funciones y sombreados de malla de forma libre, reticulares, de Coons y tensoriales (tipos 1 y 4-7), incluidas la transparencia y el recorte
- Los diccionarios de sombreado ahora admiten arrays Function de componentes, espacios Lab, CalGray y CalRGB calibrados, transformaciones de matiz Separation y DeviceN, rellenos Background de PatternType 2 y recorte BBox en los motores de renderizado GDI+ y Cairo
Cambiado
- Las funciones de sombreado de tipo 1 ahora usan un muestreo de color adaptativo acotado con sondas adicionales en los cuartos de celda para mejorar la precisión en detalles estrechos y reducir el trabajo en regiones constantes o suaves
- Las matrices PatternType 2 alrededor de sombreados de malla ahora se componen exactamente una vez tanto en GDI+ como en Cairo, lo que conserva la colocación trasladada, escalada y girada del patrón
- Los componentes de color de las mallas ahora se interpolan en su espacio de color de origen antes de evaluar Function y convertir a RGB, lo que conserva las funciones no lineales, los degradados DeviceCMYK y el orden correcto de las transformaciones de color gestionadas
- Las superficies de Coons y tensoriales ahora utilizan una subdivisión con error limitado de píxeles del dispositivo para obtener una salida más suave en zonas de gran curvatura con tamaños de renderizado grandes
- Los flujos cifrados de sombreado y Function se descodifican mediante las devoluciones de llamada criptográficas del documento, y los registros de vértices de tipo 5 respetan la alineación de bytes exigida
Version 3.280.1
Corregido
MergeFileList/MergeFileListFast/MergeFileListStrictfiltraban un parTSmartPDFReader/TSmartPDFDocument(y todo lo que poseen) cuando aparecía un archivo que no era PDF en la lista de combinación: el lector y el documento se construían antes del bloquetryque los libera, por lo que un fallo de análisis en el contenido del archivo mal formado dejaba huérfano el lector ya construido en vez de limpiarlo mediante el controlador de excepciones circundante; la construcción se realiza ahora dentro del bloquetryprotector tanto en las rutas de examen previo de un solo archivo como de varios- El análisis de sombreados de malla (
TPLMeshShading.Parse, tipos de sombreado 1 y 4-7) filtraba el objeto/Functiondescodificado en cada análisis: todas las rutas de salida anticipada y la finalización normal omitían liberarlo; ahora la función se libera en un bloquefinallycon independencia de cómo termineParse TPDFlibSignDoc.Closeahora establece en nil sus campos de lector inteligente, documento e información después de liberarlos, y las rutas de excepción deOpen,OpenStreamyOpenStringahora liberan cualquier objeto inteligente construido parcialmente en lugar de borrar únicamente la referencia del flujo, lo que evita una fuga cuando la apertura de un destino de firma falla a mitad del proceso
Version 3.280.0
Añadido
- Enumeración de categorías de error
TPDFlibErrorCategory(ecSuccess/ecStructure/ecSave/ecCrypto/ecGeneric/ecCompliance/ecAcroForm) añadida sobre la taxonomía numérica existente deLastErrorCode, para que los llamadores puedan clasificar los fallos sin memorizar intervalos de códigos; se expone medianteTPDFlib.LastErrorCategory,TPDFlib.ErrorCategory(Code)yTPDFlib.ErrorMessage(Code) - Códigos de error de campos de formulario 701-704 (campo no encontrado, campo de solo lectura, ausencia de AcroForm, valor no válido) con mensajes legibles, que permiten a los llamadores distinguir entre «el campo está bloqueado» y «el campo no existe» en lugar de recibir un único fallo genérico
- Variante de escritura forzada
SetFormFieldValueForcedque omite la protección de solo lectura, utilizada internamente porSetFormValues(SkipReadOnly=False)para que las importaciones masivas puedan seguir sobrescribiendo campos bloqueados cuando el llamador lo solicite explícitamente
Cambiado
SetFormFieldValueahora estableceLastErrorCodeen 701/702/703 cuando falla (campo no encontrado / solo lectura / ausencia de AcroForm) en lugar de devolver 0 sin aviso;LastErrorCategoryes una lectura no destructiva para que los llamadores puedan examinar la categoría antes de recuperar el código numérico
Version 3.279.0
Añadido
ReplacePageRangessustituye el contenido visual de las páginas por el de otro documento abierto sin cambiar el número de páginas de destino ni las identidades de sus objetos de página, y conserva los marcadores, enlaces, anotaciones y widgets de formulario ya asociados a esas páginas
Cambiado
- La copia de páginas entre documentos ya no crea y elimina una página de marcador de posición adicional antes de importar el intervalo solicitado
Version 3.278.0
Añadido
PrintPagesAdvancedaplica ajustes de copias, intercalación, impresión a doble cara, orientación, color, calidad, tamaño del papel y bandeja de entrada a expresiones de intervalo arbitrarias dePrintPages, manteniendo un único perfil de impresora y un único trabajo de impresión
Cambiado
- La configuración avanzada de impresión se valida antes de iniciar el trabajo, los valores positivos de calidad de impresión superiores a los cuatro valores preestablecidos con nombre se aplican como PPP y los identificadores de papel o bandeja de entrada pueden utilizar todo el intervalo positivo admitido por los campos
DEVMODEcorrespondientes
Corregido
- La recuperación de referencias cruzadas dañadas ahora dirige sus lecturas acotadas por bloques mediante la implementación tradicional de
TStream.Readen Win64, lo que conserva la instrumentación y el comportamiento de los flujos personalizados sin renunciar a la E/S secuencial de 64 KiB
Version 3.277.0
Cambiado
- La recuperación de referencias cruzadas dañadas ahora examina los datos de origen en bloques secuenciales de 64 KiB, en lugar de realizar una búsqueda por cada carácter coincidente, lo que mantiene limitada la memoria auxiliar al trabajar con archivos PDF grandes y flujos que no están en memoria
- La recuperación valida los tokens completos de objetos indirectos, omite los datos con apariencia de objeto dentro de comentarios, cadenas y flujos, confirma los finales de flujo mediante un token
endobjposterior, conserva las cabeceras divididas entre límites de lectura y selecciona el último diccionario de tráiler válido
Corregido
- La reconstrucción del tráiler ahora admite diccionarios anidados y texto delimitador dentro de cadenas literales, y ya no se trunca en los primeros 2048 bytes ni en el primer par
>>aparente
Version 3.276.0
Añadido
ActivateWebLinksyActivateWebLinksExexaminan una vez por página el texto existente y crean anotaciones de enlace URI no duplicadas para destinos HTTP, HTTPS,www., FTP,mailto:y direcciones de correo electrónico sin prefijo, con opciones seleccionables de detección y borde- Los enlaces generados utilizan la geometría de los caracteres coincidentes, cuadriláteros precisos para texto girado o sesgado cuando se permite, indicadores de impresión PDF/A, compatibilidad con progreso y cancelación y restauración de la página seleccionada; los documentos PDF etiquetados y PDF/UA quedan protegidos frente a actualizaciones incompletas del árbol de estructura
Cambiado
SetAutoCreateWebLinksahora usa el mismo detector con reconocimiento de límites y la misma normalización de destinos al crear enlaces para texto recién dibujado, y añade compatibilidad conwww., FTP y direcciones de correo electrónico sin prefijo
Corregido
- La actualización de las propiedades
/Contents, nombre, fecha, título o asunto de una anotación ya no sobrescribe el subtipo de un diccionario de acción existente, por lo que las acciones URI y de otros tipos siguen siendo válidas después de cambiar los metadatos de la anotación
Version 3.275.0
Añadido
ExtractPageRangeText,SavePageRangeTextToStreamySavePageRangeTextToFileextraen un intervalo de páginas analizado en un solo recorrido con separadores de página definidos por el llamador; la salida a flujo y archivo escribe datos UTF-8 de forma incremental para que los documentos grandes no necesiten un búfer de texto completo del tamaño del documentoSetPageBoxRangeyRemovePageBoxRangeaplican cambios en los límites de página mediante la sintaxis estándar de intervalos de páginas, a la vez que conservan la página seleccionada por el llamadorSetPageTransitionRangeySetPageTransitionRangeExaplican transiciones de presentación heredadas o ampliadas a intervalos de páginas, con progreso por página y posibilidad de cancelaciónGeneratePageThumbnailsrenderiza las páginas solicitadas directamente en memoria reutilizable y adjunta sus imágenes/Thumbsin archivos intermedios ni operaciones de progreso anidadas
Version 3.274.0
Corregido
- La representación GDI+ de patrones de sombreado axial ahora respeta la matriz
/Extendde PDF:SetupGDIPlusPatternpasaWrapModeClampcuando se amplía cualquiera de los extremos (como el motor Cairo), en vez de usar siempreWrapModeTile, de modo que los colores finales pintan correctamente el área situada fuera del eje del degradado
Añadido
- La burbuja de desplazamiento (
"Page N / M") que se muestra al arrastrar la barra de desplazamiento vertical ahora se oculta automáticamente tras 3 segundos de inactividad mediante un controladorWM_TIMER, por lo que ya no permanece visible hasta que otro evento de desplazamiento la cierre ZoomInStep/ZoomOutStepahora se ajustan a los porcentajes deActualSize(100 %),FitWidthyFitPagecuando quedan entre el zoom actual y el siguiente valor predefinido de la escala de 14 pasos, de acuerdo con el comportamiento de los visores de PDF profesionales- La caché de páginas en disco del visor escribe un marcador de versión de compilación (
cache.version) y borra toda la raíz de la caché cuando cambia la versión de la biblioteca, de modo que una actualización de compilación nunca reutiliza mapas de bits obsoletos renderizados por una ruta de código anterior
Version 3.273.1
Corregido
- Los objetos contenedores de flujos de objetos y de flujos xref creados durante el guardado provocaban fugas porque omitían el registro de
TPDFStructure.AddObject; ambos puntos de llamada usan ahora la fábricaNewStreamWithDictcon seguimiento de propiedad, lo que elimina la fuga deTPDFStreamindicada por el ejecutor de pruebas conReportMemoryLeaksOnShutdown - El valor
/Sizedel flujo de referencias cruzadas tenía un desfase de uno: debe ser una unidad mayor que el número de objeto más alto de todo el archivo, y el propio flujo xref es un objeto indirecto con el númeroMaxObj+1, por lo que/Sizees ahoraMaxObj+2
Cambiado
- El optimizador de mirilla de flujos de contenido ahora también elimina los operadores de matriz de texto identidad (
1 0 0 1 0 0 Tm), aplicando acmyTmla misma comprobación de identidad de seis operandos - La GC de marcado y barrido conserva el objeto 1 (el diccionario de parámetros
/Linearized) cuando el documento de origen se cargó linealizado, ya que nunca se hace referencia a ese diccionario desde/Root, pero debe conservarse
Version 3.273.0
Añadido
- El empaquetado de flujos de objetos al guardar (
TPDFDocument.PackObjectsIntoStreams) recopila objetos indirectos aptos que no sean flujos, los serializa en flujos de objetos PDF 1.5 (/Type /ObjStm) con compresión Flate y emite un flujo binario de referencias cruzadas (/Type /XRef) con entradas de tipo 0, tipo 1 y tipo 2, lo que reduce el tamaño de los archivos guardados entre un 10 y un 40 % en documentos con gran densidad de objetos - El indicador
TPDFlibSaveOptions.PackObjectStreamsy la APITPDFlib.SetPackObjectStreams/GetPackObjectStreams; está habilitado de forma predeterminada, se controla automáticamente según la versión de PDF (1.5 o posterior activa el empaquetado y los flujos xref, mientras que 1.4 o anterior conserva el xref de texto sin formato tradicional por compatibilidad) yTPDFlib.GetLastSaveUsedObjectStreamsindica si el último guardado empaquetó realmente
Version 3.272.0
Añadido
- La recolección de basura por marcado y barrido de objetos indirectos sin referencias (
TPDFDocument.GarbageCollectUnusedObjects) recorre el grafo de objetos desde las raíces del tráiler (/Root,/Info,/Encrypt) y elimina todos los objetos indirectos inaccesibles, con lo que detiene el aumento de tamaño del archivo que se acumula al eliminar páginas y dejar huérfanos sus recursos de fuentes, contenido y XObject - El indicador
TPDFlibSaveOptions.GarbageCollecty la APITPDFlib.SetGarbageCollect/GetGarbageCollectpermiten a los llamadores habilitar la GC durante un guardado completo (está deshabilitada de forma predeterminada por compatibilidad con versiones anteriores), yTPDFlib.GarbageCollectObjectsejecuta la GC inmediatamente y devuelve el número de objetos huérfanos eliminados
Version 3.271.0
Añadido
- El optimizador de mirilla de flujos de contenido (
TPDFContentPeepholeOptimizer) reescribe un flujo de contenido de página analizado antes de la compresión Flate y elimina operadores PDF semánticamente redundantes: matricescmidentidad, paresq/Qvacíos, objetosBT/ETvacíos, trazados sin efecto terminados porny sin recorte, definiciones duplicadas del estado gráfico (color, anchura de línea, extremos/uniones, patrón de guiones y estado de texto) y operadoresninservibles tras un operador de pintura; todas las transformaciones producen una salida equivalente, por lo que el resultado visible de la página no cambia - El indicador
TPDFlibSaveOptions.OptimizeContentStreamsy la API correspondienteTPDFlib.SetOptimizeContentStreams/GetOptimizeContentStreamspermiten a los llamadores habilitar o deshabilitar la reescritura de optimización local duranteCompressContent/CompressPage; está habilitada de forma predeterminada
Cambiado
TPDFDocument.CompressPageahora reenvía el indicador de optimización al árbol de páginas para que la pasada de mirilla se ejecute dentro deTPDFPageTree.Compressantes de la compresión Flate existente, combinando la reducción en el nivel de los operadores con la compresión en el nivel de los bytes
Version 3.270.0
Añadido
- El nuevo
PLParseDefaultAppearancedescodifica una cadena de bytes de apariencia predeterminada/DA(ISO 32000-2 12.7.4.3) en el nombre del recurso de fuente, el tamaño de fuente y el color de relleno, incluidos los operadores de colorrg,kyG, para que los generadores de apariencias de campos de formulario y anotaciones puedan pintar texto con el estilo previsto por el autor
Cambiado
- El ensamblaje de flujos de contenido de páginas (
TPDFRenderer.GetContents) ahora concatena matrices/Contentsde varias partes mediante unTStringBuilderen vez de repetirResult := Result + chunk, lo que elimina el crecimiento O(n^2) de las cadenas que penalizaba a las páginas con muchas partes de flujo de contenido
Version 3.269.0
Añadido
- Los nuevos
BeginMarkedContent/EndMarkedContentescriben secuencias de contenido marcado en línea con propiedades de accesibilidad (/Alt,/ActualText,/Lang,/E) directamente en la lista de propiedades BDC conforme a ISO 32000-2 14.9.2–14.9.5, para que los lectores de pantalla y las herramientas de accesibilidad puedan leer texto alternativo sin una entrada en el árbol de estructura - El lector de anotaciones expone
GetAnnotEffectiveBorder, que implementa la precedencia de la corrección n.º 287 (el diccionario de estilo de borde/BSprevalece sobre la matriz heredada/Border) y resuelve la anchura, el estilo y el patrón de guiones en una sola llamada - Los documentos de firma muestran
GetSignatureSeedValuepara leer el diccionario de valores iniciales (/SV, ISO 32000-2 12.7.5.5 Tablas 236–237): filtro obligatorio, SubFilters y métodos de resumen permitidos, de modo que un firmante pueda respetar las restricciones incrustadas por el autor GetSignatureFieldLocklee el diccionario de inicialización FieldMDP/Lock(tabla 238): la acción (/All,/Include,/Exclude) y los nombres de los campos afectados que deben bloquearse en el momento de firmar
Version 3.268.0
Añadido
- El nuevo
PLParsePDFDateanaliza cadenas de fecha ISO 32000-2 7.9.4 (D:YYYYMMDDHHmmSSOHH'mm') y las convierte en unTDateTimelocal, respetando el prefijo obligatorioD:, la cadena de dependencias de campos (cada campo solo cuando están presentes todos los anteriores) y el desplazamiento UT (+/-/Zcon minuto entre apóstrofos opcional), y devuelve el equivalente local del instante documentado - La descodificación de cadenas de texto (
PLDecodeTextString) ahora reconoce la marca BOM UTF-8 de PDF 2.0 (EF BB BF) conforme a 7.9.2.2.1, por lo que los metadatos creados en UTF-8 se descodifican correctamente en vez de interpretarse erróneamente como PDFDocEncoding - Las especificaciones de archivo muestran
GetFileName, que respeta la precedencia de PDF 2.0 (Path > UF > F) según Errata #444, además de los métodos de accesoGetEmbeddedFileStreamyGetRelatedFilespara los diccionarios/EFy/RF - Los lectores de anotaciones exponen los auxiliares de precedencia de apariencia
GetAnnotNormalAppearance,GetAnnotDefaultAppearanceyGetAnnotOffStateAppearance, que implementan las reglas de las correcciones n.º 23/34/42/170 (AP/N es autoritativo; DA es la alternativa de cadena de bytes; el estado Off reside bajo el nombreOff) - La validación PDF/UA notifica un nuevo código 10045 cuando un tipo de estructura no estándar no termina en un tipo estándar a través de la cadena de asignación de funciones (ISO 14289-1:2014 7.1), con protección contra ciclos hasta una profundidad de 8
- Las auditorías de fuentes PDF/A y PDF/UA ahora validan que las fuentes CIDFontType2 incrustadas incluyan un
/CIDToGIDMapcuyo valor sea el nombreIdentityo un flujo, no solo que esté presente (ISO 32000-1 9.7.4)
Cambiado
- La búsqueda en árboles de nombres (
NameTreeLookup) ahora realiza una búsqueda binaria en el arrayNamesordenado según ISO 32000-2 7.9.6 antes de recurrir a un examen lineal, lo que convierte las búsquedas grandes de EmbeddedFiles/JavaScript/Dests de O(n) en O(log n) en archivos conformes - El conjunto de tipos de estructura estándar de PDF/UA se ha ampliado con las incorporaciones de PDF 2.0 (
Artifact,DocumentFragment,FENote,MarkedContent,Title) para que las comprobaciones de ausencia de reasignación del mapa de roles y de terminación de cadenas reconozcan todo el vocabulario de etiquetas
Version 3.267.0
Añadido
EnumPageContentStatesExpuede enumerar recursivamente instrucciones Form XObject con profundidad configurable, protección contra ciclos y orden de ejecución en profundidad- Las instantáneas de contenido ahora exponen la identidad del árbol de invocación, incluida información sobre el flujo y el XObject superior, la identidad del ámbito de recursos, el estado de recorrido de Form y el número de descendientes
- Los rastreadores de contenido independientes pueden registrar fuentes con ámbito e inicializar un estado de ejecución Form aislado con concatenación de matrices y recorte de cuadros delimitadores
Cambiado
- El seguimiento recursivo de contenido selecciona cada diccionario de recursos de Form de forma independiente, hereda los recursos invocadores para los Form heredados compatibles, conserva la identidad de las fuentes heredadas y almacena en caché los programas Form descodificados entre invocaciones repetidas
Version 3.266.0
Añadido
- Las secuencias de texto devueltas por
GetTextRunsahora contienen el origen del glifo (OriginX/OriginY) y todos los componentes de la matriz de texto (Tm11/Tm12/Tm21/Tm22/TmDX/TmDY) capturados al reproducir BT, Td, TD, Tm y T* junto con los operadores de visualización, para que los consumidores puedan localizar glifos sin una pasada independiente por la canalización de texto - La descodificación de sombreados de malla ahora dirige los espacios de color Lab, CalRGB y CalGray mediante el gestor de color en vez de dejarlos acabar en negro, lo que produce rellenos correctos para las mallas de forma libre y los parches de Coons que no son DeviceRGB
- La censura ahora emite una anotación
/Subtype /Redactreal con/Rect, color interior/ICy texto superpuesto opcional, además de la eliminación de contenido existente, para que los visores compatibles con censura marquen la región saneada - Las operaciones de la biblioteca emiten registros de log estructurados en los límites de carga y guardado mediante el
Loggeranteriormente inactivo, con marcas de tiempo UTC en formato ISO-8601 y un destino de archivoTStreamWriteralmacenado en caché que ya no reabre el archivo de log en cada línea - El nuevo dispositivo de pruebas
Tests.Memoryprotege los ciclos de creación, dibujo, guardado y liberación y deNewDocumentfrente a regresiones del montón, y el ejecutor de pruebas de consola ahora habilitaReportMemoryLeaksOnShutdown - La interpretación de EMF ahora contabiliza los registros desconocidos o privados mediante la propiedad
UnknownRecordCount, para que puedan detectarse las omisiones silenciosas en los metaarchivos
Cambiado
- La búsqueda de claves de diccionario (
TPDFDictionary.FindIndexByKeyName) crea un índice hash de direccionamiento abierto y diferido para diccionarios con más de 16 entradas, lo que convierte el examen lineal que dominaba las búsquedas Resources/ColorSpace/Font/ExtGState del motor de renderizado en una consulta O(1) - La conversión gamma sRGB (
XYZ2RGB) usa una tabla de consulta compartida de 4096 entradas en vez de tres llamadas aPower(x, 1/2.4)por píxel, y la elevación al cubo de Lab a XYZ usa ahora multiplicaciones directas; ambas operaciones son el coste dominante por píxel al descodificar imágenes Lab o basadas en ICC - La búsqueda de páginas (
TPDFPageTree.GetPage) devuelve el diccionario de página almacenado en caché en accesos repetidos, en lugar de volver a recorrer el árbol de páginas en cada llamada - El despacho de operadores de flujos de contenido (
ContentOperatorFromName) agrupa los 73 operadores por su primer byte, lo que reduce el examen lineal de cada token a una breve comparación residual - La auditoría de espacios de color PDF/A ahora accede recursivamente al espacio base o alternativo de Indexed, Separation, DeviceN e ICCBased hasta una profundidad de 8, de modo que se señala una transformación de matiz DeviceCMYK oculta o un nombre Lab simple, en vez de permitirla sin aviso
- La finalización de fuentes con modelado ahora recorre el conjunto de glifos utilizados registrado en el momento de dibujar, en vez de examinar cuatro veces las 65 536 posiciones de glifos en cada guardado
- Las rutinas de escape de cadenas (cadena literal, XFDF, sello y expansión de tokens de variables) crean la salida mediante
TStringBuildero asignación en dos pasadas, lo que elimina la concatenación O(n^2) de las rutas críticas de guardado y exportación de formularios - El cifrado y descifrado de flujos AES reutilizan su búfer de fragmentos entre iteraciones del bucle en vez de reasignarlo para cada bloque
- El análisis de glifos compuestos del analizador TrueType amplía geométricamente el array de componentes, en lugar de hacerlo elemento a elemento
ReadBitsde los sombreados de malla lee en una sola pasada el mínimo de bytes que cubre los datos, yWriteBitspreasigna el tamaño del búfer de salida, lo que elimina las reasignaciones por bit- El punto de control del círculo del pintor utiliza una constante kappa precalculada y la elevación al cuadrado de arcos utiliza
Sqren lugar dePower
Corregido
- Se ha corregido un error de compilación fuera de Windows en
PDFlibParallel, donde la firma del cuerpo auxiliar dePDFlibRenderPagesParallelno coincidía con la declaración de la interfaz
Version 3.265.0
Añadido
- Se añadieron 59 demostraciones de consola C++Builder para alinear su conjunto de demostraciones con Delphi, elevando el total de 33 a 92 demostraciones que abarcan las mismas superficies de API
- Se ha ampliado Demo/C++Builder/index.html de 35 a 92 entradas, con secciones de navegación, color & ICC, códigos de barras & medios, y estructura & conformidad
Corregido
- Se corrigieron los 33 archivos cbproj de C++Builder existentes a los que les faltaban 20 unidades de biblioteca (PDFlibMeshShading, PDFlibGraphics, PDFlibWindows, PDFlibParallel, PDFlibLogger, PDFlibMail, PDFlibViewer, etc.) en la lista DelphiCompile, lo que impedía compilar todas las demostraciones de C++Builder
Version 3.264.0
Añadido
- Las instantáneas del estado gráfico del contenido ahora resuelven los operandos
Docomo XObject de imagen, formulario o PostScript e indican sus nombres de recurso, números de objeto y límites transformados - Las instantáneas Form muestran los valores originales
/Matrixy/BBox, junto con indicadores de recurso, grupo, grupo de transparencia y formulario de referencia - Los rastreadores de contenido independientes pueden registrar previamente flujos XObject mediante
RegisterXObject
Cambiado
- La enumeración de estados de contenido de página ahora precompila los recursos XObject de la página seleccionada y calcula los límites de invocación a partir de las cuatro esquinas transformadas
Version 3.263.0
Añadido
- Las instantáneas del estado gráfico del contenido ahora exponen los límites del trazado actual, el punto actual, la complejidad del trazado, las reglas de recorte pendientes y los límites efectivos del recorte
- Los rastreadores de contenido independientes pueden inicializar un límite de recorte explícito mediante
SetInitialClipBounds
Cambiado
- La enumeración del estado de contenido de las páginas ahora sigue el recorte diferido de
WyW*, los extremos cúbicos transformados exactos, la restauración del recorte deq/Qy los límites deCropBoxde la página seleccionada
Version 3.262.0
Añadido
- Las instantáneas de estado gráfico de contenido ahora indican el modo de escritura de la fuente, el desplazamiento de texto exacto de cada instrucción y si se resolvieron las métricas de fuente
- Los rastreadores de contenido independientes pueden proporcionar medidas de fuentes mediante
OnMeasureText
Cambiado
- La enumeración de estados de contenido de página ahora avanza las matrices de texto para
Tj,TJ,'y"mediante métricas de fuentes simples o compuestas, escalado horizontal, espaciado y reglas de escritura vertical
Version 3.261.0
Añadido
- El seguimiento del estado gráfico del contenido ahora puede resolver los recursos
ExtGStatede las páginas, incluidos la transparencia, la mezcla, la sobreimpresión, las máscaras suaves, los controles de dispositivo y las referencias a fuentes incrustadas TPDFContentStateTrackerpuede registrar previamente diccionarios de estado gráfico externo para analizar programas de contenido independientes
Cambiado
- Los parámetros externos del estado gráfico ahora se aplican de forma acumulativa y participan en las instantáneas completas de guardado y restauración de
q/Q
Version 3.260.0
Añadido
- Se añadió el seguimiento del estado gráfico efectivo en una sola pasada para programas de contenido estructurados y páginas seleccionadas completas
- Las instantáneas exponen la CTM, las matrices de texto, el estilo de línea, el patrón de guiones, los colores, el estado de texto y la profundidad de la pila del estado gráfico antes o después de cada instrucción
Cambiado
- La enumeración de colocaciones de imágenes ahora asigna las cuatro esquinas del cuadrado unitario, lo que produce límites correctos con rotación y sesgo
Version 3.259.0
Añadido
- Se han añadido auxiliares tipados de hora, patrones especiales y máscaras arbitrarias para campos de formulario interactivos
- Se añadió la validación de intervalos con límites opcionales independientes y seguros para cero
- Se han añadido cálculos de suma, media, producto, mínimo y máximo de campos con registro automático del orden de cálculo
Seguridad
- Los valores de cadena JavaScript generados ahora escapan las comillas, las barras inversas, los caracteres de control y los separadores de línea de JavaScript
Version 3.258.0
Añadido
- Se ha añadido la creación tipada de acciones
SetOCGStatepara eventos de campos de formulario, acciones existentes y cadenas de acciones - Las acciones de contenido opcional conservan los cambios de estado de izquierda a derecha, los grupos repetidos y la preferencia opcional de relación de botones de opción
Cambiado
- La enumeración de acciones de contenido opcional ahora devuelve identificadores canónicos de grupos que pueden realizar un recorrido de ida y vuelta mediante las API de escritura
Version 3.257.0
Añadido
- Se añadió la escritura completa y explícita de destinos remotos con páginas basadas en cero, todos los tipos de ajuste estándar, valores XYZ que admiten null y preferencias de ventana con tres estados
- Se ha añadido la escritura completa de acciones de inicio para archivos portátiles, parámetros de Windows, directorios predeterminados y operaciones de apertura o impresión
- Los identificadores de acciones existentes ahora pueden actualizar estas cargas útiles o añadirlas a cadenas de acciones sin API duplicadas específicas de contenedores
Seguridad
- Los constructores de acciones de destino remoto e inicio ahora rechazan el modo PDF/A antes de modificar una cadena de acciones
Version 3.256.0
Añadido
- La inspección de acciones GoTo remotas ahora informa de destinos explícitos y con nombre, páginas de destino basadas en cero, tipos de ajuste, coordenadas y valores de zoom
- La inspección de acciones de inicio ahora indica los parámetros de aplicaciones de Windows, los directorios predeterminados y las operaciones de apertura o impresión
- La información de acción distingue entre la ausencia de una preferencia
/NewWindowy un valor false explícito, e identifica destinos basados en arrays
Version 3.255.0
Añadido
- Se han añadido constructores tipados para acciones de inicio de aplicaciones externas y de destinos con nombre remotos
- Los generadores de acciones URI ahora admiten solicitudes de asignación de coordenadas mediante el indicador estándar
/IsMap - Los nuevos tipos de acciones funcionan en las API de ciclo de vida, campos de formulario y cadenas de acciones mediante la interfaz ampliada de constructores existente
Version 3.254.0
Añadido
- Se añadieron 14 demostraciones de cobertura de API de Delphi para superficies de biblioteca que carecían de una demostración específica: OutlineBuilder, NamedDestinations, DocumentActions, EmbeddedFiles, LinearizeDemo, BarcodeGallery, XfaFields, TaggedPDF, OutputIntent, HtmlTextFlow, RichMediaAnnotations, MailSendDemo, TextBlockExtraction y PadesDssDemo
- Se han añadido al índice de demostraciones de Delphi una sección de navegación, una sección de color & ICC, una sección de códigos de barras & medios y una sección de estructura & conformidad, con lo que el total asciende de 56 a 92 demostraciones enumeradas
- Se añadieron guías Readme.en-us.html para las 20 demostraciones que antes se distribuían sin ellas
Cambiado
- Se ha aplicado el archivo Formatter.config del proyecto a todo el código fuente de las demostraciones de Delphi para que el espaciado de operadores, la sangría y el uso de mayúsculas y minúsculas en las palabras clave sigan un estilo único, y se ha establecido NewLineBeforeThen en False para que If...Then permanezca en una sola línea
- Se reforzó el tratamiento de errores en las demostraciones GUI clásicas: ahora se comprueban de forma coherente los valores devueltos por SaveToFile, las duraciones de TPDFlib y de los objetos secundarios siempre están protegidas mediante try/finally y los mensajes de fallo incluyen LastErrorCode
Corregido
- Se ha corregido la polaridad invertida de SaveToFile en ImageToPdf, que trataba el éxito como un fallo, y se ha impedido que AddTrueTypeSubsettedFont abra un archivo obsoleto cuando falla el guardado
- Se corrigieron fugas de recursos en CreateWithImageToStream, DoInTheStream, CanvasText, ExtractText, ExtractImage, PdfDecrypt, PdfEncrypt y PdfPermission, donde instancias de TPDFlib, TStream, TBitmap, TOpenDialog o TStringList podían escapar por una ruta de excepción
- Se ha eliminado código inservible en AddFormattedTitle (asignación RectParts sin usar y bloque try/except redundante alrededor de StrToFloatDef) y MultiFunction (llamada SetTextSize sobrescrita)
Version 3.253.0
Añadido
- Se añadieron detalles de acciones tipados para acciones de hilo, sonido, película, contenido opcional, representación, transición y vista 3D
- Se han añadido la búsqueda reutilizable de identificadores de acción y la enumeración ordenada del estado de contenido opcional
- Se añadieron registros completos de transiciones PDF que abarcan los estilos de sustitución, Fly, Push, Cover, Uncover y Fade
Corregido
- Las transiciones Wipe y Glitter ahora almacenan su dirección en
/Di, leen la duración de visualización de la página desde el diccionario de página y borran tanto las entradas de transición como las de temporización - Los estilos de transición estándar anteriores a PDF 1.5 ya no fuerzan una versión de salida PDF 1.5
Version 3.252.0
Añadido
- Se ha añadido la detección de acciones de campos de formulario en una sola pasada, con detalles de acción tipados para desencadenadores principales, de widgets y de campos
- Se añadió la enumeración completa del orden de cálculo, la búsqueda por campo y la eliminación para formularios interactivos
- Se han ampliado las instantáneas masivas de campos de formulario con el orden de cálculo y el número de acciones
Cambiado
- Los desencadenadores del ciclo de vida de widgets ahora admiten acciones al abrir, cerrar, mostrar y ocultar páginas con la gestión necesaria de la versión PDF 1.5
Version 3.251.0
Añadido
- Se ha añadido la enumeración de destinos con nombre en una sola pasada a través de entradas heredadas del catálogo y árboles de nombres modernos, con parámetros resueltos de página y vista
- Se añadieron la eliminación de destinos con nombre, títulos completos de botones pulsadores, posición del texto de botones y nombres de asignación de campos de formulario
- Se han ampliado las instantáneas masivas de campos de formulario con nombres de asignación, títulos de botones y posición del texto de los botones
Corregido
- La edición de árboles de nombres ahora admite valores de destino directos y utiliza una codificación inequívoca de índices de varios nodos
Version 3.250.0
Añadido
- Se han añadido instantáneas de campos de formulario en una sola pasada con identidad, tipo, página, indicadores, valores y estado Choice del campo
- Se añadieron consultas tipadas de indicadores de campos Choice, además de métodos de acceso validados al índice seleccionado y al índice superior visible
Corregido
- Los campos Choice de selección única ya no conservan una matriz
/Ide selección múltiple, y al pasar de selección múltiple a selección única ahora se sustituye la antigua matriz/Vpor un valor de cadena
Version 3.249.0
Añadido
- Se añadió un recorrido con estado y en una sola pasada para la búsqueda de texto, de modo que las aplicaciones puedan iterar por las coincidencias almacenadas en caché sin extraer las páginas dos veces
- Se han añadido la exportación masiva de valores de formularios y su aplicación por nombre, con protección opcional para campos de solo lectura
Version 3.248.0
Añadido
- Se añadieron selecciones persistentes del visor con geometría en el espacio de página, texto extraído, enumeración, borrado y un evento de marco cancelable
- Se han añadido la captura exacta del mapa de bits de la ventana gráfica actual y su salida a archivo, incluidas las superposiciones persistentes
Version 3.247.0
Añadido
- Se añadieron controles independientes del visor para la edición de formularios por parte del usuario y la activación de anotaciones
- Se ha añadido un color de primer plano configurable para los editores de formularios de texto y de opciones
Version 3.246.0
Añadido
- Se añadieron estilos tipados de terminación de línea, colores interiores de formas, modos de resaltado de enlaces, alineación de FreeText, estado abierto de anotaciones Text y símbolos Caret
- Los definidores de anotaciones validan los subtipos compatibles y elevan automáticamente la versión mínima de PDF cuando es necesario
Version 3.245.1
Corregido
- Se corrigieron el tamaño de página y la disposición de los memos en la exportación de FastReport para que los informes A4 conserven la escala prevista, el texto permanezca dentro de los límites del memo y los marcos de memo no configurados sigan ocultos
Version 3.245.0
Añadido
- Se ha añadido
OnPasswordpara que las aplicaciones puedan proporcionar otra contraseña cuando un documento cifrado rechace la credencial inicial - Los reintentos de contraseña ahora funcionan de forma coherente al cargar desde archivos, flujos y cadenas, muestran el número del siguiente intento y permiten que el controlador cancele la operación
Seguridad
- Las devoluciones de llamada de contraseña están limitadas a dieciséis intentos en total y cada reintento usa un analizador y un estado de descifrado nuevos
Version 3.244.0
Añadido
- Se añadió
SetXMPPropertyExpara escribir de forma segura propiedades escalares en espacios de nombres XMP definidos por el llamador - Los valores XMP personalizados se escapan mediante el DOM XML, las escrituras repetidas sustituyen la propiedad coincidente del espacio de nombres y se rechazan los nombres XML no válidos o reservados
Version 3.243.0
Añadido
- Se añadieron acciones tipadas del ciclo de vida del documento para los desencadenadores anteriores al cierre y al guardado, posteriores al guardado y anteriores y posteriores a la impresión
- Se han añadido acciones tipadas de apertura y cierre de página con compatibilidad compartida para constructores de acciones URI, con nombre, JavaScript, de formulario y de destino
- Se añadieron métodos de inspección y eliminación de acciones para cada desencadenador del ciclo de vida de documentos y páginas
Version 3.242.0
Añadido
- Se ha añadido
SaveChangespara anexar los cambios al archivo cargado originalmente y volver a cargar automáticamente la cadena xref actualizada en guardados incrementales repetidos SaveChangesvalida la contraseña de recarga antes de escribir y conserva el identificador público del documento seleccionado después de la recarga
Cambiado
AppendToFileahora rechaza los destinos cuya longitud actual difiera de la del origen cargado, lo que impide anexar desplazamientos incrementales obsoletos a un archivo modificado externamente
Version 3.241.0
Añadido
- Se añadieron
GetLastOutlineyGetLastChildOutlinepara acceder directamente al final de una lista de marcadores - Se han añadido
GetOutlineChildCountyGetOutlineSiblingIndexpara inspeccionar de forma ligera el árbol de marcadores sin asignar una instantánea completa del árbol
Version 3.240.0
Añadido
- Se añadió
SaveAllAttachmentsExcon directivas de conflicto de sobrescritura, omisión y cambio de nombre automático, además de una devolución de llamada de asignación de nombre para cada archivo adjunto - Las exportaciones de archivos adjuntos ahora reducen los nombres solicitados a nombres de hoja seguros y protegen los nombres reservados de dispositivos de Windows
Corregido
- Se corrigió que
SaveAllAttachmentsfinalizara sin escribir archivos porque su instantánea de archivos adjuntos se contabilizaba, pero no se asignaba ni se rellenaba
Version 3.239.0
Añadido
- Se han añadido
OnPageMouseDown,OnPageMouseMoveyOnPageMouseUppara que los anfitriones de Viewer reciban números de página con base uno y coordenadas de puntos PDF desde arriba hacia abajo, con independencia del zoom, el desplazamiento y la rotación de la vista - Se añadieron
RegionAtClientPoint,ActiveRegionyOnActiveRegionChangepara distinguir enlaces, anotaciones que no son enlaces y campos de formulario cuando el puntero entra en ellos o sale de ellos - Se han añadido
CreatePDFlibViewerDefaultPopupMenueInstallPDFlibViewerDefaultPopupMenu, que combinan las clases de acciones existentes de Viewer en un menú contextual listo para copiar, ampliar, ajustar, rotar, navegar, guardar e imprimir
Version 3.238.0
Añadido
- Se añadió
OnOperationProgresscon tipo de operación tipado, fase del ciclo de vida, unidades actuales y totales, porcentaje y texto detallado, a la vez que se conserva la devolución de llamada porcentual clásicaOnProgress - Los puntos de entrada de carga, guardado, búsqueda, combinación y representación de páginas para archivos, flujos y cadenas ahora indican las fases inicial y final; las operaciones con progreso intermedio también indican
opRunning - Establecer
CancelduranteopStartinguopRunningactiva el estadoAbortexistente, lo que proporciona una única ruta de cancelación para los llamadores antiguos y nuevos
Corregido
LoadFromFileahora conserva el código de error 404 para una contraseña incorrecta, en vez de sobrescribirlo con el error genérico de carga 401 después de la limpieza
Version 3.237.0
Añadido
- Se añadieron
SearchTextEachyTPDFlibSearchHitEventpara emitir inmediatamente cada coincidencia de texto sin asignar ni dimensionar un array de resultados SearchTextySearchTextEachahora notifican el progreso por página medianteOnProgressy respetan tantoAbortcomo la cancelación de la devolución de llamada; esta cancelación usa el estado de interrupción existente hastaResetAbort- El panel de búsqueda y la capa de resaltado de búsquedas del visor ahora consumen la API de transmisión en una sola pasada, lo que elimina sus anteriores límites de 256 filas y 512 resaltados
Corregido
- La búsqueda de palabras completas ahora continúa después de una coincidencia de subcadena anterior en el mismo bloque de texto para encontrar una coincidencia posterior delimitada correctamente
Version 3.236.0
Añadido
- Se añadió
GetPrinterCapabilitiespara capturar una instantánea en vivo del controlador de impresora sin iniciar un trabajo de impresión - El resultado tipado
TPDFlibPrinterCapabilitiesincluye identificadores, nombres y dimensiones en milímetros del papel, identificadores y nombres de las bandejas de entrada, compatibilidad con impresión a doble cara, color, orientación horizontal e intercalación, el puerto de la impresora y el número máximo de copias indicado por el controlador - Los controladores que omiten los metadatos de papel o bandeja siguen devolviendo las capacidades restantes con arrays vacíos, mientras que los nombres de impresora no válidos devuelven una instantánea completamente vacía
Version 3.235.0
Añadido
- Se ha añadido
SendDocumentByMailpara guardar el documento cargado en un PDF temporal y enviarlo como archivo adjunto SMTP mediante el proveedor CDO integrado de Windows - Se añadió el punto de extensión
IPDFlibMailProvidercon recuento de referencias para que las aplicaciones puedan proporcionar otro transporte, admitir hosts que no sean Windows y probar flujos de trabajo de correo sin acceso a la red - Cada envío usa un directorio temporal aislado, sanea el nombre visible del archivo adjunto y elimina tanto el PDF como su directorio cuando termina el proveedor;
GetLastMailErrorinforma de fallos de validación, guardado, transporte y plataforma
Version 3.234.0
Añadido
- Se añadieron marcadores de posición de variables al texto de sellos, encabezados y pies de página:
<%PageNo%>,<%TotalPages%>,<%ShortDate%>,<%LongDate%>,<%ShortTime%>y<%LongTime%>se expanden en cada página junto con los tokens clásicos de & - Cualquier marcador de posición personalizado
<%name%>se resuelve mediante el nuevo eventoOnCalcVariable, que recibe el nombre y el número de página y proporciona el reemplazo; así, los números correlativos, códigos de lote y campos de cliente pueden estamparse sin preprocesar el texto; sin controlador, los marcadores desconocidos permanecen literales
Version 3.233.0
Añadido
- Se añadió la detección de superíndices y subíndices a la extracción de texto: el nuevo
GetTextBlockVAlignindica la clasificación 'de línea base' de cada bloque de texto extraído (0 = línea base, 1 = superíndice, 2 = subíndice) respecto a su línea visual, de modo que puedan reconocerse fórmulas químicas, exponentes y marcas de notas al pie - Un bloque se clasifica como superíndice o subíndice cuando es notablemente menor que el texto 'dominante' de la línea y su centro vertical queda por encima o por debajo del centro dominante a una distancia no superior a una altura de texto
Version 3.232.0
Añadido
- Se añadió la división de palabras a nivel de carácter a la extracción de texto:
SetTextExtractionOptions(17, 1)vuelve a dividir en palabras las secuencias de visualización de texto que no contienen espacios cuando el avance por carácter es mucho mayor que el valor 'avance mediano de glifo' de la secuencia; los documentos que dibujan líneas enteras con un solo operador y usan huecos de interletraje en lugar de espacios ahora se extraen como palabras separadas en los modos 7 y 9-11 deGetPageText - Las matrices de avance se mantienen alineadas con el texto ensanchado, por lo que los cuadriláteros de los bloques y los resultados de anchura por carácter permanecen coherentes
Version 3.231.0
Añadido
- Se añadió la exportación de texto en cuadrícula fija que conserva la disposición:
GetPageText(11)proyecta la geometría de la página sobre una cuadrícula de caracteres monoespaciados; las filas se agrupan por línea base, cada bloque se sitúa en la columna calculada a partir del ancho medio de los caracteres y las celdas más cortas se rellenan con espacios reales, para que las tablas y los formularios conserven su alineación visual en visores de texto sin formato, terminales y comparaciones sin depender de tabulaciones - La página de referencia de
GetPageTextahora documenta los modos de orden de lectura (9), tabla separada por tabuladores (10) y cuadrícula fija (11)
Version 3.230.0
Añadido
- Se añadió la recomposición de palabras partidas por guion a la extracción de texto:
SetTextExtractionOptions(16, 1)vuelve a unir las palabras divididas con guion entre saltos de línea ("inter-" al final de una línea seguido de "national" se convierte en "international") en las salidas orientadas a líneas de los modos 7 y 9 deGetPageText - La heurística solo combina cuando una letra precede al guion y una letra minúscula inicia la línea siguiente, por lo que los intervalos numéricos, los nombres propios y las mayúsculas iniciales de oración conservan sus guiones
Version 3.229.0
Añadido
- Se añadió el evento
OnBeforeSnapshotal controlTPDFlibViewer: se activa antes de capturar una instantánea de la región arrastrada, y establecer Handled cancela la captura predeterminada en el portapapeles para que las aplicaciones puedan procesar la región por sí mismas - Se ha expuesto
PrefetchEnabled: ahora el proceso de trabajo de previsualización en segundo plano puede desactivarse y activarse en tiempo de ejecución (se detiene de inmediato y se reinicia en el documento abierto) - Se mostró
DiskCacheMaxDocuments: ahora puede ajustarse el número de documentos que la caché de páginas en disco entre sesiones conserva antes de depurarse (10 de forma predeterminada)
Version 3.228.0
Añadido
- Se ha añadido navegación precisa al control
TPDFlibViewer:GoToPagePointsalta a una página y desplaza un punto determinado de ella a la esquina superior izquierda de la ventana gráfica, para que los destinos de enlaces y los resultados de búsqueda queden exactamente a la vista - Se añadió el control programático del desplazamiento: avance por píxeles mediante
ScrollBy, propiedades de lectura y escrituraHScrollPos/VScrollPos(ideales para sincronizar dos visores contiguos del mismo documento) yGetScrollPosForPage, que indica el 'anclaje de desplazamiento' de cada página en modo continuo - Se han añadido los puentes públicos de coordenadas
ClientPointToPageyPageRectToClientRect, que convierten entre píxeles de cliente y el espacio de usuario de la página teniendo en cuenta el zoom, la rotación y el desplazamiento; la detección interna de impactos comparte ahora la geometría exacta de la ruta de pintura y también funciona en controles sin elemento superior (sin interfaz gráfica)
Version 3.227.0
Añadido
- Se añadieron eventos de estado de vista al control
TPDFlibViewer:OnZoomChangese activa con cada cambio efectivo de zoom (zoom explícito, pasos preestablecidos y recálculo del modo de ajuste al cambiar el tamaño, la rotación o los PPP), mientras queOnHScroll/OnVScrollsiguen la posición de desplazamiento, para que las barras de herramientas y los indicadores de estado permanezcan sincronizados sin sondeos - Al arrastrar el control deslizante de la barra de desplazamiento vertical, ahora se muestra una burbuja flotante "Page N / M" que permite previsualizar la página en la que terminará la vista, algo muy útil en documentos largos; la propiedad
ScrollHintEnabled(activada de forma predeterminada) la desactiva
Version 3.226.0
Añadido
- Se completó el ciclo de rellenado y guardado en el control
TPDFlibViewer:SaveToFileySaveToStreamvuelven a escribir en disco o en un flujo el documento mostrado, incluidas las modificaciones de formulario confirmadas (cualquier editor local abierto se confirma primero) - Los campos de texto multilínea ahora se editan en un cuadro de texto multilínea adecuado: Intro inserta un salto de línea, Ctrl+Intro confirma y Escape cancela; los campos de una sola línea mantienen el comportamiento sencillo de confirmar con Intro
- Tab y Shift+Tab recorren con el editor local los campos de texto y selección 'editables' del documento, siguiendo la 'página' de cada campo;
FocusNextFormFieldofrece la misma navegación de forma programática
Version 3.225.0
Añadido
- Se ha añadido zoom por escala predefinida al control
TPDFlibViewer:ZoomInStepyZoomOutStepajustan el zoom a la secuencia estándar de valores predefinidos (1, 5, 10, 25, 50, 75, 100, 150, 200, 400, 800, 1600, 2400 y 3200 por ciento), comenzando por el zoom vigente para que los modos de ajuste avancen de forma natural; las acciones de zoom de la barra de herramientas usan ahora la misma escala - Ctrl+rueda del ratón ahora cambia el zoom según la escala preestablecida, mientras que la rueda sin modificadores mantiene el desplazamiento
- Se han añadido atajos de teclado: Ctrl+'+'/'-' cambia el zoom por pasos, Ctrl+1/2/3 alterna entre tamaño real, ajustar a la anchura y ajustar a la página, y Mayús+Arriba/Abajo salta a la primera y la última página
Version 3.224.0
Añadido
- Se añadió
CreateSelfSignedCertificatecon puntos de entrada para Delphi, DLL y ActiveX: genera un certificado RSA autofirmado (firma SHA-256, sujeto, validez y longitud de clave configurables) y lo exporta junto con su clave privada a un archivo PFX protegido por contraseña, listo paraSignFiley las API del proceso de firma, de modo que los flujos de trabajo de firma puedan crearse y probarse sin una autoridad de certificación externa - El certificado se crea en un contenedor de claves desechable que se elimina después de la exportación; solo el PFX conserva el material de claves. Los certificados autofirmados están pensados para pruebas y documentos internos; los visores los marcan como no fiables a menos que se instalen explícitamente
Version 3.223.0
Añadido
- Se añadió
TPDFlibShapeWatermarka la capa componible de marcas de agua: rectángulos, círculos, elipses, polígonos, cadenas de curvas Bézier y líneas rectas se estampan en un intervalo de páginas con colores de relleno y trazo, ancho de línea y opacidad mediante el mismo punto de entradaApplyWatermarkque las marcas de agua de texto e imagen - Las formas de rectángulo, círculo y elipse determinan su tamaño mediante Width/Height; las de polígono, curva y línea toman su geometría de
SetPoints(pares X,Y locales), por lo que la cuadrícula Position de nueve puntos y la colocación personalizada se aplican a todos los tipos de forma; se rechaza la geometría degenerada (muy pocos puntos)
Version 3.222.0
Añadido
- Se añadió
AddLinkToEmbeddedPDFcon puntos de entrada para Delphi, DLL y ActiveX: una zona interactiva de página que abre un PDF incrustado en el documento actual (por su nombre EmbeddedFiles) y salta a una página elegida de este, mediante la acción estándar de destino incrustado (/GoToE) de ISO 32000-1 §12.6.4.4 con una solicitud opcional de nueva ventana; la versión del documento aumenta automáticamente a PDF 1.6 GetAnnotActionInfoy sus equivalentes para esquemas y campos de formulario ahora reconocen las acciones de destino incrustado e indican el nuevo tipoakGoToEjunto con el nombre del destino incrustado, la relación entre destinos superior e inferior, la especificación de archivo opcional y el indicador /NewWindow
Version 3.221.0
Añadido
- Se añadió
SetSignProcessAppearanceTextcon puntos de entrada para Delphi, DLL y ActiveX: las firmas digitales ahora pueden mostrar una apariencia de texto visible generada automáticamente y compuesta por el nombre del firmante, el motivo, la ubicación y la fecha de firma, con etiquetas descriptivas opcionales ("Signed by:", "Reason:", ...) seleccionadas mediante una máscara de bits - El bloque de texto se dispone dentro del rectángulo del campo de firma en Helvetica y con un color configurable; el tamaño de fuente 0 ajusta automáticamente las líneas al campo. Una imagen de campo establecida mediante
SetSignProcessFieldImageFromFilemantiene la precedencia, y los procesos de marca de tiempo del documento omiten la apariencia del texto
Version 3.220.0
Añadido
- Se añadió el rellenado interactivo de formularios al control
TPDFlibViewer: al hacer clic en una casilla de verificación o un botón de opción se alterna su estado, y al hacer clic en un campo de texto o selección se abre un editor local sobre el campo (Enter confirma, Escape cancela y salir del editor confirma); los campos de solo lectura no se modifican y la página cambiada vuelve a renderizarse automáticamente - Cada escritura activa el nuevo evento
OnFormFieldValueChanged, yHighlightFormFieldsconFormHighlightColorpinta un fondo translúcido sobre cada área rellenable para que los usuarios puedan localizar los campos de formulario - Se añadieron los equivalentes programáticos
FormFieldAtPagePoint,GetFormFieldPageRect,ToggleCheckBoxField,SetFormFieldValueAndRefresh,BeginEditFormFieldyCommitInplaceEditor, que controlan el mismo mecanismo sin entrada del ratón
Version 3.219.0
Añadido
- Se ha añadido interacción con anotaciones al control
TPDFlibViewer: al hacer clic en una anotación que no sea un enlace, se activa el nuevo eventoOnAnnotClickcon la página, el índice de la anotación y el subtipo, yAnnotAtPagePointexpone la detección de impactos mediante programación (se omiten los elementos Popup asociados) - Al situar el puntero sobre una anotación ahora se muestra su texto Contents como la 'sugerencia' del control (el conmutador
AnnotHints, activado de forma predeterminada, funciona con la propiedad estándarShowHint) - Se ha añadido
SaveAnnotAttachmentToFilepara escribir en disco el archivo 'incrustado' de una anotación FileAttachment, lo que completa los flujos de trabajo de hacer clic para guardar archivos adjuntos en el visor
Version 3.218.0
Añadido
- Se añadió al control
TPDFlibVieweruna caché de páginas en disco que se conserva entre sesiones: al establecerDiskCacheFolder, las páginas renderizadas se guardan en disco para que un documento visto recientemente vuelva a abrirse al instante sin renderizarse de nuevo - Las páginas almacenadas en caché se identifican mediante una huella de la ruta 'propia' del documento, su tamaño y la hora de su última escritura, de modo que editar el archivo invalida automáticamente sus páginas obsoletas; la caché mantiene hasta diez documentos y elimina los usados menos recientemente
- Se añadió el contador
DiskCacheHits, que indica cuántos renderizados de páginas ha evitado la caché de disco
Version 3.217.0
Añadido
- Se ha añadido la unidad
PDFlibViewerActionscon veinte descendientes deTActionlistos paraTPDFlibViewer, de modo que las barras de herramientas y los menús funcionen sin código de enlace: navegación por páginas (First/Prior/Next/Last), zoom (In/Out/FitWidth/FitPage/ActualSize), rotación de vista (en sentido horario/antihorario), impresión, diálogos de apertura y guardado como, copia del texto seleccionado y los cinco cambios de modo de la herramienta del ratón - Cada acción se dirige a un visor mediante su propiedad
Viewery mantiene actualizados automáticamente su estado habilitado (documento abierto, posición de página y presencia de selección) y su estado marcado (ajuste de zoom o herramienta de ratón activos); todas las acciones se registran en la categoría losLab PDF del editor Action List - Se ha añadido
TPDFlibViewer.EffectiveZoomPercent, que indica el zoom realmente vigente (incluidos los factores calculados de ajuste a la anchura o a la página) para que los pasos de zoom puedan basarse en él
Version 3.216.0
Añadido
- Se añadió el resaltado de coincidencias de búsqueda al control
TPDFlibViewer:HighlightSearchHitsbusca en todo el documento y dibuja una barra translúcida sobre cada coincidencia que permanece en su sitio al desplazarse, aplicar zoom y girar, conClearSearchHighlights,SearchHighlightCounty unSearchHighlightColorconfigurable TPDFlibSearchPanel.RunSearchahora también pinta las barras de coincidencias en el visor asociado (la nueva propiedadHighlightInView, activada de forma predeterminada, lo desactiva), por lo que los resultados de búsqueda son visibles en las páginas, no solo en la lista de coincidencias
Version 3.215.0
Añadido
- Se añadieron modos de herramienta de ratón al control
TPDFlibViewermediante la nueva propiedadViewerMode:vmSelectpara seleccionar texto (predeterminado),vmHandpara desplazar arrastrando con un cursor de agarre (un clic normal sigue abriendo los enlaces),vmZoompara ampliar mediante un marco que ajusta la banda arrastrada a la ventana gráfica,vmSnapshotpara capturar una región en el portapapeles yvmHighlightpara resaltar regiones de forma translúcida y persistente - Se ha añadido
CaptureRegionpara representar cualquier región de cliente (páginas más resaltados) en un mapa de bits propiedad del llamador, el eventoOnSnapshoty el conmutadorSnapshotToClipboardpara gestionar instantáneas, así comoAddHighlightRegion/ClearHighlightRegions/HighlightRegionCountcon unHighlightColorconfigurable para resaltados anclados a páginas que sobreviven al zoom, la rotación y la navegación
Version 3.214.0
Añadido
- Se añadió la impresión al control
TPDFlibViewer:PrintDocmuestra el cuadro de diálogo de impresión estándar de Windows (selección de impresora, intervalo de páginas, copias e intercalación) y entrega el trabajo al 'motor de impresión' de la biblioteca, mientras quePrintDoc(False)imprime todo el documento en la impresora predeterminada sin ninguna interfaz de usuario - Se ha añadido
PrintDocRangepara imprimir desde el visor de forma totalmente programática con un nombre de impresora, un intervalo de páginas, un número de copias y un indicador de intercalación explícitos
Version 3.213.0
Añadido
- Se añadió la rotación de vista al control
TPDFlibViewer:RotateClockwise90yRotateAntiClockwise90giran las páginas mostradas en pasos de 90 grados, y la propiedadViewRotationlee o establece directamente el ángulo (0, 90, 180 o 270) - La rotación es un atributo exclusivo de la vista: el documento nunca se modifica, los clics en enlaces y la selección de texto siguen funcionando en todos los ángulos, los modos de zoom de ajuste a la anchura y a la página se adaptan a la forma de la página rotada y al abrir un documento nuevo se restablece la vista a 0 grados
- Los mapas de bits de páginas giradas se almacenan en caché por ángulo, por lo que al cambiar de ángulo se reutilizan los renderizados anteriores en lugar de volver a renderizar
Version 3.212.0
Cambiado
- Se ha mejorado la compatibilidad con rutas SOM de conjuntos de datos XFA:
GetXFAFormFieldValueySetXFAFormFieldValueahora aceptan selectores de predicado sencillos al estilo de FormCalc, como$data.Receipt.Detail.[Total_Price > 200].Description, y actualizan todos los nodos de datos coincidentes cuando un predicado selecciona un subconjunto
Version 3.211.0
Cambiado
- Se mejoró la compatibilidad de las rutas SOM de conjuntos de datos XFA:
GetXFAFormFieldValueySetXFAFormFieldValueahora aceptan los selectores de clase de Data DOM#dataGroupy#dataValuecon apariciones numéricas o comodines, lo que permite rutas basadas en clases como$data.Receipt.#dataGroup[0].#dataValue[0]
Version 3.210.0
Cambiado
- Se ha mejorado la compatibilidad con rutas SOM de conjuntos de datos XFA:
GetXFAFormFieldValueySetXFAFormFieldValueahora aceptan la raíz$recorden paquetes sin procesamiento de registros, por lo que rutas como$record.Taxy$record/Detail[0]/Total_Pricese resuelven desde el elemento exterior del registro de datos
Version 3.209.0
Cambiado
- Se mejoró el intercambio de anotaciones XFDF: las exportaciones de anotaciones ahora escriben los atributos estándar de estilo de borde
width,styleydashesa partir de los valores/BSde las anotaciones PDF, y las importaciones de anotaciones restauran esos atributos en las anotaciones insertadas
Version 3.208.0
Cambiado
- Se ha mejorado el intercambio de anotaciones XFDF: las exportaciones de anotaciones ahora escriben los atributos estándar
creationdateyopacitya partir de los valores/CreationDatey/CAde las anotaciones PDF, y las importaciones restauran esos atributos en las anotaciones insertadas
Version 3.207.0
Cambiado
- Se mejoró el intercambio de anotaciones XFDF: las exportaciones de anotaciones ahora escriben nombres estándar de
flagsa partir de los valores/Fde las anotaciones PDF, y las importaciones de anotaciones restauran esos nombres en los indicadores de las anotaciones insertadas
Version 3.206.0
Cambiado
- Se ha mejorado la compatibilidad con rutas SOM de conjuntos de datos XFA:
GetXFAFormFieldValueySetXFAFormFieldValueahora aceptan selectores comodín de elementos secundarios directos como$data.Receipt.*.Total_Pricepara leer o actualizar ramas secundarias coincidentes sin seleccionar campos con el mismo nombre en el nodo superior
Version 3.205.0
Cambiado
- Se mejoró la compatibilidad de las rutas SOM de conjuntos de datos XFA:
GetXFAFormFieldValueySetXFAFormFieldValueahora aceptan selectores de descendientes como$data..Total_Pricey$data.Receipt..Total_Pricepara leer o actualizar el primer nodo de datos descendiente coincidente
Version 3.204.0
Cambiado
- Se ha mejorado la compatibilidad con rutas SOM de conjuntos de datos XFA:
GetXFAFormFieldValueySetXFAFormFieldValueahora aceptan la propiedadparenten rutas como$data.Receipt.Detail[1].parent.Taxpara leer o actualizar datos hermanos del nodo superior de un nodo seleccionado
Version 3.203.0
Cambiado
- Se mejoró la gestión de apariciones SOM de conjuntos de datos XFA:
GetXFAFormFieldValueySetXFAFormFieldValueahora admiten selectores[*]como$data.Receipt.Detail[*].Total_Pricepara leer o actualizar todos los nodos de datos repetidos coincidentes
Version 3.202.0
Cambiado
- Se ha mejorado la compatibilidad con rutas SOM de XFA: las API de campos de plantillas y conjuntos de datos XFA ahora conservan los puntos literales en rutas de campos delimitadas por barras y aceptan puntos escapados como
Line\.Itemen rutas SOM delimitadas por puntos
Version 3.201.0
Cambiado
- Se mejoró la compatibilidad de las rutas de conjuntos de datos XFA: las API de valores de campos XFA ahora aceptan rutas delimitadas por barras después de raíces SOM de datos estándar como
$data/...,xfa.datasets.data/...yxfa.datasets/...
Version 3.200.0
Cambiado
- Se ha mejorado la compatibilidad con SOM de conjuntos de datos XFA: las API de valores de campos XFA ahora aceptan la forma abreviada estándar
!data..., incluidas las rutas!data/...delimitadas por barras
Version 3.199.0
Cambiado
- Se mejoró la compatibilidad de las rutas de plantillas XFA: las API de edición de plantillas ahora aceptan rutas de campos delimitadas por barras devueltas por la enumeración de nombres de campos XFA, incluidas las rutas
$template/...
Version 3.198.0
Cambiado
- Se ha mejorado la compatibilidad con espacios de nombres de conjuntos de datos XFA: las API de valores de campos ahora leen y actualizan los nodos de datos por nombre XML local cuando los datos empresariales del paquete de conjuntos de datos usan su propio prefijo de espacio de nombres, y la enumeración de nombres de campos devuelve rutas sin prefijos
Version 3.197.0
Cambiado
- Se mejoró el intercambio de anotaciones XFDF: las exportaciones de anotaciones ahora incluyen los atributos comunes
nameydateprocedentes de/NMy/Mde PDF, las importaciones de anotaciones restauran esos valores en las anotaciones insertadas ySetAnnotStrPropertyahora acepta la etiqueta 104 para las fechas de modificación de anotaciones
Version 3.196.0
Cambiado
- Se ha mejorado la enumeración de nombres de campos XFA: las API de listas de campos ahora examinan todos los registros de datos de nivel superior del paquete de conjuntos de datos y devuelven los campos de datos de hoja sin añadir los grupos contenedores como campos
Version 3.195.0
Cambiado
- Se mejoró la compatibilidad con conjuntos de datos XFA: las API de valores de campos XFA ahora leen y actualizan paquetes XDP completos cuyo paquete de conjuntos de datos utiliza un elemento
datasin prefijo
Version 3.194.0
Corregido
- Se han mejorado las actualizaciones de campos de plantillas XFA: las API de campos de plantillas XFA ahora aceptan raíces SOM estándar de plantillas como
$templateyxfa.template, y los cambios exclusivos de plantillas en flujos XDP completos se guardan correctamente
Version 3.193.0
Cambiado
- Se mejoró el direccionamiento de campos XFA: las API de valores de campos XFA ahora aceptan raíces SOM de datos estándar como
$datayxfa.datasets.data, además de rutas de campos relativas
Version 3.192.0
Cambiado
- Se ha mejorado el tratamiento de paquetes XML de XFA: los flujos XFA con marcas de orden de bytes UTF-16 o patrones de bytes XML UTF-16 ahora se descodifican antes del análisis XML, por lo que los valores de formulario codificados en UTF-16 siguen disponibles mediante las API de lectura y escritura de campos XFA
Version 3.191.0
Cambiado
- Se mejoró la creación de paquetes XFA:
SetXFAFromStringahora crea el contenedorAcroFormnecesario cuando un documento aún no contiene datos de formulario, sustituye el estado XFA analizado obsoleto cuando se almacena un paquete XFA completo y mantiene el paquete guardado disponible mediante las API de lectura y escritura de campos XFA
Version 3.190.0
Cambiado
- Se ha mejorado el intercambio de anotaciones XFDF: las exportaciones de anotaciones ahora escriben el atributo común
colora partir de la matriz RGB/Cde PDF, y las importaciones restauran los valorescolor="#RRGGBB"en la matriz de color de la anotación insertada
Version 3.189.0
Añadido
- Se añadieron API de intercambio de anotaciones XFDF:
ExportAnnotationsToXFDF,ExportAnnotationsToXFDFString,ImportAnnotationsFromXFDFeImportAnnotationsFromXFDFStringahora leen y escriben datos ISO 19444<annots>para comentarios de anotaciones de estilo texto, incluidos los datos de página, rectángulo, título, asunto y contenido sin formato
Version 3.188.0
Cambiado
- Se ha mejorado la importación de campos de texto enriquecido XFDF: los campos con
<value-richtext>ahora conservan el XML de texto enriquecido en el valorRVdel campo y siguen aplicando la alternativa de texto sin formato<value>cuando está presente
Version 3.187.0
Cambiado
- Se mejoró el intercambio de datos de formularios XFDF para campos de selección múltiple: los elementos
<value>repetidos ahora se importan en el array de valores seleccionados, y al exportar un campo de selección múltiple ahora se escribe un elemento<value>por cada elemento seleccionado, en lugar de aplanarlos en un único nodo de texto con caracteres de escape
Version 3.186.0
Cambiado
- Se ha mejorado la exportación de datos de formulario XFDF para campos de texto enriquecido: los campos con un valor de texto enriquecido
RVahora incluyen un elemento<value-richtext>y conservan la alternativa de texto sin formato<value>
Version 3.185.0
Cambiado
- Se mejoró la importación de datos de formularios XFDF para campos de texto enriquecido: cuando un campo proporciona
<value-richtext>sin un<value>de texto sin formato, el importador ahora extrae el contenido de texto XHTML y lo aplica al campo AcroForm coincidente en lugar de omitirlo
Version 3.184.0
Cambiado
- Se ha mejorado el intercambio de datos de formulario XFDF: las exportaciones ahora usan el espacio de nombres XFDF estándar con
xml:space="preserve", emiten elementos<field>anidados para nombres jerárquicos de AcroForm, omiten los valores de campos superiores no terminales, escriben las exportaciones de archivos como UTF-8 e importan XFDF con espacios en blanco flexibles, campos anidados, atributos entre comillas simples, CDATA, entidades XML y referencias numéricas de caracteres
Version 3.183.0
Añadido
- Se añadió
SanitizeDocument(Flags), que elimina contenido sensible en una sola llamada: quita todo el JavaScript global, elimina OpenAction del catálogo, retira las acciones /A de todas las anotaciones, borra los metadatos Author/Subject/Keywords/Creator/Producer (tanto /Info como XMP) y, opcionalmente, elimina todas las anotaciones. Los bits de indicadorSANITIZE_JAVASCRIPT/SANITIZE_ACTIONS/SANITIZE_METADATA/SANITIZE_ANNOTATIONS/SANITIZE_OPEN_ACTIONpueden combinarse;SANITIZE_ALLaplica todas las eliminaciones. Cierra la clásica brecha de filtración de datos por la que la censura elimina el contenido visible, pero deja recuperables los metadatos o scripts ocultos - Se ha añadido
TPDFAnnots.RemoveAnnotAction(Index)para eliminar el diccionario de acciones /A de una anotación individual (lo usa SanitizeDocument y también resulta útil de forma independiente)
Version 3.182.0
Añadido
- Los elementos de imagen devueltos por
EnumPageElementsahora contienen su rectángulo de colocación real (Left/Top/Right/Bottom) en lugar de ceros. Esta función se apoya en un nuevo métodoTPDFContentProgram.EnumImagePlacementsque recorre el flujo de contenido siguiendo la CTM (cm/q/Q) y proyecta el cuadrado unitario de 1x1 de cada operadorDoen coordenadas de página - Se han añadido cuatro demostraciones destacadas: DocumentProperties (recorrido de ida y vuelta de DocInfo/cuadros de página/rotación/transición/preferencias del visor/XMP), FormProperties (cuadrícula de propiedades por campo: tipo/valor/solo lectura/MaxLength/MultiLine/descripción), SignatureValidator (enumeración de campos de firma + verificación + certificado del firmante) y Reader (TPDFlibViewer de VCL con apertura/navegación/zoom/copia de texto)
Version 3.181.0
Añadido
- Se añadió
SetXMPProperty, que muestra el motor XMP existente compatible con esquemas (PDFlibXMP) mediante la fachada pública: permite establecer cualquier propiedad de Dublin Core (dc:), XMP Basic (xmp:), Adobe PDF (pdf:), PDF/A ID (pdfaid:), PDF/UA ID (pdfuaid:) o XMP Media Management (xmpMM:) mediante espacio de nombres + clave sin escribir manualmente RDF XML - Se han añadido
ImportFormDataFromFDF/ImportFormDataFromFDFString, que analizan una matriz /Fields de FDF (cada<< /T (name) /V (value) >>) y aplican cada valor al campo de AcroForm coincidente por título, invirtiendo el escape octal y de paréntesis de EscapePDFText. Esto resuelve la carencia asimétrica que solo permitía exportar - Se añadieron
ExportFormDataToXFDF/ExportFormDataToXFDFString/ImportFormDataFromXFDF/ImportFormDataFromXFDFStringpara el intercambio bidireccional de XFDF (XML Forms Data Format), el equivalente XML moderno de FDF - Los seis definidores XMP con ámbito de espacio de nombres (
SetDublinCore,SetXMPBasic,SetAdobePDF,SetPDFA,SetPDFUA,SetXMPMM) se han hecho públicos enTPDFlibXMPpara que los llamadores avanzados puedan controlar directamente el motor
Version 3.180.0
Añadido
- Se añadió
SearchAndReplaceTextInContent, que realiza una sustitución REAL de texto en el flujo de contenido (reescribe directamente los operadores de visualización de texto Tj/TJ/'/" medianteTPDFContentProgram.ReplaceTextRun), a diferencia delSearchAndReplaceTextexistente basado en máscaras, que solo superpone un rectángulo sobre los glifos originales. El texto original desaparece del flujo y no puede recuperarse. Localiza las coincidencias medianteSearchText, asigna el rectángulo de cada coincidencia a la instrucción que lo abarca medianteFindInstructionsInRect, reescribe y vuelve a guardar la capa
Version 3.179.0
Añadido
- Se ha añadido un registrador interno estructurado (
TPDFlibLogger) en una nueva unidadLib/PDFlibLogger.pas, con cuatro niveles (Debug/Info/Warn/Error), una devolución de llamada del anfitrión (OnLog), un destino de archivo opcional y seguro para subprocesos, y una asignación de códigos de error a mensajes (PDFlibErrorMessage) que por fin dota de texto comprensible a los códigos numéricos existentes (1xx/3xx/4xx/5xx). Se expone enTPDFlibmediante la propiedadLogger - Se añadió
RenderPagesToFilesParallel, que renderiza un intervalo de páginas en un archivo por página mediante un grupo deTTaskcon una instancia deTPDFlibpor trabajador (TPDFlib no es seguro para subprocesos) yCoInitializepor subproceso para la seguridad de apartamentos de GDI+. Escala de forma casi lineal con los núcleos de CPU en la salida ráster limitada por la CPU
Version 3.178.0
Añadido
- Se ha añadido
EnumCertificatespara enumerar todos los certificados de un almacén del sistema Windows ("MY", "Root", ...), devolviendo sujeto, emisor, número de serie, periodo de validez, HasPrivateKey y Qualified (extensión eIDAS QCStatements, OID 0.4.0.1862.1.7, detectada mediante un nuevo descodificador DER integrado en PDFlibASN1); sustituye la limitación anterior deSetSignProcessCertFromStorede obtener un solo certificado por CN - Se añadió
SetSignProcessCertFromStoreByHandlepara seleccionar un certificado de firma mediante un identificador PCCERT_CONTEXT sin procesar obtenido de la enumeración, lo que permite a los llamadores elegir según cualquier criterio (filtro cualificado, validez o huella digital), en lugar de hacerlo únicamente por Subject CN - Se ha añadido
RedactRegion, que elimina de verdad el texto, los trazados vectoriales y los XObject de imagen cuya área pintada intersecte con un rectángulo (editando el flujo de contenido para que el contenido eliminado no pueda recuperarse, a diferencia deMaskRect, que solo lo cubre), con relleno negro y anotación /Redact opcionales. Se basa en un analizador de flujos de contenido con seguimiento de CTM en PDFlibContentModel (FindInstructionsInRect) - Se añadieron funciones mínimas de descodificación DER (
DERDecodeLength,DERFindExtensionByOID) a PDFlibASN1 para inspeccionar extensiones de certificados dentro del proceso sin CryptDecodeObjectEx
Version 3.177.0
Añadido
- Se han añadido API de composición de páginas que combinan páginas existentes en nuevos diseños mediante captura vectorial de Form XObject (conservando toda la fidelidad vectorial, a diferencia de la concatenación de flujos de contenido):
StitchPageOverlaysuperpone una página sobre otra en una posición con opacidad opcional,StitchPagesSideBySidecoloca dos páginas a izquierda y derecha en una nueva página más ancha yStitchPagesVerticallyapila un intervalo de páginas en una nueva página alta de estilo póster - Se añadió una capa componible de plantillas de marcas de agua en una nueva unidad
Lib/PDFlibWatermark.pas:TPDFlibWatermarkBasecon posicionamiento en nueve puntos (wpTopLeft..wpBottomRightmáswpCustom),TPDFlibTextWatermark,TPDFlibImageWatermarkyTPDFlibCompositeWatermark, que aplica recursivamente una lista de submarcas de agua en un intervalo de páginas compartido - Se ha añadido
TPDFlib.ApplyWatermarkcomo punto de entrada práctico que delega en el intervalo de páginas y los ajustes propios de una plantilla de marca de agua
Version 3.176.0
Añadido
- Se añadieron constantes con nombre para los formatos de salida de renderizado (
PDF_RENDER_BMP,PDF_RENDER_EMF,PDF_RENDER_EMFPLUS,PDF_RENDER_EMF_DUAL, etc.) que se corresponden 1:1 con los valores enteros deOptionsaceptados porRenderPageToFile,RenderPageToStream,RenderPagesToFilesyRenderDocumentToFile - Se han añadido la enumeración
TPDFlibMetafileFormaty los métodos prácticosRenderPageToMetafileStreamyRenderPageToMetafileFile, que aceptan una variante de metaarchivo con nombre (mfEMF, mfEMFPlus, mfEMFDual, mfWMF) en vez de un entero sin descripción - Se añadió el modo de salida EMF+ Dual (valor 11 de Options / mfEMFDual), que registra comandos GDI y GDI+ en el mismo metarchivo para mantener la compatibilidad con consumidores antiguos que solo admiten GDI
- Se han añadido la enumeración
TPDFlibClipboardFormatyRenderPageToClipboard, que coloca una página representada en el portapapeles de Windows como metaarchivo mejorado (CF_ENHMETAFILE), mapa de bits DIB (CF_DIB), texto Unicode de la página (CF_UNICODETEXT) o los tres formatos a la vez - Se añadió una nueva unidad
Lib/PDFlibClipboard.pascon auxiliares de bajo nivel para colocar contenido en el portapapeles de Win32, utilizados porRenderPageToClipboard - Se ha añadido compatibilidad completa con DPI por monitor a
TPDFlibViewer: una nueva propiedad públicaScreenDPI, una implementación deCreateWndque detecta automáticamente los DPI del monitor anfitrión medianteGetDpiForWindow(conGetDeviceCapscomo alternativa) y un controladorWM_DPICHANGEDque reconstruye el diseño y borra la caché de mapas de bits cuando la ventana se mueve entre monitores - Se añadió
TPDFRenderer.SetEMFPlusMetafileTypepara seleccionar entre la grabación EMF+ Only y EMF+ Dual en el nivel del motor de renderizado
Corregido
- Se ha corregido la página de referencia de
RenderPageToFile, donde la lista de valores de Options estaba situada por error en la fila Page y la celda Options estaba vacía
Version 3.175.3
Añadido
- Se añadió una unidad Lib/PDFlibTableExport.pas que renderiza cualquier TDataSet (FireDAC, ClientDataSet o resultado de consulta) como una tabla PDF paginada con encabezado con estilo, filas alternas, columnas numéricas alineadas a la derecha y continuación automática de páginas, además de una demostración de consola Demo/Delphi/DataSetExport que carga el ejemplo customer.FDS de RAD Studio mediante FireDAC y lo exporta
Version 3.175.2
Añadido
- Se han añadido proyectos integrales Demo/ReportBridges que crean un informe mínimo en FastReport, QuickReport y ReportBuilder y lo exportan a PDF mediante el puente correspondiente de Addons, con un archivo build-ReportBridges.cmd dedicado que proporciona las rutas del código fuente de los motores y los símbolos de activación para que la compilación estándar de demostraciones siga compilando los proyectos como stubs
Version 3.175.1
Añadido
- Se añadió una demostración Delphi de matriz de opciones JBIG2 que recorre combinaciones de SymbolExtract, SkipBlackDots, BlackDotSize y LossyLevel frente a referencias CCITT G4 y Flate, con salidas PDF y CSV por fila y salidas de resumen
- Se ha añadido una demostración destacada Pattern para Delphi que incluye sombreadores RGB axiales y radiales, un sombreador de malla de parches de Coons y un patrón de mosaico personalizado aplicado como color de relleno, trazo y texto
- Se añadió una demostración Delphi de matriz de fax CCITT que compara la compresión Group 3 1-D, Group 3 2-D y Group 4 con los bits de opción BlackIs1 e Interpolate, e indica el tamaño de cada salida y el nombre /Filter resultante
- Se han añadido en Addons puentes de exportación para FastReport, QuickReport y ReportBuilder que representan un informe preparado en una PDF Library for Delphi PDF mediante las superficies nativas de objetos, metaarchivos y DrawCommand del motor, respectivamente
Version 3.175.0
Cambiado
- Se amplió la demostración WorkflowGallery con una matriz de variantes de anotaciones que registra rellenos de resaltado de texto, estilos de marcado, iconos de notas y anotaciones de texto libre, caret y sello en informes CSV y HTML complementarios
Version 3.174.0
Cambiado
- Se ha ampliado la demostración AdvancedWorkflowMatrix de C++Builder para asignar flujos de trabajo de navegación por acciones, PDF/A y AcroForm, diagnósticos de fuentes, entrega por streaming y los auxiliares más recientes de compresión de escaneos a los informes de matriz generados
Version 3.173.0
Añadido
- Se añadió la demostración Delphi DeliveryWorkflowMatrix para la salida PDF Web y CGI transmitida por flujo, la validación de miniaturas de páginas y los flujos de trabajo de entrega de marcas de agua mediante un único búfer de bytes PDF generado
Version 3.172.0
Añadido
- Se han añadido API prácticas para árboles de esquemas que permiten la inserción ordenada de hermanos, la creación de elementos secundarios, la eliminación de subárboles y la enumeración de esquemas en preorden con detalles del elemento superior, hermano, nivel, página de destino, estado abierto y título
Version 3.171.0
Añadido
- Se añadió la demostración de consola Delphi FontDiagnosticsMatrix para rutas de fuentes CJK y Unicode, actualizaciones de subconjuntos TrueType, sondeos de fuentes instaladas, enumeración de fuentes del documento e informes de diagnóstico de fuentes
Version 3.170.0
Añadido
- Se ha añadido la demostración de consola CanvasMigrationMatrix para Delphi, que abarca la migración de Canvas DC, los puntos de entrada de contenido y trazados sin procesar, los auxiliares de color de Delphi, el texto relleno con patrones, las marcas de agua, los flujos de trabajo de miniaturas de páginas y las vistas previas de validación representadas
Version 3.169.0
Añadido
- Se añadieron demostraciones de consola Delphi específicas LayerCompositionMatrix, TransparencyMaskMatrix y ComplianceFormWorkflowMatrix para la directiva de impresión y exportación de contenido opcional, la composición de Pattern/Form XObject, la comparación de máscaras de transparencia, ejemplos correctos y fallidos de PDF/A-1b, flujos de trabajo de acciones AcroForm, reconstrucciones de apariencias y plantillas de firmas visibles
Version 3.168.0
Añadido
- Se han añadido demostraciones de consola dedicadas ImageCompressionMatrix y SecurityPermissionMatrix para Delphi, con informes PDF, CSV y HTML generados para seleccionar estrategias de compresión de imágenes, comprimir escaneos, ajustar la calidad de representación JPEG y auditar perfiles de permisos cifrados
Version 3.167.0
Añadido
- Se añadieron API auxiliares con nombre para la codificación de mapas de bits JBIG2, las opciones de importación EMF, las acciones de eventos AcroForm y las acciones encadenadas, para que los llamadores puedan utilizar conmutadores de opciones explícitos en lugar de componer manualmente máscaras de bits enteras
Version 3.166.0
Añadido
- Se ha añadido una demostración de consola ejecutable AdvancedWorkflowMatrix para C++Builder, con salidas PDF, CSV y HTML que asignan flujos de trabajo avanzados de migración de lienzos, importación EMF, compresión de imágenes, AcroForm, firmas, seguridad, PDF/A, contenido opcional, patrones y Form XObject a puntos de entrada de proyectos C++Builder
Version 3.165.0
Añadido
- Se añadió una demostración Delphi de matriz de navegación de acciones que presenta acciones de apertura de documentos, JavaScript de nivel de documento, enlaces a archivos incrustados, enlaces GoTo remotos, acciones de eventos AcroForm, auxiliares de enlaces Submit/Reset/Hide y acciones Next encadenadas con salidas PDF, CSV y HTML
Corregido
- Se han corregido los auxiliares de enlaces a archivos remotos para que AddLinkToFile, AddLinkToFileEx, AddLinkToFileDest y los enlaces de inicio de archivos locales creen una sola anotación y regresen, en vez de entrar en un bucle infinito
Version 3.164.0
Añadido
- Se agregó una demo de matriz de protección PDF/A para Delphi que comprueba el rechazo anticipado o las decisiones de rutas permitidas para la configuración del modo PDF/A, la transparencia, los modos de fusión, el cifrado, JavaScript, multimedia, archivos incrustados y los flujos de trabajo de archivos asociados de PDF/A-3, con informes PDF, CSV y HTML generados
Version 3.163.0
Añadido
- Añadida una matriz explícita de puente ReportAdapter para FastReport, QuickReport, ReportBuilder, DBGrid y rutas de exportación de lienzo personalizadas, con salida CSV y HTML generada y una página PDF que muestra la estrategia de adaptador reutilizable
Version 3.162.0
Añadido
- Añadida una matriz de demos de flujo avanzado que genera salidas concretas para migración de lienzo, opciones EMF, compresión de imagen, acciones AcroForm, firmas visibles vacías, permisos, PDF/A-1b, contenido opcional, patrones, Form XObjects, tablas DBGrid y memoria máxima
Version 3.161.0
Añadido
- Añadidos helpers Delphi para acciones compactas de apertura, eventos de visibilidad de campos, colores TColor y gris, e inyección directa de contenido bruto, rutas, texto y matrices
Version 3.160.0
Añadido
- Añadidos helpers Delphi para compresión bitmap a JBIG2, máscaras de imagen y transparencia por color clave en una llamada, encadenamiento GoTo y nombres de eventos AcroForm legibles
- Se han ampliado
ImportEMFFromFileExeImportEMFFromStreamExpara que sus indicadoresOptionspuedan forzar la importación como mapa de bits, habilitar la recompresión JPEG de imágenes en color EMF y solicitar controles de procesamiento de GDI+
Version 3.159.1
Cambiado
- Mejorados
SaveToStreamy el guardado en flujo vinculado para escribir flujos PDF grandes en bloques acotados en vez de copiarlos a una cadena intermedia
Version 3.159.0
Añadido
- Añadidos helpers de colocación de imágenes que dibujan o ajustan una imagen y liberan enseguida su handle, con entradas Delphi, DLL y ActiveX para menor memoria máxima
- Se ha añadido
RenderPageToMonochromeFileExpara renderizar BMP de 1 bit con conversión por umbral y limpieza aislada de píxeles negros antes de los flujos de trabajo de compresión de imágenes escaneadas
Version 3.158.1
Añadido
- Añadidas demos Delphi para exportación reutilizable tipo informe, importación RichEdit a EMF y escenarios con miniatura, anotación, form XObject, tabla, compresión, JavaScript y flujo vinculado
Version 3.158.0
Añadido
- Añadidas API de cifrado de metadatos con entradas Delphi, DLL y ActiveX: SetEncryptMetadata escribe PDF Standard-security con XMP sin cifrar y GetEncryptMetadata informa /EncryptMetadata
Version 3.151.0
Añadido
- Añadidos
DrawPie,DrawChord,DrawEllipticPieyDrawEllipticChordpara arcos circulares y elípticos cerrados con contorno, relleno o ambos
Version 3.150.0
Añadido
- Añadidos
NewGraphicsStateySetGraphicsStatepara crear recursos ExtGState reutilizables con transparencias, ancho, extremos, uniones y límite de inglete
Version 3.149.1
Corregido
- Corregidos dispatch IDs ActiveX duplicados para Form XObject y métodos de límite de inglete, evitando ambigüedad en COM de enlace tardío
Version 3.149.0
Añadido
- Añadido
SetMiterLimitpara controlar proporciones de límite de inglete en rutas con uniones de inglete - Expuestos
BeginFormXObject,EndFormXObjectyCancelFormXObjectmediante API DLL y ActiveX
Version 3.148.0
Añadido
- Las API reutilizables de Form XObject
BeginFormXObject,EndFormXObjectyCancelFormXObjectpermiten dibujar una plantilla con llamadas normales y colocarla repetidamente mediante API de página capturada
Version 3.147.0
Añadido
- Añadidos
SetTextTilingPatternySetLineTilingPatternpara reutilizar patrones capturados en texto, subrayado y gráficos trazados sin duplicar comandos
Corregido
- Los colores de shader y patrón de mosaico trazados ahora escriben el operador de color de patrón de trazo en vez de actualizar el estado sin trazo
Version 3.146.0
Añadido
- Añadidos
BeginOptionalContentyEndOptionalContentpara marcar solo comandos posteriores con un grupo opcional sin reescribir el flujo existente
Corregido
- Los operadores marked-content de cierre de ámbito ahora se vacían de inmediato al cerrar optional content, Tagged PDF o Artifact al final de un flujo
Version 3.145.0
Añadido
- Añadido
SetTransparencyExpara definir por separado transparencia de relleno y trazo en texto y gráficos posteriores conservando la actualización automática a PDF 1.4
Version 3.144.0
Añadido
- Añadido
AddLinkToNamedDestinationpara saltar desde un hotspot a un destino nombrado del mismo documento sin resolver la página al crear el enlace
Corregido
- Los lectores de acciones de anotación ahora devuelven ninguna acción para páginas sin anotaciones en vez de desreferenciar una caché vacía
Version 3.143.0
Añadido
- Añadidas API de gestión de acciones de campos para vincular acciones existentes a disparadores, inspeccionar acciones tipadas y quitar acciones principales o adicionales
Corregido
FormFieldJavaScriptActionahora rechaza documentos PDF/A y disparadores inválidos en vez de escribir diccionarios de acciones no conformes
Version 3.142.0
Añadido
- Se añadieron API de encadenamiento de acciones para que los llamadores puedan anexar acciones siguientes URI, con nombre y JavaScript a una anotación, un esquema o una acción de campo de formulario existentes, e inspeccionar las acciones encadenadas mediante
GetActionNextCountyGetActionNextInfo
Version 3.141.0
Añadido
- Añadido
AddLinkToSubmitFormyAddLinkToResetFormpara que los puntos de acceso de la página puedan enviar o restablecer campos AcroForm a través de acciones PDF estándar sin JavaScript
Version 3.140.0
Añadido
- Añadido
AppendToStreampara que los flujos de trabajo de actualización incremental puedan escribir directamente en un flujo proporcionado por el llamador en lugar de materializar primero la actualización como unAnsiString
Cambiado
SaveToStreamahora serializa directamente en el flujo de destino, yAppendToString(1)ahora devuelve solo la sección de actualización incremental sin copiar los bytes de origen originales en un búfer temporal
Version 3.139.0
Añadido
- Añadido
GetAnnotReplyToyGetAnnotReplyTypepara que las respuestas de anotación en hilos puedan ser inspeccionadas a través de descriptores de acceso de lectura con nombre en lugar de etiquetas de propiedades de anotación genéricas
Version 3.138.0
Añadido
- Añadido el ejemplo de Delphi
DocumentInspectionWorkbenchpara inspeccionar documentos PDF por lotes con diagnósticos de fuentes combinados, muestreo de imágenes, descubrimiento de espacios de color, tiempos de carga e informes en JSON, CSV y HTML
Version 3.137.0
Añadido
- Añadido el ejemplo de Delphi
ImageDecodeBenchmarkpara medir el descubrimiento de imágenes de página, bytes de imágenes decodificadas y descubrimiento de espacios de color de página con informes de tiempo en CSV y HTML
Version 3.136.0
Añadido
- Añadido
GetDocumentFontDiagnosticsyTPDFlibFontDiagnosticspara resumir las incrustaciones de fuentes del documento, la creación de subconjuntos, los conteos de Standard 14, CID, Type3 y fuentes desconocidas en una sola llamada
Version 3.135.0
Añadido
TPDFlibSignatureVerifier.VerifySignerCertificateChainahora construye la cadena de certificados del firmante incrustada con la API criptográfica de Windows (CryptoAPI) y devuelvevsValidsolo cuando la cadena cumple con la directiva de confianza base de Windows, mientras que los certificados autofirmados o de otra manera no confiables devuelvenvsInvalidsin cambiar el resultado de integridad de contenido deVerifySignature
Version 3.134.0
Corregido
TPDFlibSignatureVerifier.VerifySignatureahora valida firmas heredadasadbe.pkcs7.sha1, devolviendovsValidcuando el resumen firmado coincide con los bytes cubiertos por/ByteRangeyvsInvaliddespués de que el contenido cubierto cambia
Version 3.133.0
Añadido
- Añadido
RenderPagesToFilesyDARenderPagesToFilespara renderizar rangos de páginas arbitrarios en archivos de salida numerados mientras se reutiliza la configuración del renderizador a través de las páginas seleccionadas.
Version 3.132.0
Añadido
- Añadidos los estampadores de conveniencia
AddPageHeaderyAddPageFooterque colocan texto en un margen superior o inferior fijo en cada página de un rango, con alineación izquierda/centro/derecha y expansión de tokens (&Ppágina actual,&Ntotal de páginas,&Dfecha,&Ttítulo del documento,&&ersand literal). StampTextyStampImageconsoUnderlayahora colocan verdaderamente el contenido debajo del contenido existente de la página anteponiendo una nueva capa de contenido (anteriormente se dibujaba encima comosoOverlay); respaldado por un nuevo método del árbol de páginasPrependContentLayer.
Version 3.131.0
Añadido
- Añadido
ScalePage(ScaleX, ScaleY, Anchor)que escala el contenido de la página seleccionada envolviendo cada capa de contenido en un bloque de estado de gráficosq sx 0 0 sy tx ty cm ... Qy redimensionando el MediaBox y CropBox; el ancla mantiene el origen inferior izquierdo (0), centra el contenido (1) o mantiene el superior izquierdo (2). - Ampliado
EnumPageElementscon un nuevo tipo de elementoekPath: cada página ahora también reporta sus trazados vectoriales con una caja delimitadora, cantidad de puntos, bandera de cierre y operador de pintura, extraídos de los flujos de contenido a través del modelo de contenido estructurado.
Version 3.130.0
Añadido
- Añadidas tres APIs de optimización del tamaño de archivo que reducen los documentos cargados al volver a guardarlos:
SubsetEmbeddedFontsreescribe cada programa de fuente TrueType incrustado (FontFile2) reduciéndolo a los caracteres Unicode que el documento realmente renderiza a través del servicioCreateFontPackagede FontSub.dll;DownsampleImages(MaxDPI, Quality, Filter)decodifica cada XObject de imagen por encima del DPI objetivo, lo remuestrea (caja o bilineal) y lo recodifica como JPEG o PNG;NormalizeLZWStreamsreescribe cada flujo todavía filtrado con LZWDecode a FlateDecode a través del decodificador LZW existente y el codificador Flate, preservando los parámetros de Predictor.
Version 3.129.0
Añadido
- Añadidas APIs de creación de sombreado de malla para los cuatro tipos de sombreado que anteriormente solo tenían soporte de lectura/análisis:
NewRGBFreeFormTriangleMesh(ShadingType 4, triángulos Gouraud de forma libre),NewRGBLatticeTriangleMesh(ShadingType 5, Gouraud de forma reticular),NewRGBCoonsPatchMesh(ShadingType 6, malla de parches Coons) yNewRGBTensorPatchMesh(ShadingType 7, malla de parches de producto tensorial) — cada una construye un patrón de sombreado de malla con nombre a partir de una lista plana de vértices o parches con profundidad de bits de coordenadas/color seleccionable y una caja delimitadora, seleccionable conSetFillShader/SetLineShader/SetTextShadercomo los sombreadores axiales y radiales existentes.
Version 3.128.0
Agregado
- Agregada una tira de miniaturas para el visor:
TPDFlibThumbnailBarmuestra una miniatura de cada página, renderizada de forma diferida a medida que las filas se desplazan a la vista, con el número de página debajo; al hacer clic en una miniatura, el visor adjunto salta a esa página —completando la familia de controles del visor (visor, panel de marcadores, panel de búsqueda, miniaturas)
Version 3.127.0
Agregado
- Agregado un panel de búsqueda para el visor:
TPDFlibSearchPanel.RunSearchbusca en todo el documento adjunto y enumera una fila por coincidencia con su número de página y texto coincidente; al hacer clic en una coincidencia, el visor salta a esa página
Version 3.126.0
Agregado
- Agregado un panel de marcadores para el visor:
TPDFlibOutlineViewerenumera el árbol de esquema del documento con sangría y hace saltar el visor adjunto (a través deAttachViewer) a la página de destino de un marcador cuando se hace clic en él; se basa en una clase base de panel reutilizable que comparten paneles laterales posteriores
Version 3.125.0
Agregado
- Agregada selección de texto al control del visor: arrastre con el botón izquierdo del ratón para seleccionar, pulse Ctrl+C o llame a
CopySelectedTextpara copiar la selección al portapapeles; el texto capturado está disponible a través de la propiedadSelectedText, ordenado de arriba a abajo con saltos de línea entre bandas - Agregado
GetTextInRegion, que devuelve el texto de una región de página rectangular directamente —la misma búsqueda basada en bloques que utiliza la selección con el ratón, disponible para interfaces de selección personalizadas
Version 3.124.0
Agregado
- El control del visor ahora renderiza previamente las páginas vecinas en un hilo en segundo plano, por lo que avanzar o retroceder de página muestra la página siguiente al instante; el trabajador utiliza su propia instancia de documento y entrega renderizados terminados a la caché sin bloquear la interfaz de usuario
- Agregada interactividad de enlaces al visor: al hacer clic en una anotación de enlace se dispara
OnLinkClickcon el número de página y el mismo resumen de acción tipificada que produceGetAnnotActionInfo(dirección web, destino del documento, acción con nombre, etc.);LinkActionAtPagePointexpone la prueba de impacto subyacente para manipulación personalizada
Version 3.123.0
Agregado
- El control del visor ha obtenido desplazamiento continuo:
SetDisplayModecambiaTPDFlibViewerentre visualización de una sola página y un desplazamiento vertical continuo por todo el documento, con solo las páginas visibles en la ventana gráfica renderizadas y la página actual siguiendo la posición de desplazamiento (disparandoOnPageChangea medida que las páginas aparecen en la vista) - Las páginas renderizadas ahora se mantienen en una caché de mapas de bits usada menos recientemente, por lo que desplazarse hacia adelante y hacia atrás no vuelve a renderizar; el presupuesto de memoria es por defecto de 128 MB y se ajusta con
SetCacheLimit, expulsando las páginas más antiguas cuando el presupuesto se reduce o se llena - Agregado el desplazamiento con la rueda del ratón y la navegación por teclado al visor: RePág/AvPág (pasos de página en modo de una sola página, pasos de ventana gráfica en modo continuo), teclas de flecha, Inicio y Fin
Version 3.122.0
Agregado
- Agregado un control de visor de PDF interactivo:
TPDFlibVieweres un control de desplazamiento VCL que abre un documento desde un archivo o se adjunta a una instancia existente deTPDFlib, muestra páginas a través del motor de renderizado seleccionado (GDI+, Cairo o PDFium) y ofrece navegación de páginas (GoToPage/NextPage/PrevPagecon un eventoOnPageChange) y control de zoom —un porcentaje fijo, ajustar al ancho o ajustar a la página, recalculado automáticamente cuando el control cambia de tamaño; las páginas más anchas que la ventana gráfica se desplazan, las más estrechas se centran - Agregado un paquete de tiempo de diseño (
Package\PDFlibViewerPkg.dpk) que registra el control en la página de la paleta de PDF de losLab para su uso de arrastrar y soltar en el IDE
Version 3.121.0
Agregado
- Modelado automático de secuencias de comandos complejas en
DrawText: el texto que contiene caracteres árabes, hebreos, índicos u otras secuencias de comandos complejas ahora se detecta y se modela automáticamente —las formas contextuales de letras, las ligaduras obligatorias y el orden de derecha a izquierda salen correctamente sin cambios en el código; los nombres estándar-14 se asignan a sus caras instaladas compatibles con métricas (Helvetica a Arial, Times a Times New Roman, Courier a Courier New) yGetTextWidthmide a través de la misma pasada de modelado para que la alineación se mantenga coherente; el texto latino, cirílico, griego y CJK mantiene su ruta de dibujo existente byte por byte - Agregado
SetTextShapingpara alternar el enrutamiento automático (habilitado por defecto; pase 0 para restaurar el comportamiento exacto previo al modelado)
Version 3.120.0
Modificado
- Las fuentes compañeras de texto modelado ahora se subconjuntan en el momento de guardar a solo los glifos que muestra el documento, reduciendo drásticamente los archivos de salida (un programa de fuente completo de más de un megabyte se reduce a los glifos utilizados); la fuente subconjuntada mantiene su numeración de glifos, lleva un nombre
BaseFontetiquetado como subconjunto y anchos reales por glifo/W, y obtiene un mapa ToUnicode que traduce cada glifo modelado a sus caracteres de origen —por lo que copiar o extraer la salida deDrawShapedTextdevuelve la cadena original, incluidas ambas letras detrás de una ligadura lam-alef
Version 3.119.0
Agregado
- Agregado el dibujo de texto de secuencias de comandos complejas:
DrawShapedTextmodela cadenas árabes, hebreas y otras secuencias de comandos complejas antes de dibujarlas —las formas contextuales de letras, las ligaduras obligatorias como lam-alef y el orden de derecha a izquierda salen correctamente— y escribe los glifos modelados a través de una fuente Type0 (Identity-H) compañera incrustando todo el programa de fuentes, por lo que las formas sin un código de caracteres propio se renderizan exactamente; se crea una fuente compañera por cara y se reutiliza en todas las llamadas - Agregado
GetShapedTextWidth, que mide el texto a través de la misma pasada de modelado, por lo que el texto ligado se mide con su ancho de dibujo verdadero —utilícelo para alinear a la derecha o centrar párrafos modelados
Version 3.118.0
Agregado
- Agregada la base para el modelado de texto de secuencias de comandos complejas: un nuevo enlace Uniscribe (usp10.dll) convierte cadenas en árabe, hebreo y otras secuencias complejas en ejecuciones de glifos correctamente ordenadas y modeladas —formas contextuales árabes, ligaduras obligatorias como lam-alef, y ordenamiento de derecha a izquierda— informando del índice de glifo de fuente, avance y clúster de caracteres de origen de cada glifo; este es el motor de modelado en el que versiones posteriores construirán la ruta de dibujo, y se carga de forma diferida para que las plataformas sin Uniscribe simplemente mantengan la ruta existente por carácter
Version 3.117.0
Agregado
- Agregada introspección de perfiles ICC:
GetOutputIntentICCInfoanaliza el perfil ICC adjunto a OutputIntent del documento e informa su versión, clase de dispositivo, espacio de color de datos, espacio de conexión de perfil, propósito de representación (rendering intent) y número de componentes —útil para inspeccionar la condición de impresión de los archivos PDF/A y PDF/X; el manejo del espacio de color ICCBased del renderizador ahora también deriva el número de componentes desde el propio encabezado del perfil cuando el espacio de color de un sombreado no lleva/Alternateni/N
Version 3.116.0
Agregado
- Agregado un modo de extracción de texto compatible con tablas: la opción 10 de
GetPageTextagrupa los bordes izquierdos de los bloques de texto de la página en posiciones de columnas globales y emite filas separadas por tabulaciones, para que los diseños tabulares se extraigan como TSV listo para importar con las celdas alineadas verticalmente manteniéndose alineadas en las distintas filas
Version 3.115.0
Agregado
- Agregada imposición de páginas:
ImposePagesNUpdiseña cada página del documento en hojas nuevas en una cuadrícula n-up (2-up, 4-up, 9-up o cualquier disposición de Columnas x Filas) con cada página adaptada y centrada en su celda como contenido vectorial activo, o —con la opción booklet (folleto)— produce hojas grapadas (saddle-stitch) cuyo emparejamiento de páginas se pliega en un folleto cuando se imprimen a doble cara y se apilan
Version 3.114.0
Agregado
- Se ampliaron los lectores de acciones tipadas
GetAnnotActionInfoyGetOutlineActionInfoa cuatro tipos de acciones más — Hide (Ocultar, con el número de destinos ocultos y la bandera ocultar/mostrar), SubmitForm (Enviar formulario, con URL de envío y recuento de campos), ResetForm (Restablecer formulario, con recuento de campos) e ImportData (Importar datos, archivo fuente)— y para exponer la carga útil del nombre de acciones Nombradas (por ejemplo,NextPage); ambos lectores ahora comparten un solo analizador, por lo que los enlaces de anotación y los marcadores informan de información idéntica
Version 3.113.0
Agregado
- Agregados ayudantes de formato de campos de formulario:
SetFormFieldNumberFormat(posiciones decimales, estilo de separador, estilo de número negativo y ubicación de moneda),SetFormFieldPercentFormatySetFormFieldDateFormat(cadenas de formato de fecha Acrobat comomm/dd/yyyy) escriben el par estándar de JavaScript de formato de Acrobat en las acciones adicionales del campo —un filtro de teclas y un formateador de visualización— de modo que los visores compatibles validan la entrada y renderizan los valores formateados sin código JavaScript escrito a mano
Version 3.112.0
Agregado
- Agregada creación de anotaciones de sonido (Sound):
AddSoundAnnotationFromFilelee un archivo WAV PCM sin comprimir (8 o 16 bits, mono o estéreo) e incrusta sus muestras detrás de una anotación con ícono de altavoz como un flujo/Sounden la codificación con signo que espera la maquinaria de sonido de PDF, completando el ciclo de ida y vuelta con los lectores existentesGetAnnotSoundToFile/GetAnnotSoundToString
Version 3.111.0
Agregado
- Agregadas respuestas de anotación en hilos (ISO 32000-1 §12.5.6.3):
AddAnnotationReplyagrega una respuesta a cualquier anotación existente como una anotación oculta de Texto cuyo/IRThace referencia al destino con la relación de respuesta/RT, de modo que Acrobat y otros visores lo muestran enhebrado bajo el destino en el panel de comentarios; se puede combinar conAddAnnotationStatey el intercambio de comentarios FDF para ciclos completos de revisión colaborativa
Version 3.110.0
Agregado
- Agregado soporte para renderizado de sombreado de malla y basado en función, completando la cobertura de los siete tipos de sombreado PDF: mallas de triángulos Gouraud de forma libre (tipo 4), mallas Gouraud en red (tipo 5), mallas de parche Coons (tipo 6) y mallas de parche de producto tensorial (tipo 7) se decodifican desde sus secuencias de datos empaquetadas en bits —incluidas banderas de parches de borde compartido, mapeo de valores
/Decodey rampas de color/Functionopcionales— y se pintan a través de gradientes de malla nativos del motor Cairo; los sombreados basados en funciones (tipo 1) se aproximan muestreando la función de sombreado en su dominio dentro de una cuadrícula fina de parches; los espacios de color admitidos cubren DeviceRGB, DeviceGray, DeviceCMYK y colores alternos ICCBased (el motor GDI+ no tiene una primitiva de gradiente de malla y deja sin pintar las áreas sombreadas por malla)
Version 3.109.0
Agregado
- Completado el marco de edición de contenido (fase 4) con edición a nivel de texto:
TPDFContentProgram.GetTextRunsenumera las instrucciones que muestran texto de una página con el recurso de fuente y el tamaño activo en cada una (rastreando el estado de la fuente a través del anidamiento de guardado/restauración), yReplaceTextRunintercambia el texto mostrado en su lugar —un verdadero reemplazo de secuencia de contenido que mantiene la posición, la fuente y el color originales, a diferencia de los enfoques basados en superposición que enmascaran el texto antiguo y dibujan encima—
Version 3.108.0
Agregado
- Agregado un modelo de objetos para la geometría de la página al marco de edición de contenido (fase 3):
TPDFContentProgram.LiftPatheleva un objeto de ruta (operadores de construcción mover/línea/curva/rectángulo más los operadores de recorte y pintura que lo terminan) a un editableTPDFPathde subrutas y segmentos;TPDFPath.Transformaplica una matriz afín a cada punto (mover, escalar, rotar o inclinar el material gráfico existente);LowerPathreescribe la geometría modificada sobre las instrucciones originales, lista paraWritePageContentLayer
Version 3.107.0
Agregado
- Extendido el marco de edición de contenido (fase 2) con comodidades a nivel de instrucción en
TPDFContentProgram:InsertFromSourceanaliza un fragmento de contenido y empalma sus instrucciones en cualquier posición;SetOperandreescribe un solo operando de la sintaxis de origen (renumerar una coordenada, cambiar el color de un relleno);OperandTextlee un operando hacia atrás;InstructionGroup,FindNextOpyFindNextGroupnavegan por la lista de instrucciones por operador o por la categoría del operador ISO 32000-1
Version 3.106.0
Agregado
- Agregada la primera fase del marco de edición de contenido estructurado:
ParsePageContentLayerdecodifica una capa de contenido de página en un editableTPDFContentProgram—una lista de instrucciones, donde cada una es un operador de contenido de PDF (los 73 operadores de ISO 32000-1 Tabla 51) con sus objetos operando decodificados— yWritePageContentLayerserializa el programa nuevamente a la página, por lo que los usuarios pueden analizar, inspeccionar, eliminar o reordenar las instrucciones de dibujo y reescribir la página;GetPageContentLayerCountinforma la cantidad de capas de contenido, que se editan de forma independiente; el emisor preserva el comportamiento (un viaje de ida y vuelta sin modificaciones se renderiza con idéntica resolución de píxeles), los operadores desconocidos sobreviven sin cambios y las imágenes en línea se trasladan literalmente
Version 3.105.0
Agregado
- Agregado un modo de extracción de texto en orden de lectura: la opción 9 de
GetPageTextdevuelve el texto de la página en orden de lectura visual usando un análisis de espacios en blanco recursivo (corte XY), para que los diseños de múltiples columnas se muestren columna a columna —primero un encabezado de ancho completo, luego toda la columna izquierda, y posteriormente la columna derecha— en lugar de intercalar las columnas línea por línea como lo hacen los ordenamientos geométricos de arriba y hacia la izquierda
Version 3.104.0
Agregado
- Agregada introspección del certificado de firmante al verificador de firmas:
GetSignerCertificatedecodifica la carga útil PKCS#7 del primer campo de firma y devuelve un resumen tipado del certificado de firmante integrado —nombres para visualización del sujeto y emisor, el número de serie en formato hexadecimal convencional, la ventana de validez UTC (NotBefore/NotAfter) y una bandera de conveniencia que informa si el certificado se encuentra actualmente dentro de esa ventana; el firmante se empareja entre los certificados incrustados según emisor y número de serie
Version 3.103.0
Agregado
- Agregado
NewRGBRadialShader, la contraparte radial deNewRGBAxialShader: registra un gradiente radial (ShadingType 3, ISO 32000-1 §8.7.4.5.3) nombrado de dos círculos que se mezcla entre dos colores RGB, con una extensión de color opcional más allá de los círculos; selecciónelo con las funciones existentesSetFillShader,SetLineShaderoSetTextShaderpara pintar rellenos, trazos y texto con un “resplandor” circular
Version 3.102.0
Agregado
- Agregado soporte para renderizado de gradientes (ShadingType 3) radiales (ISO 32000-1 §8.7.4.5.4): el renderizador de páginas ahora pinta sombreados radiales de dos círculos usados por los operadores
shy los rellenos de patrón de sombreado, además de los gradientes axiales (ShadingType 2) ya soportados anteriormente; con soporte tanto del motor GDI+ como de El Cairo con funciones de color multi-parada, así como para espacios de color DeviceRGB/DeviceCMYK/DeviceN/Separation/ICCBased y manejo de/Extend
Version 3.101.0
Agregado
- Agregado soporte para efectos de bordes nublados (ISO 32000-1 §12.5.4):
SetAnnotCloudyEffecttransforma el borde de una anotación Cuadrada, Círculo, Polígono o Texto Libre en una “nube de revisión” compuesta por semicírculos conectados al escribir el diccionario de efectos de borde/BE, con intensidades de 1 o 2 que coinciden con los estilos Nublado de Acrobat y una de 0 para eliminar el efecto de nuevo;GetAnnotCloudyEffectlee la configuración (0 = sin nube, de lo contrario devuelve la intensidad de 1..2)
Version 3.100.0
Agregado
- Agregado soporte para estados de revisión de anotaciones (ISO 32000-1 §12.5.6.3):
AddAnnotationStateregistra un cambio de estado de revisión para una anotación existente agregando una anotación oculta de Texto cuyo/IRTapunta al objetivo y su/State+/StateModelcontienen el estatus. Admite el modelo de revisiónReview(Ninguno/Aceptado/Rechazado/Cancelado/Completado) y el modeloMarked(Sin marcar/Marcado) utilizado en el flujo de revisión y comentarios de Acrobat;GetAnnotStateyGetAnnotStateModeldevuelven las cadenas leídas (vacío si no está presente)
Corregido
- Corregida falla en el tiempo de carga que impedía el inicio de aplicaciones construidas con las versiones recientes en desarrollo (búsqueda de un nombre de certificado de Windows vinculada a un punto de entrada de DLL inexistente), y se repararon regresiones de compilación en la importación de comentarios de FDF, en la rotación de un rango de páginas y las rutas de indicadores de firmas
Version 3.99.0
Añadido
- Agregadas API de lectura de huella digital del documento y de transición:
GetDocumentFileIDdevuelve el identificador de documento permanente de la matriz/IDdel tráiler (primer elemento codificado en hexadecimal), útil como una clave de caché estable o huella digital del documento;GetPageTransitiones la contraparte de lectura deSetPageTransition, que devuelve el estilo de transición como un valor tipadoTPDFlibPageTransitionademás de la duración de visualización y la duración de la transición al mapear de forma inversa las entradas almacenadas/S,/Dmy/Mde/Trans
Version 3.98.0
Añadido
- Agregada introspección de miniaturas y rotación de rango de páginas:
RotatePageRangeaplica una rotación de 0/90/180/270 a cada página en un rango (envolviendo elRotatePagede una sola página existente para que los invocadores ya no necesiten un bucle por página);HasPageThumbnailinforma si una página contiene una entrada/Thumb;GetPageThumbnailInfolee el ancho, el alto y los bits por componente del XObject de la imagen de miniatura
Version 3.97.0
Añadido
- Agregados lectores extendidos de propiedades de anotación:
GetAnnotColorlee la matriz de color/C(0..1 RGB, con una bandera HasColor que distingue “sin color explícito” de “negro explícito”);GetAnnotBorderWidthlee/BS /W, recurriendo a la matriz heredada/Border;GetAnnotOpacitylee el alfa de trazo/CA(predeterminado 1.0);GetAnnotCreationDatelee la marca de tiempo de/CreationDate;GetAnnotFlagslee el byte de banderas de visibilidad/impresión/F
Version 3.96.0
Añadido
- Agregadas API de introspección de seguridad del lado de lectura:
IsEncryptedinforma si el documento cargado contiene un diccionario/Encrypt;GetEncryptionLeveldevuelve una fortaleza tipada (0=ninguna, 1=RC4-40, 2=RC4-128, 3=AES-128, 4=AES-256, 5=AES-256 Acrobat X) que coincide con las opciones de cifrado del lado de escritura;GetUserPermissionsdevuelve la palabra de permiso/Psin procesar para pruebas directas de bits;IsOwnerPasswordinforma si el documento se abrió con la credencial del propietario
Version 3.95.0
Añadido
- Agregados reemplazo de texto e impresión avanzada:
PrintDocumentAdvancedcontrola el DEVMODE completo de la impresora (dúplex, orientación, color, calidad de impresión, tamaño de papel, bandeja de papel) además de copias/intercalación a través de un registro tipadoTPDFlibPrintSettings, aplicando cada campo no predeterminado mediante el mecanismo de perfil de impresora personalizada existente;SearchAndReplaceTextejecuta una búsqueda en un rango de páginas y, para cada coincidencia, enmascara el bloque de texto original con un rectángulo blanco opaco y redibuja el texto de reemplazo en el origen del bloque en la fuente seleccionada por el invocador, reflejando el comportamiento de superposición-reemplazo de PDFtoolkit SearchAndReplace
Version 3.94.0
Añadido
- Agregado el intercambio de anotaciones FDF (Acrobat “Export/Import Comments”):
ExportAnnotationsToFDFStringyExportAnnotationsToFDFrecorren las/Annotsde cada página y serializan cada anotación como una entrada/Type /Annotdentro de una matriz/Annotsde FDF, llevando/Subtype,/Contents,/Rect, la etiqueta de autor/T,/Subjy el índice/Pagebasado en 0;ImportAnnotationsFromFDFStringyImportAnnotationsFromFDFanalizan dicho FDF con una pequeña máquina de estados y recrean cada entrada como una nueva anotación en la página correspondiente, preservando el diccionario de anotaciones completo en lugar de colapsarlo a una nota adhesiva