Notas de las versiones del componente PDFium para Delphi
Historial de versiones de las funciones visibles para el usuario, correcciones, mejoras del visor, generación de documentos, salida PDF/A, renderizado y actualizaciones de documentación de PDFium Delphi Component
Última versión
- Última versión: 3.137.1; Fecha de lanzamiento:
Version 3.137.1
Corregido (Fixed)
- Las comprobaciones de revocación en línea de OpenSSL conservan el estado CRL anterior, su motivo, su error nativo y el certificado afectado cuando no hay evidencia ni responder OCSP disponibles, manteniendo diagnósticos precisos de CRL caducadas
Version 3.137.0
Añadido (Added)
- Las compilaciones nativas Free Pascal/LCL admiten Linux Qt6 y macOS Cocoa con resolución de fuentes de plataforma, almacenamiento temporal privado, carga de documentos, edición, formularios, guardado y renderizado
- La firma con macOS Keychain admite una ruta Keychain local a la consulta y exportación offline acotada de la cadena de certificados, con firma y transportes de timestamp nativos Free Pascal y Delphi
- El renderizado paralelo informa de la ruta real del módulo, dirección de inicialización y resultado de descarga de cada worker, y rechaza cargadores nativos que reutilicen una imagen PDFium existente
Corregido (Fixed)
- Los bindings PDFium de Unix conservan los anchos LP64 de unsigned-long en callbacks y búferes, incluidas lecturas de flujos personalizados más allá de 4 GiB
- El renderizado LCL nativo respeta el orden de bytes y el layout de canales del bitmap, conservando los colores en la salida Cocoa y el renderizado a contextos de dispositivo
- El renderizado de bitmaps, teselas y progresivo conserva el alfa de fondo transparente para clNone y clDefault con independencia de la consulta nativa de transparencia de página
- La firma identifica correctamente los algoritmos de clave pública de certificados, incluidas las claves EC; la verificación CMS de macOS conserva resultados independientes de firma exterior y timestamp e informa explícitamente de la verificación RSA-PSS no admitida
- La validación de timestamps PAdES exige una EKU id-kp-timeStamping crítica y exclusiva; OpenSSL evalúa cadenas TSA básicas sin aplicar incorrectamente un propósito de certificado S/MIME
- Los commits atómicos de ficheros Unix conservan la nueva base incremental cuando falla un vaciado de directorio tras la sustitución, exponiendo la excepción de salida confirmada y el resultado de durabilidad incompleto
Cambiado (Changed)
- Los futures Delphi POSIX aceptan la prioridad de hilo predeterminada y rechazan las prioridades no admitidas antes de iniciar un worker
Version 3.136.0
Añadido (Added)
- Las transformaciones ICC LittleCMS opcionales y la conversión de color de documentos usan los componentes originales de texto, vectores e imágenes de 8 o 16 bits, conservan las tintas planas seleccionadas e informan explícitamente del contenido no admitido
- La redaction compleja conserva contenido admitido en Form XObjects anidados, trazados curvos rellenos e imágenes rotadas, reflejadas o sesgadas, con presupuestos geométricos finitos e informes detallados de eliminación
- La lectura de objetos activos expone presupuestos independientes para cuerpos de objetos y flujos de objetos comprimidos antes de materializar y decodificar
Seguridad (Security)
- La redaction rechaza texto de sustitución Tagged, XFA, capas de contenido opcional, recorte de texto y estados de pintura no verificables, incluidos operadores divididos entre flujos de contenido, e impide exportar semántica de contenido sensible no admitida
Version 3.135.0
Añadido (Added)
- La comparación de anotaciones y widgets AcroForm informa de cambios de propiedades con independencia de los píxeles de página, mediante nombres estables, correspondencias de páginas explícitas, informes de ambigüedad y límites de superposición anteriores y posteriores
- Las celdas de tabla admiten estilos de texto mixto e imágenes con texto alternativo, continuación opcional de celdas que abarcan páginas, filas de subtotales y etiquetas de continuación, conservando las relaciones Tagged PDF
Corregido (Fixed)
- La generación de layout etiquetado inicializa la biblioteca nativa antes de comprobar capacidades, por lo que puede ser la primera operación de un componente de documento nuevo
- Varias sustituciones en un objeto de texto se ajustan una sola vez a sus límites originales, respetando la escala horizontal mínima global y evitando ediciones intermedias innecesarias
Version 3.134.0
Añadido (Added)
- La combinación de navegación conserva destinos con nombre y enlaces internos a través de páginas seleccionadas, reordenadas y repetidas, con políticas explícitas de colisiones y verificación transaccional
- La sustitución de texto con estilos añade planes de origen verificados, vistas previas independientes, reutilización de fuentes nativas, fallback explícito, ajuste horizontal acotado y rollback tras ediciones fallidas o canceladas
- La firma OpenSSL acepta claves privadas y cadenas de certificados configuradas explícitamente para RSA-PSS, RSA PKCS#1 v1.5 y ECDSA, incluida la resolución predeterminada de firmantes fuera de Windows
- La verificación OpenSSL añade evidencia OCSP autenticada offline y en línea acotada, identidades de certificados fallidos y diagnósticos opcionales de cada firmante CMS
- El verificador FPC macOS de Security.framework informa de resultados independientes de criptografía, confianza de cadena y revocación, con anclajes explícitos y evidencia OCSP proporcionada
Corregido (Fixed)
- La extracción de URI de anotaciones de enlace proporciona el búfer nativo completo, incluido su terminador, para devolver correctamente los destinos válidos
Version 3.133.0
Añadido (Added)
- La combinación transaccional AcroForm admite páginas seleccionadas, rechazo de campos, renombrado, espacios de nombres y campos compartidos compatibles de texto/selección, con recursos, apariencias y orden de cálculo aislados
- El proveedor opcional de códigos de barras genera Code128, QR, DataMatrix y PDF417 y reconoce imágenes en escala de grises, con dependencias nativas explícitas y presupuestos finitos de procesamiento
Corregido (Fixed)
- FormField lee valores heredados del padre y confirma ediciones de texto de forma coherente entre widgets compartidos, con valores persistentes al guardar y volver a abrir y comprobaciones de solo lectura
- La regeneración de apariencias de widgets de texto heredados restaura sus valores del padre sin dejar un valor que los oculte en el widget, y la asignación correcta de campos invalida las cachés de páginas compartidas
Version 3.132.0
Añadido (Added)
- La alineación opcional de páginas identifica páginas insertadas, eliminadas y movidas, con cambios de texto Unicode acotados, regiones visuales conectadas y superposiciones de comparación exportables
- La combinación transaccional de navegación conserva jerarquía de marcadores, estilos, acciones URI y destinos reasignados al importar páginas seleccionadas, repetidas y reordenadas
- El proveedor OCR Tesseract opcional admite diagnósticos explícitos de dependencias, geometría de palabras Unicode, cancelación y presupuestos de reconocimiento, con verificación de la capa buscable al guardar y volver a abrir
Seguridad (Security)
- La política RSA-PSS evalúa parámetros completos de firma y de clave pública restringida, rechazando DER malformado y restricciones incompatibles de hash, máscara, sal o trailer
Corregido (Fixed)
- La verificación al guardar marcadores ya no rechaza los marcadores hoja por una diferencia de estado expandido que solo corresponde a ramas
Version 3.131.0
Añadido (Added)
- WatermarkStamp acepta ahora PDF de destino y sello, un intervalo de páginas de destino y salida solo con números de página, con colocación proporcional para tamaños de página mixtos
- MergePDF muestra ahora las páginas seleccionadas de cada entrada y su intervalo de destino antes de combinarlas, y admite una única entrada para extraer páginas
Corregido (Fixed)
- MergePDF valida cada origen antes de importar y se detiene ante entradas ilegibles, rangos inválidos, importaciones fallidas o cancelación, en lugar de guardar una combinación incompleta
- WatermarkStamp conserva los ficheros de origen y plantilla y guarda de forma fiable los números de página incluso si ambas superposiciones de sello están desactivadas
Cambiado (Changed)
- Cada directorio de demos nativos se centra en 22 flujos completos y traslada SecurityAudit y XfdfLab a Miscellaneous, con rutas de proyectos y navegación corregidas
Eliminado (Removed)
- Se elimina el recorrido fijo AnnotationsLab; la creación, inspección e intercambio de anotaciones siguen cubiertos por ejemplos XFDF, extracción de contenido y pruebas de API
Version 3.130.0
Cambiado (Changed)
- Cada directorio de demos nativos se organiza ahora en torno a 24 flujos de trabajo completos, con nueve temas de API focalizados bajo Miscellaneous y una guía aparte para elegir el primer demo
- Los ejemplos focalizados de anotaciones, accesibilidad, fuentes, navegación, exportación de texto, renderizado a imágenes de página, preferencias de impresión, interacción y XFA siguen disponibles con su propio código fuente y sus datos de entrada incluidos
Eliminado (Removed)
- Se han eliminado los proyectos mínimos CJKTextLab y RTLTextLab; la creación de texto Unicode sigue disponible en CreatePDF, y las APIs de texto con shaping siguen documentadas en la referencia API
Corregido (Fixed)
- El recorrido por la API de accesibilidad de C++Builder ya no falla al exportar su guion de voz
- El ejemplo de anotaciones de C++Builder ya no usa desplazamientos de array incorrectos para las coordenadas de resaltado
Version 3.129.0
Cambiado (Changed)
- Todos los demos nativos son ahora autocontenidos: la lógica de ejemplo se ha movido a los proyectos que la usan, los PDF del showcase se incluyen con los proyectos de visualización y extracción correspondientes, y se ha eliminado el directorio Demo/Shared
- Los recorridos offline por las funciones, las previsualizaciones en vivo, los formularios editables, los informes con datos, los archivos adjuntos, la navegación, las preferencias de impresión y la inspección de XFA estático siguen disponibles al copiar los proyectos de forma independiente
- FontProperties abre ahora con las métricas reales de fuente y de caracteres ya mostradas, y analiza de inmediato el primer objeto de texto tras abrir otro documento
Corregido (Fixed)
- La posición y el fondo de la barra de experiencia de PDFViewer son ahora coherentes entre las variantes nativas, y FontProperties libera su asociación con el visor antes del apagado
Version 3.128.0
Añadido (Added)
- Nuevo demo showcase offline de seis páginas con texto real, gráficos vectoriales, imágenes incrustadas, una tabla, campos AcroForm, marcadores, enlaces, anotaciones y archivos adjuntos
- Nuevas experiencias de visualización de un clic para búsqueda de texto, layouts de dos páginas, lectura nocturna, inspección de documentos y exploración de formularios en todas las variantes nativas de PDFViewer
Cambiado (Changed)
- CreatePDF abre ahora una previsualización en vivo de dos páginas con metadatos y opciones de contenido editables, objetos reales de imagen y de anotación, y una página Unicode opcional antes de guardar
- Las muestras focalizadas de visualización, búsqueda, extracción, formularios y navegación abren ahora flujos de trabajo con datos ya cargados; los ejemplos de adjuntos, preferencias de impresión y XFA estático incluyen datos reales propios de cada función
Corregido (Fixed)
- El visor gestiona ahora correctamente su ciclo de vida y el foco durante el arranque, la sustitución de documentos, la regeneración de la previsualización y el cierre
- El editor de valores de FormFill en Lazarus ya no permanece desactivado tras seleccionar el primer campo al arrancar
- SearchAndSelect vincula ahora el documento correctamente, y sus informes de extracción incluyen los campos de formulario de las páginas posteriores y ya no consultan cabeceras de fichero no disponibles para las muestras generadas en memoria
Version 3.127.0
Cambiado (Changed)
- Los demos de MultiPageViewer usan ahora las APIs integradas de selección de texto y portapapeles del visor, de modo que la selección se mantiene consistente entre los distintos layouts de página, y desaparece el modo de selección por doble clic que existía por separado
- La guía de ejemplos mapea los 35 temas de demo a sus flujos de trabajo diferenciados, y los ejemplos de consola de accesibilidad, intake y preflight de Delphi y Lazarus comparten sus implementaciones en Pascal
Añadido (Added)
- XfdfLab puede guardar el PDF tras importar XFDF: la GUI de Delphi ofrece Save PDF, y las variantes de consola aceptan una segunda ruta de salida explícita
Corregido (Fixed)
- Los demos de MultiPageViewer de C++Builder y Lazarus abren sin propiedades de formulario no admitidas, y todos los demos de MultiPageViewer desconectan su documento antes de cerrar
- El workbench de accesibilidad de Lazarus genera miniaturas JPEG de página para su informe de revisión en HTML
- Los demos de ExtractImages crean una muestra de dos páginas que contiene objetos de imagen incrustados reales, de modo que el flujo de extracción predeterminado produce cuatro imágenes
- La muestra de consola de round-trip de XFDF conserva el contenido de las anotaciones y los datos del autor, y rechaza rutas de salida PDF en conflicto o ya existentes antes de escribir la salida
Version 3.126.2
Corregido (Fixed)
- La visualización completa de XFA funciona con la configuración de selección de texto predeterminada, sustituye el texto seleccionado durante la entrada por teclado, respeta los campos de solo lectura y los eventos de formulario desactivados, y refresca los handles de página mostrados tras los cambios dinámicos de layout
- Las librerías V8 de Windows rechazan atributos XDP mal formados, atributos duplicados, uso inválido de espacios de nombres y declaraciones XML desajustadas antes de modificar el flujo XFA guardado
Seguridad (Security)
- El análisis de revisiones de firma preserva la propiedad del contenido de la página cuando los widgets y los objetos de apariencia comparten el mismo grafo de objetos, evitando que ediciones posteriores de página se acepten como actualizaciones permitidas de formulario o de anotación bajo DocMDP
- Los bloqueos FieldMDP siguen vigentes cuando un campo bloqueado y una anotación comparten un objeto de valor indirecto
Version 3.126.1
Corregido (Fixed)
- La repaginación dinámica de XFA actualiza ahora
TPdf.PageCountyOnXfaPageCountChangedcon el número total de páginas real tras añadir o eliminar páginas, manteniendo la navegación del host sincronizada con el layout del formulario - Las librerías V8 de Windows actualizadas refrescan la geometría de los widgets de entrada tras cambios dinámicos de layout de XFA, manteniendo el texto y las áreas de hit de entrada alineadas cuando un campo se muda a otra página
Version 3.126.0
Añadido (Added)
- Las librerías V8 de Win32 y Win64 actualizadas conservan los comentarios XML y las instrucciones de procesamiento ajenos a los datasets y paquetes de formulario activos al guardar documentos XFA de flujo único soportados, incluidas las entradas UTF-8 y UTF-16
Corregido (Fixed)
- El guardado de XFA de flujo único rechaza codificaciones UTF-8 o UTF-16 inválidas, etiquetas incompletas, referencias a entidades inválidas e instrucciones de procesamiento mal formadas en lugar de reescribir esas entradas en silencio; las construcciones no soportadas en paquetes de datos activos, las declaraciones DTD y XMLDSig siguen siendo fallos de guardado explícitos
- Copiar, cortar y pegar texto de formulario en el visor reintentan brevemente cuando otro hilo o aplicación retiene el portapapeles de Windows, dejando que una contención transitoria se resuelva; un corte fallido sigue preservando el texto original del campo
Version 3.125.3
Corregido (Fixed)
- Las librerías ordinarias
pdfium.dllde Win32 y Win64 actualizadas informan ahora de fallo cuando la escritura final del PDF con buffer falla, en línea con la corrección entregada antes en las librerías V8
Version 3.125.2
Corregido (Fixed)
- Las librerías V8 de Windows actualizadas preservan el texto XFA editado al guardar y reabrir, incluidos valores vacíos, espacios en blanco originales, saltos de línea y caracteres Unicode suplementarios, para arrays de paquetes y documentos XDP de flujo único soportados
- Los errores de exportación de paquetes XFA y los fallos del escritor final con buffer informan ahora de fallo de guardado en las librerías V8 actualizadas, sin limpiar el estado de modificación del documento; los documentos de flujo único que contienen construcciones XML no soportadas o firmas XML se rechazan
- Las librerías V8 actualizadas preservan la plataforma V8 y el isolate que la aplicación host suministró explícitamente durante la inicialización y destrucción de PDFium
- Una ruta explícita en
LibraryNameselecciona ahora exactamente ese runtime en cualquiera de los modos de motor, incluidoEnableV8Engine=True; si falta una ruta explícita la carga falla en lugar de cargar otra librería incluida
Version 3.125.1
Corregido (Fixed)
ValidatePdfFilesParallelya no corrompe el motor PDFium compartido: los hilos worker abrían e inspeccionaban documentos en concurrente, lo que hacía que algunos documentos fallaran con errores de carga o access violations y podía tirar abajo el proceso o romper operaciones PDF posteriores; el lado PDFium de cada documento se procesa ahora de uno en uno mientras que la evaluación de reglas sigue ejecutándose en paralelo- Un documento que no llega a abrirse durante la validación por lotes informa ahora del error de carga real en lugar del mensaje subsiguiente «no active PDF document»
Version 3.125.0
Añadido (Added)
PdfLibraryConfigurationSupportErrorindica si unaTPdfLibraryConfigurationpuede usarse con una compilación de PDFium con unas capacidades Skia y Fontations dadas
Corregido (Fixed)
- Solicitar
prpSkiaen una compilación de PDFium sin Skia, opfbpFontationsen una compilación sin Fontations, hace ahora que la carga de la librería lanceEPdfErroren lugar de chocar con una comprobación nativa que detenía el proceso o dejaba PDFium a medio inicializar; la configuración queda sin sellar para que la aplicación pueda elegir otros ajustes y volver a cargar
Version 3.124.0
Cambiado (Changed)
- La validación PAdES aplica ahora las suites de firmas de ETSI TS 119 312 a las firmas RSA en lugar de aceptar cualquier algoritmo RSA:
AlgorithmPolicyStatusespcsInvalidpara los digests MD2, MD4 y MD5, ypcsIndeterminatepara SHA-1 y los digests de 112 bits como SHA-224, que ya no se dan por buenos en la validación actual; las firmas SHA-1 conservan su resultado global de integridad y se marcan para revisión en vez de rechazarse - Una firma RSA cuyo
digestAlgorithmdifiere del digest fijado por su algoritmo de firma (por ejemplo sha256WithRSAEncryption sobre un digest SHA-1) se informa ahora comoppeiSignatureAlgorithmMismatchy falla la integridad, igual que los algoritmos de firma RSA sobre una clave de firmante que no es RSA - Las firmas RSA cuyo certificado de firmante no se encuentra informan ahora
pcsIndeterminate, igualando el comportamiento existente de ECDSA; los digests no reconocidos y los OID RSA que no son de firma informanpcsUnsupported - Las firmas RSA PKCS #1 v1.5 con digests SHA3 y el identificador OIW heredado sha1WithRSASignature se reconocen ahora como RSA
Version 3.123.0
Añadido (Added)
PdfNativeRendererTypeindica qué renderizador selecciona unaTPdfRendererPreferencepara una compilación dada de PDFium, conprpDefaultresolviendo a Skia en los runtimes con Skia activado y a AGG en caso contrario
Corregido (Fixed)
- Activar
BrotliEnabledoIsolatePerDocumentenConfigurePdfLibraryya no cambia el renderizado de Skia a AGG cuando la preferencia de renderizador se deja enprpDefault; los runtimes incluidos con Skia conservan ahora su renderizador por defecto, de modo que la salida de las páginas ya no cambia con estas opciones no relacionadas
Version 3.122.2
Corregido (Fixed)
- Las compilaciones de Free Pascal y Lazarus pasan ahora los nombres de archivo y las contraseñas a PDFium como UTF-8 en todas las rutas de carga (archivo, memoria, flujo personalizado y carga progresiva), de modo que los documentos alojados en carpetas con nombres chinos, japoneses o de otro tipo no ASCII, y los documentos cifrados con contraseñas no ASCII, se abren aunque el programa no use el modo de cadenas UTF-8 de Lazarus
Version 3.122.1
Corregido (Fixed)
LastLoadReportse sustituye ahora en cada carga fallida: unActive:= Truefallido, que deja el componente inactivo sin lanzar excepción, y las llamadas fallidas aLoadDocumentoLoadCustomDocumenta secas informanplsFailedcon el texto del error, de modo que el código por lotes que reutiliza un mismoTPdfya no ve el archivo anterior como cargado- La página de ayuda de
Activedescribe ahora el comportamiento real ante un fallo (sin excepción, el componente queda inactivo, detalles enLastLoadReport) y queFileNamesolo puede cambiarse mientras el componente está inactivo
Version 3.122.0
Añadido (Added)
EPdfAssocFilesErrorenFPdfAssocFilesinforma de por quéInjectAssociateFilesno pudo inyectar: el origen no tiene un trailer o catálogo legibles, o unTargetPagenegativo o que nombra una página que no existe; el flujo de destino queda sin modificar
Cambiado (Changed)
SaveAsWithAssociateFilesySaveAsWithAssociateFilesToStreamlanzan ahoraEPdfErrorcuandoTAssocFilesOptions.TargetPagequeda fuera de0..PageCount; antes esos valores se adjuntaban al catálogo del documento, al contrario de lo documentado
Corregido (Fixed)
SaveAsWithAssociateFilesySaveAsWithAssociateFilesToStreamdevuelven ahoraFalsecuando el documento guardado no puede analizarse para la inyección, en lugar de escribirlo sin cambios y devolverTruesin los archivos solicitadosSaveAsWithAssociateFilesya no trunca un archivo de destino existente antes de producir la salida; un guardado rechazado o fallido deja el archivo intacto
Version 3.121.4
Corregido (Fixed)
- Los archivos asociados a nivel de página (
TAssocFilesOptions.TargetPage) se adjuntan ahora a la página que ocupa esa posición en el orden de páginas del documento; antes los archivos podían caer en otra página cuando los objetos de página estaban almacenados en el archivo en un orden distinto al mostrado, por ejemplo tras reordenar o insertar páginas
Version 3.121.3
Corregido (Fixed)
- Los archivos asociados guardados con
SaveAsWithAssociateFilesconservan ahora intactos los nombres y descripciones de archivo chinos, japoneses y de otro tipo no ASCII:/UFy/Descse escriben como cadenas de texto PDF Unicode en lugar de convertirse a través de la página de códigos ANSI del sistema (Delphi) o emitirse como bytes UTF-8 en crudo (Free Pascal) - El nombre de archivo heredado
/Fes ahora siempre ASCII imprimible portable, con los caracteres no ASCII sustituidos por_, de modo que los lectores que decodifican/Fcon su propia página de códigos ya no muestran mojibake
Version 3.121.2
Corregido (Fixed)
- Los archivos asociados ahora codifican los tipos MIME como nombres PDF válidos, de modo que valores como
text/plainya no generan diccionarios de archivos incrustados mal formados ni impiden la validación PDF/A-3
Version 3.121.1
Corregido (Fixed)
- Leer una anotación y volver a escribir los cambios ya no crea flujos de apariencia rollover y down vacíos cuando esos flujos no existen, respetando los requisitos de apariencia de anotaciones de PDF/A
Version 3.121.0
Añadido (Added)
- La verificación CMS de OpenSSL puede recuperar certificados intermedios AIA HTTP(S) y CRL cuando
OnlineRetrievalestá activado, con límites compartidos de timeout, de peticiones y de tamaño de respuesta; los certificados descargados permanecen sin confianza hasta que la cadena de confianza configurada los valida - La recuperación en línea usa WinHTTP en Windows y libcurl cuando está disponible en FPC Unix, conserva la validación de certificados HTTPS y expone las configuraciones de transporte no soportadas a través de los diagnósticos de capacidad existentes
Corregido (Fixed)
- La reconstrucción de referencias cruzadas clásica reserva su tabla de salida una sola vez y rellena las ranuras de objetos directamente, evitando el trabajo cuadrático con números de objeto grandes y dispersos, manteniendo los límites de recursos del parser y las generaciones de objeto más recientes
- La salida PDF/X-1a exige un perfil de impresora ICC v2 CMYK estructuralmente válido en lugar de incrustar silenciosamente el perfil RGB por defecto; los perfiles no válidos fallan antes de que un fichero de destino existente se abra para su sustitución
- La validación PDF/X-1a comprueba el perfil incrustado y su declaración de cuatro componentes, y los informes preflight identifican perfiles de salida no válidos; las etiquetas de condición de salida por defecto siguen el perfil suministrado mientras que las etiquetas explícitas del llamador se conservan
Version 3.120.4
Corregido (Fixed)
- El modo por lotes del demo de extracción de tablas vuelve a procesar todos los PDF de la carpeta: la instancia de documento compartida seguía activa entre archivos, de modo que el segundo y siguientes archivos lanzaban un error de asignación y se informaban como fallidos; cada documento ahora recibe su propia instancia en las ediciones Delphi, Lazarus y C++Builder
- El documento de muestra del demo de marcas de agua mantiene sus páginas en orden de creación (1, 2, 3, 4) en lugar de rotar la primera página al final mediante una llamada de inserción por índice
- Los demos XFA y XFDF informan de un fallo al abrir el documento mediante un mensaje en lugar de una excepción no manejada, el demo de adjuntos puede empezar un documento nuevo con otro ya cargado, y el visor Lazarus libera el bitmap que guarda
- El demo de impresión Delphi aplica ahora los controles de orientación, dúplex, escala de grises, calidad y DPI al trabajo de impresión, respeta las copias elegidas en el diálogo de impresión, salta las páginas que fallan al renderizarse y restaura la vista previa tras imprimir
- Los demos interactivos cuyo cargador se tragaba los fallos de apertura ya no muestran un estado de carga engañoso, los archivos de salida de extracción llevan un BOM UTF-8, los demos de consola CJK y RTL cambian la consola a UTF-8 antes de imprimir el texto extraído, y la entrada de confianza interpreta decimales con independencia de la configuración regional del sistema
- La prueba de timestamp PAdES ahora comprueba de verdad que el validador alcanza el nivel B-T tras la inyección del timestamp de firma, con un documento de prueba ByteRange autoconsistente
- Las pruebas de cobertura de API y de PDF/A ya no tratan cualquier fallo de carga como un salto por entorno cuando pdfium.dll está cargada, y una nueva prueba de regresión cubre el descifrado de documentos cuyos valores de cadena los productores de terceros serializan como literal strings
Version 3.120.3
Corregido (Fixed)
EncryptDocumentBytesya no descarta los objetos de la revisión base cuando el PDF de origen se guardó de forma incremental: la cadena de referencias cruzadas clásica se recorre ahora a través de/Prevde la más nueva a la más antigua con prioridad a las entradas nuevas, se rechaza el origen cuando ya está cifrado, una palabra clavestreamdebe cerrar un diccionario antes de tratar lo que sigue como datos de flujo, y la extensión del objeto final se acota por el xref del origen en lugar del primerendobjdentro de sus bytes- Los documentos cifrados cuyos valores de cadena serializan como literal strings, producidos por productores de terceros, ahora se descifran en lugar de fallar con un error de autenticación
- La inyección de marcadores PDF/E ya no numera el diccionario Info sintetizado igual que el flujo del perfil ICC incrustado cuando el trailer del origen no tiene
/Info, lo que hacía que el xref incremental apuntara/DestOutputProfileal objeto equivocado - La validación PDF/X compara el valor XMP
pdfxid:GTS_PDFXVersionrecortado de espacios en blanco circundantes, de modo que un XMP en forma de elemento legalmente rellenado ya no informa de una discrepancia de Info falsa - La validación PDF/UA reconoce el XMP
pdfuaid:parten forma de atributo, expande los object streams antes de sus escaneos de bytes como el resto de validadores de estándares, comprueba el bit de cifrado/Ptambién en documentos con flujos de referencias cruzadas y exige un valordc:titleno vacío; la inyección de marcadores ya no emite una entrada de título vacía - La inyección de marcadores PDF/VT ya no recopila y reescribe dos veces todos los objetos de página cuando el origen lleva una jerarquía DPart rota que falló la validación después de que la lista de páginas ya se hubiera rellenado
- Firmar a nivel PAdES B-T o superior sin un
TsaUrlahora lanza una excepción en lugar de producir silenciosamente una firma B-B, y el timestamp de documento B-LTA deriva su propio nonce en lugar de reenviar el del llamador - La inyección de timestamp de firma CMS rechaza la entrada con varios firmantes en lugar de descartar silenciosamente todos los SignerInfo posteriores al primero, la versión de SignedData pasa a 3 con un sid subjectKeyIdentifier,
certReq FALSEse omite de las peticiones de timestamp según DER, y un fallo de transporte WinHTTP a mitad del cuerpo se informa como error de transporte en lugar de cuerpo DER truncado - La incrustación de fuentes del sistema resuelve la cara real de la TrueType Collection para la familia solicitada y la extrae como fuente independiente, de modo que solicitar una cara que no es la primera de un
.ttc(por ejemplo NSimSun) ya no incrusta y renderiza la cara 0 BuildToUnicodeCMapempareja glifos con caracteres de pares sustitutos correctamente y emite los mapeos suplementarios como entradas bfchar, en lugar de desplazar cada entrada posterior al primer carácter astral- La inserción de texto con shaping, texto CID y OCR comprueba el resultado de la inserción de página antes de registrar el objeto para el rollback, de modo que una inserción fallida ya no puede dejar un handle colgante que se destruiría dos veces
- La detección de la palabra clave stream en el compresor y en la reparación ToUnicode acepta el final de línea CR aislado que permite ISO 32000-1 7.3.8.1
Cambiado (Changed)
- La compilación del paquete Win64x C++Builder de la versión de prueba elimina un
PDFiumPas.libCOFF obsoleto dejado por una compilación completa anterior para que los dos sabores de librería de importación no puedan enviarse juntos, el instalador FULL excluye de su catch-all los archivos de desarrollo locales (packagefiles.xml, documentos de estado), y las compilaciones de demos posteriores a la instalación fijan la raíz del IDE mediante la variablePDFiumPas_BDS_ROOTque los scripts de compilación realmente leen
Version 3.120.2
Corregido (Fixed)
- El texto colocado con
AddText,SetText, la generación de layout y la capa de búsqueda OCR ahora se extrae con sus code points exactos tanto del documento en vivo como tras un guardado: los espacios ya no vuelven como U+00A0 ni los guiones como U+00AD con la compilación actual de PDFium - Las fuentes del sistema se incrustan como fuentes CID indexadas por code point, con un CID por carácter Unicode y un
CIDToGIDMapexplícito, de modo que un glifo compartido por varios caracteres (espacio y espacio de no ruptura, guion y guion opcional, Omega y símbolo Ohm) hace el viaje de ida y vuelta fielmente para cada uno en cualquier visor; las fuentes sin subtabla cmap Unicode conservan la vía de incrustación anterior
Version 3.120.1
Corregido (Fixed)
- Los documentos guardados con fuentes subset ya no corrompen su texto extraído al recargar: el ToUnicode CMap que pdfium serializa podía mapear un CID a dos code points distintos (espacios como U+00A0, guiones como U+00AD), y cada guardado completo repara ahora esos mapeos contradictorios en el lugar dejando la estructura del CMap idéntica byte a byte, así que el lector PDFium, MuPDF y qpdf extraen todos los caracteres originales
- Los guardados incrementales, las actualizaciones sparse y los documentos con flujos de referencias cruzadas nunca los reescribe la reparación y pasan sin cambios; los archivos sin un mapeo contradictorio se copian byte a byte
- El accesorio de pruebas
sample.pdfcomprometido se regeneró mediante la vía de guardado reparada, y las pruebas de política de carga localizan ahora las entradas xref dinámicamente en lugar de codificar en firme los offsets del accesorio
Version 3.120.0
Añadido (Added)
- Los bookmarks informan del estilo de texto de su elemento de esquema:
TBookmark.Stylelleva los flags de cursiva y negrita leídos mediante el nuevo enlaceFPDFBookmark_GetStyle, yBookmarkStyleFeaturesAvailableindica si el pdfium.dll cargado lo exporta - Los adjuntos exponen su relación de associated file de PDF 2.0:
AttachmentRelationship[], el campoRelationshipdeTPdfAttachmentMetadatay deTPdfAnnotationAttachmentleen el nombre/AFRelationshipmediante el nuevo enlaceFPDFAttachment_GetAFRelationship, protegido porAttachmentRelationshipFeaturesAvailable GetObjectRenderedStrokePatternrasteriza el patrón de tiling con el que traza un objeto de ruta en un bitmap propiedad del llamador mediante el nuevo enlaceFPDFPageObj_GetRenderedStrokePattern;StrokePatternRenderingFeaturesAvailableinforma de la exportaciónTPdfLibraryConfiguration.IsolatePerDocumentse corresponde con el flagm_IsolatePerDocumentde la versión 7 deFPDF_LIBRARY_CONFIGpara que las compilaciones con V8 puedan dar a cada documento su propio isolate;ConfigurePdfLibraryrechaza el flag junto con unV8Isolateexplícito
Cambiado (Changed)
- Las 476 exportaciones públicas de las cabeceras PDFium actuales están enlazadas; los tres nuevos puntos de entrada cargan de forma tolerante, de modo que los despliegues con un pdfium.dll más antiguo siguen funcionando y las características correspondientes informan resultados vacíos o
nil
Version 3.119.1
Corregido (Fixed)
- La validación de confianza offline de Windows también restringe la recuperación de revocación a datos en caché, lo que evita peticiones de red implícitas de CRL u OCSP cuando la recuperación en línea está desactivada
- Los fallos de revocación de Windows conservan el error independiente de confianza de la cadena y exponen los reasons de revocación y los diagnósticos nativos en los resultados PAdES y en los informes de evidencia
Version 3.119.0
Añadido (Added)
- La validación de confianza PAdES y los informes de evidencia exponen reasons de revocación y errores nativos separados para las firmas del documento y para los timestamps, incluidos campos JSON y columnas CSV añadidas
Version 3.118.0
Añadido (Added)
- Los resultados de verificación CMS exponen
RevocationReasonyRevocationError, con diagnósticos OpenSSL para CRL locales caducadas, no disponibles e inválidas
Corregido (Fixed)
- OpenSSL informa de los certificados explícitamente revocados como inválidos cuando la confianza de la cadena tiene éxito y la verificación de las CRL locales confirma la revocación, conservando por separado los resultados de firma y de confianza
Version 3.117.1
Corregido (Fixed)
- Los guardados de versión explícita aceptan formularios multipágina válidos con flujos de referencias cruzadas comprimidos con predictor en lugar de informar incorrectamente de una sección de referencias cruzadas malformada
Version 3.117.0
Añadido (Added)
- La detección de tablas lee bordes y sombreados dibujados como rectángulos rellenos: un cuadro relleno de grosor no mayor que el nuevo
MaxRulingThicknessse convierte en una reglilla y un cuadro relleno mayor aporta sus bordes, de modo que las tablas exportadas desde Word, Google Docs y los navegadores ahora se encuentran como cuadrículas con reglillas y filas de título combinadas en lugar de fragmentos de espacios en blanco.DetectFilledRulingsdesactiva este comportamiento - Las coordenadas de las reglillas se ajustan dentro de
RulingSnapToleranceantes de ensamblar las cuadrículas, lo que une en una sola tabla los trozos de borde por celda, los bordes dobles y las celdas sombreadas separadas por un pequeño canal - Las reglillas dentro de form XObjects participan en la detección a través de las matrices de objeto combinadas, controlado por
IncludeFormXObjects ExtractDocumentTablesenlaza fragmentos de continuación que terminan donde termina el contenido de la página y se reanudan donde empieza el contenido de la página siguiente, y no solo fragmentos que tocan los bordes de la página, y mantiene una única fila desbordada como parte de su cadena- TableExtractionLab expone
DetectFilledRulingsen su panel de opciones en las variantes Delphi, Lazarus y C++Builder
Cambiado (Changed)
- La detección por espacios en blanco ignora las palabras que ya pertenecen a una cuadrícula con reglillas y exige que cada límite de columna sea un corredor libre de texto a lo largo de las filas que separa, de modo que los párrafos justificados y las listas con viñetas ya no se informan como tablas
- Un candidato de continuación cuya primera fila es una sola celda a todo lo ancho se trata como una tabla nueva con título y no como el resto de la anterior
MinRowsacepta 1 para cuadrículas con reglillas; la detección por espacios en blanco conserva su mínimo de dos filas, y el presupuesto por defecto deMaxRulingSegmentssube a 16384 porque las cajas de borde por celda llegan en cantidades mucho mayores que las líneas de cuadrícula trazadas- El texto de las celdas se ensambla línea a línea a partir de cajas de palabras superpuestas, de modo que las palabras cuyas cajas de glifos difieren en altura conservan su orden de izquierda a derecha
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos de versión del instalador informan 3.117.0
Version 3.116.4
Añadido (Added)
- TableExtractionLab estrena procesamiento por lotes de carpetas:
Batch folderejecutaExtractDocumentTablessobre cada PDF de una carpeta seleccionada, lista los recuentos de tablas por documento, marca para OCR los documentos sin capa de texto y evita que los archivos dañados o bloqueados aborten la ejecución Export all CSVescribe cada tabla detectada como<document>-<n>-page<p>-t<i>.csvbajo una subcarpetatablesen las ejecuciones por lotes, o junto al documento cargado para un único archivo- Un selector de preajustes de detección expone
TPdfTableExtractionOptionsafinados: Default, Compact columns (MinColumnGap4 conAlignmentTolerance5 para exportaciones apretadas de procesadores de texto) y Compact + wide rows (MaxRowGapFactor6 para interlineados de 1.5-2x) - Los documentos que no producen ninguna tabla con el preajuste Default se reintentan una vez con Compact columns tanto en la extracción de documento único como en la por lotes, y las filas del lote informan qué preajuste produjo el resultado
Corregido (Fixed)
- La extracción por lotes abre cada documento en su propia instancia de
TPdfen lugar de recargar un único componente compartido, lo que elimina los fallos de carga silenciosos que aparecían como errores de componente inactivo a mitad de una ejecución de carpeta
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos de versión del instalador informan 3.116.4
Version 3.116.3
Cambiado (Changed)
- La muestra TableExtractionLab en las tres cadenas de herramientas escribe ahora su documento de muestra generado en
TableExtractionSample.pdfjunto al ejecutable del demo en lugar de conservarlo solo en memoria; cuando la carpeta no es escribible, el laboratorio vuelve al comportamiento anterior en memoria y lo informa en la línea de estado TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador informan 3.116.3
Version 3.116.2
Corregido (Fixed)
- La biblioteca dejó de compilar en versiones antiguas de Delphi. El helper de ticks de 64 bits y los códecs XML de listas de confianza y de producción llamaban a
GetTickCount64yCP_UTF8desde unidades RTL que solo incorporan los compiladores más recientes; el escritor HTML de reflow incrustaba un literal de cadena CSS por encima del límite de 255 elementos que esos compiladores imponen a un único literal, y la fusión de datasets XFA asignaba entreTBytesy un campo de array dinámico corriente, algo que los compiladores anteriores a XE7 rechazan. Los compiladores antiguos enlazan ahoraGetTickCount64desde kernel32 y declaranCP_UTF8localmente cuando la RTL no lo hace, la hoja de estilos se distribuye como literales cortos concatenados y la carga útil del paquete se copia elemento a elemento
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador informan 3.116.2
Version 3.116.1
Añadido (Added)
Demo\Delphi\TableExtractionLab,Demo\CBuilder\TableExtractionLabyDemo\Lazarus\TableExtractionLabconvierten la detección de tablas en un único flujo de trabajo. El laboratorio construye un documento de muestra con una tabla con reglillas que lleva celdas de encabezado combinadas, una tabla alineada por espacios en blanco sin reglillas y una tabla larga que se corta en un límite de página, y luego ejecutaExtractTablesoExtractDocumentTablesy lista filas, columnas, celdas combinadas, indicadores de encabezado, modo de detección, confianza y grupos de continuación- El laboratorio exporta la tabla seleccionada mediante
TPdfTable.ToCsvyTPdfTable.ToJson, ajustaDetectRuledTables,DetectWhitespaceTables,DetectContinuationsyMinConfidencedesde el panel de opciones, y copia el informe completo al portapapeles TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos de versión del instalador informan 3.116.1
Version 3.114.21
Corregido (Fixed)
- La validación PDF/A informaba de una referencia a archivo externo en cualquier documento que contuviera una anotación. ISO 19005-1 §6.1.7 prohíbe
/F,/FFiltery/FDecodeParmsen el diccionario de un objeto stream, pero la comprobación buscaba esos nombres en todo el archivo, y/Fes además la clave de indicadores de anotación que §6.5.3 exige que lleve toda anotación. La comprobación mira ahora solo dentro de los diccionarios de objetos stream
Version 3.114.20
Corregido (Fixed)
- Las firmas RSASSA-PSS llevaban parámetros de algoritmo mal formados en los tres backends de firma. RFC 4055 etiqueta los cuatro campos de RSASSA-PSS-params; la longitud del salt se escribía como un entero desnudo, que un parser lee como el inicio de otro campo, y el campo trailer se escribía aunque su valor coincide con el valor por defecto que DER obliga a omitir. Un verificador o no lograba parsear los parámetros o volvía al salt por defecto de 20 bytes mientras la firma usaba 32, de modo que las firmas PSS se rechazaban. Las firmas PKCS#1 v1.5 y ECDSA no se veían afectadas
Version 3.114.19
Corregido (Fixed)
- Pedir un sello de tiempo con un digest distinto de SHA-256 construía una petición que declaraba ese algoritmo mientras llevaba un digest SHA-256, y la autoridad de sellado de tiempo lo rechaza o, peor, lo sella tal cual. Solo se calcula SHA-256, de modo que cualquier otro identificador se rechaza ahora de plano; un identificador vacío sigue seleccionando el valor por defecto SHA-256. La muestra PDF Viewer para Lazarus y C++Builder también enlazaba un manejador de expansión de marcadores que su archivo de formulario nombra pero su código no define, lo que falla al cargar el formulario; el manejador se ha portado desde la muestra Delphi
Version 3.114.18
Corregido (Fixed)
- Las muestras XFA Lab y XFDF Lab para Delphi, y la muestra XFA Lab para Lazarus, fallaban al arrancar. Cada una construye sus controles desde el manejador de creación de su formulario, pero el recurso del formulario no estaba presente ni enlazado, de modo que crear el formulario principal lanzaba un error de recurso no encontrado y el manejador nunca se ejecutaba. Las tres llevan ahora el archivo de formulario y la directiva que lo incrusta
Version 3.114.17
Corregido (Fixed)
- Dos recursos nativos se gestionaban mal cuando una operación fallaba a mitad de camino. Un render de miniatura que fallaba liberaba el mapa de bits de destino antes de cerrar el render nativo, y cuando el render estaba dibujando directamente en los píxeles del propio mapa de bits, el desmontaje leía después memoria que ya se había liberado. Una asignación de mapa de bits que fallaba en
AddBitmapdejaba el objeto de imagen que acababa de crear sin dueño y sin forma de volver a alcanzarlo
Version 3.114.16
Corregido (Fixed)
- Leer texto FDF producía caracteres equivocados por encima de
0x7E. La tabla PDFDocEncoding del Anexo D.2 de ISO 32000-1 empieza en0x80con la viñeta, pero el mapeado la empezaba en0x7F, de modo que todo el bloque hasta0x9Festaba desplazado un lugar: una daga se leía como viñeta, una raya como puntos suspensivos, y así hasta la zcaron, que se caía del final. El Euro en0xA0también faltaba y volvía como un espacio de no separación. Los nombres y valores de campo del FDF importado se decodifican ahora correctamente
Version 3.114.15
Corregido (Fixed)
- Validar la confianza en un documento cuyo trailer o catálogo no se puede leer escribía más allá del final de un array. El pase de conformidad se rinde sin registrar ninguna firma en ese caso, mientras que el colector que corre a continuación trabaja directamente sobre el flujo de bytes y todavía puede encontrar diccionarios de firma, de modo que se escribía una entrada por diccionario encontrado en un array que no contenía ninguna. El recuento se acota ahora a lo que produjo el pase de conformidad
Version 3.114.14
Corregido (Fixed)
- Ejecutar un plan de reparación PDF/A aplicaba pasos que el planificador había bloqueado. Un paso está bloqueado cuando el documento lleva firmas, el paso las invalidaría y el llamador no lo permite; el ejecutor solo comprobaba el nivel de seguridad del paso, que no expresa la condición, de modo que un documento firmado podía ver sus firmas invalidadas por una reparación automática que el plan ya había rechazado. Los pasos bloqueados se saltan ahora y se cuentan como omitidos
Version 3.114.13
Corregido (Fixed)
- Añadir un sello de tiempo de firma a un valor CMS cuyo conjunto de certificados medía más de 127 bytes, que es todo certificado real, corrompía el resultado. El helper que localiza el inicio de una estructura anidada retrocedía sobre los octetos de longitud y confundía el último con el primero, de modo que el trozo que cortaba empezaba bastante antes de la estructura pedida. La longitud de la cabecera se deriva ahora de la longitud del contenido, algo que DER dice sin ambigüedad. Las autoverificaciones no lo detectaron porque sus certificados de prueba eran lo bastante pequeños para usar la forma corta
Version 3.114.12
Corregido (Fixed)
- Los atributos firmados se emitían en el orden en que se construyeron en lugar de ordenarse por sus codificaciones, como exige X.690 §11.6 a un DER SET OF. Un verificador que re-codifica el conjunto de atributos antes de calcular el digest, como hacen OpenSSL y BouncyCastle, calculaba por tanto un digest distinto y daba por inválida una firma PAdES correcta. Las firmas que esta biblioteca produce ahora se verifican en esas pilas; la validación a través de la capa de Windows no se veía afectada porque calcula el digest de los bytes tal como llegan
Version 3.114.11
Corregido (Fixed)
- Un DER INTEGER negativo de más de dos bytes de contenido se codificaba con un valor equivocado. El escritor emula un desplazamiento aritmético reinyectando el signo tras un desplazamiento lógico, pero la máscara que usaba activaba todos los bits por encima del byte bajo en lugar de solo el byte que el desplazamiento había dejado libre, de modo que la magnitud que seguía en los bytes restantes quedaba sobrescrita. El valor -100000 se codificaba como -34464, por ejemplo. Los nonce de petición de sello de tiempo y cualquier otro entero con signo de ese tamaño se codifican ahora correctamente
Version 3.114.10
Corregido (Fixed)
- La validación PDF/A nunca informaba de la parte de alfa constante de la regla de transparencia de ISO 19005-1 §6.4. El helper construye su clave de búsqueda anteponiendo una barra, y el llamador pasaba otra, de modo que buscaba
//CAy no encontraba nada. Las dos comprobaciones de alfa además solo aceptaban los textos exactos1y1.0, lo que marcaba como violación un/CA 1.00totalmente opaco; un valor de uno se reconoce ahora sea como sea que se escriba
Version 3.114.9
Corregido (Fixed)
- La acción URI a nivel de página devolvía texto corrupto. La ruta vuelve de la capa nativa como bytes UTF-8 y se escribía directamente en una cadena ancha, que empareja los bytes en unidades de código de 16 bits y deja el resto del búfer con la memoria que hubiera allí.
GetPageActionURIdecodifica ahora los bytes igual que ya hacía la ruta de acción a nivel de documento
Version 3.114.8
Seguridad (Security)
- En objetivos que no son Windows, los bytes aleatorios detrás de cada clave de cifrado, salt y vector de inicialización salían del PRNG del runtime, cuya semilla es una constante salvo que el programa llame a
Randomize. Cada proceso producía por tanto la misma clave de cifrado de archivos, los mismos salts/UEy/OE, los mismos bytes/Permsy los mismos nonce AES-GCM, lo que hace que la salida cifrada de una build Free Pascal en Linux o macOS sea trivialmente recuperable y repita un nonce GCM bajo una clave fija. Los bytes salen ahora de/dev/urandom, y un pool del kernel no disponible lanza una excepción en lugar de volver atrás, tal como ya hacía unCryptGenRandomno disponible en Windows
Version 3.114.7
Corregido (Fixed)
- Un object stream mal formado podía hacer que los puntos de entrada de compresión y reparación leyeran más allá del final del búfer decodificado. Los desplazamientos de miembros que declara un stream se comprueban ahora por rango y en orden ascendente en cuanto se analiza la cabecera, un recuento de miembros declarado mayor de lo que la cabecera puede albergar se rechaza antes de reservar cualquier memoria, y el rango de bytes de cada miembro se valida antes de recortar su espacio en blanco final y no después
Version 3.114.6
Corregido (Fixed)
- Externalizar imágenes inline producía un image XObject inservible. El diccionario se escribía con una barra suelta antes de su primera clave, lo que abría un nombre vacío y desplazaba cada clave sobre el valor de la clave anterior, y la tabla de abreviaturas inline mapeaba Decode a
Gen lugar de aD, de modo que un array/Dse perdía y la abreviatura del valor DeviceGray se tomaba por una clave. Las imágenes extraídas de un content stream llevan ahora un diccionario bien formado y conservan su array Decode
Version 3.114.5
Corregido (Fixed)
- El shaper de HarfBuzz asignaba longitudes de cluster a los glifos equivocados en los tramos de derecha a izquierda y daba longitud uno a los glifos que comparten un cluster, como los signos diacríticos y los componentes de ligadura. El
ClusterLengthde cada glifo abarca ahora desde el inicio de su cluster hasta el siguiente cluster en orden lógico, en cualquier dirección, de modo que el mapeado de carácter a glifo del texto árabe y hebreo coincide con lo que informa el backend Uniscribe
Version 3.114.4
Corregido (Fixed)
- El transporte de sellos de tiempo de libcurl pasaba sus opciones numéricas y leía el código de estado HTTP como valores de 32 bits, cuando libcurl recibe y devuelve un
longde C, que en Linux y macOS es de 64 bits. La consulta de estado podía sobrescribir los cuatro bytes adyacentes a su destino en la pila, y los valores de las opciones dependían de lo que contuviera la mitad alta del registro. Ambos usan ahora el ancho dellongde la plataforma, de modo queFPdfTsaFpces fiable en objetivos LP64
Version 3.114.3
Corregido (Fixed)
- El backend PKCS#11 copiaba los bytes crudos de la etiqueta de un objeto de token directamente en una cadena, lo que en Delphi aterriza bytes UTF-8 sobre unidades de código UTF-16. Un certificado seleccionado mediante
TPdfPkcs11Options.CertificateLabelno podía coincidir nunca, yEnumerateCertificatesinformaba de unLabelTextilegible. Las etiquetas se decodifican ahora como el UTF-8 que define el estándar, y el PIN que se entrega aC_Loginse codifica como UTF-8 en lugar de estrecharse por la página de códigos del anfitrión, de modo que un PIN no ASCII llega intacto al token
Version 3.114.2
Corregido (Fixed)
- El firmante del Keychain de macOS preguntaba a
SecKeyIsAlgorithmSupportedpor la operación equivocada al decidir si una clave acepta RSASSA-PSS: la consulta nombraba la operación de descifrado en lugar de la de firma, de modo que la respuesta era siempre no y cada firma RSA caía silenciosamente a PKCS#1 v1.5. Una clave que soporta PSS firma ahora con PSS como pideTPadesSignerOptions.PaddingScheme, y el argumento de operación se pasa con el ancho que declara el framework
Version 3.114.1
Corregido (Fixed)
- Los pares de corchetes anidados en texto de derecha a izquierda se resolvían con la dirección equivocada. La regla BD16 de UAX #9 procesa los pares en el orden en que aparecen sus corchetes de apertura, y un par resuelto por N0 se convierte en el contexto fuerte precedente para un par que se abre después; los pares se procesaban en cambio en el orden en que los completaban sus corchetes de cierre, de modo que un par interior podía seguir a la letra que encierra en lugar del contexto que estableció el par exterior. Un texto como una frase árabe o hebrea que contenga un inciso con un corchete anidado se compone ahora como espera el lector
Version 3.114.0
Añadido (Added)
FPdfCryptoSslverifica firmas PDF y tokens de sello de tiempo mediante OpenSSL, lo que cierra la última brecha de plataforma en la validación de firmas: Linux no tenía ningún backend de verificación CMS.ConfigureSslCmsVerifierlo instala, libcrypto se resuelve por nombre en tiempo de ejecución de modo que nada se enlaza contra él, y enlazan tanto la serie 1.1 como la 3.x- La firma y la cadena de certificados se evalúan en pases separados, de modo que una firma correcta bajo una cadena que no llega a un ancla de confianza se informa como firma válida con confianza inválida y no como firma rota
ConfigureSslTrustAnchorsañade anclas de confianza DER al almacén del sistema, yConfigureSslCrlssuministra las CRL que una comprobación de revocación puede consultar. La revocación cuenta como comprobada solo cuando hay una CRL presente de verdad, porque OpenSSL no recupera ninguna por sí mismo; sin CRL suministradas el resultado dice no soportado en lugar de dar por buena una cadena sin comprobarSslAvailable,SslMissingSymbols,SslLibraryPath,SslLibraryVersionySslAbiLayoutinforman de qué se enlazó y qué no, yConfigureSslLibraryPathapunta el backend a una biblioteca concreta cuando los valores por defecto de la plataforma no encuentran ninguna
Version 3.113.0
Añadido (Added)
TPdfKeychainCmsVerifierverifica firmas PDF y tokens de sello de tiempo en macOS medianteCMSDecodery SecTrust, de modo que la validación de firmas ya no es exclusiva de Windows.ConfigureKeychainCmsVerifierlo instala, y la misma unidad cubre ahora ambas mitades del soporte de macOS al igual queFPdfCryptoWinlo hace para Windows- La comprobación de revocación se respeta: cuando se solicita, una política de revocación se une a la básica de X.509, y desactivar la recuperación en línea restringe la evaluación a las respuestas en caché. Los puntos de control de progreso se activan para las etapas de firma, cadena, recuperación en línea y revocación exactamente como los informa el backend de Windows
KeychainVerificationAvailableinforma del soporte de verificación por separado de la firma, ya que ambas necesitan símbolos de framework distintos y una puede estar presente sin la otra
Version 3.112.0
Añadido (Added)
FPdfCryptoMacfirma PAdES con una identidad de Keychain de macOS, la contraparte del almacén de certificados de Windows: el certificado y su clave privada provienen del Keychain y la firma la produceSecKeyCreateSignature, de modo que la clave nunca sale del almacén de claves del sistema.ConfigureKeychainSignerProviderlo instala, y no hay que desplegar ningún módulo junto a la aplicación como sí necesitaría un backend de token PKCS#11- El firmante sigue al certificado: una clave EC firma ECDSA, una clave RSA firma RSASSA-PSS, y donde PSS no está disponible - un macOS más antiguo, o una clave que no lo acepta - el relleno recurre a PKCS#1 v1.5 y el AlgorithmIdentifier emitido lo dice en lugar de declarar PSS
KeychainMissingSymbolsenumera cualquier símbolo de framework que no se pudo resolver, de modo que un despliegue que informe del backend como no disponible puede distinguir un framework ausente de un nombre que esta vinculación obtuvo mal
Version 3.111.0
Añadido (Added)
ConfigurePadesCmsVerifierinstala el backend de verificación CMS que usa el validador PAdES, de modo que la verificación de firmas y de sellos de tiempo ya no está ligada a Windows.IPdfCmsVerifierdeclara las dos operaciones que un backend responde - desasociada para una firma PDF, asociada para un token de sello de tiempo - yPadesCmsVerificationAvailableinforma de si hay algún backend presente
Cambiado (Changed)
- Los registros de resultado y de opciones de verificación se movieron a
FPdfCryptocomoTPdfCmsVerify*. Los nombresTWinCmsVerify*permanecen como alias, de modo que el código existente sigue funcionando y un backend conectado habla los mismos tipos que el de Windows - El comportamiento de Windows no cambia: sin verificador instalado sigue usando CryptoAPI, y los puntos de control de progreso, las opciones de revocación y los códigos de error nativos son los mismos. Donde ningún backend responde, cada veredicto informa de no soportado en lugar de quedar sin comprobar
Version 3.110.0
Añadido (Added)
FPdfPkcs11firma PAdES con una clave que permanece dentro de un token PKCS#11.ConfigurePkcs11SignerProviderlo instala como backend de firma, el módulo se carga en tiempo de ejecución por ruta de modo que no se enlaza nada, y el mismo código sirve para Windows, Linux y macOS. La enumeración de tokens que declara la interfazIPdfPkcs11SignerProviderse implementa junto a ella: slots, tokens y los certificados que cada uno contiene- Firmar fuera de Windows ya no necesita un proveedor proporcionado por el anfitrión para el caso común: un módulo de token más
TPdfPkcs11Optionses suficiente. RSA PKCS#1 v1.5, RSASSA-PSS y ECDSA se producen todos a través del token FPdfSha1añade SHA-1 con un único propósito: coincidir un certificado por la huella queTPadesSignerOptionslleva. Windows lo resolvía dentro del almacén de certificados; un token devuelve los bytes del certificado y deja la coincidencia al llamador. No es un resumen de firma y la pila PAdES sigue firmando SHA-256 en todo momento
Cambiado (Changed)
- Los asistentes DER de certificados que leen el OID del algoritmo de clave pública, extraen emisor y número de serie y reenvuelven una firma ECDSA en bruto se movieron del backend de Windows a
FPdfCms, donde todos los backend de firma pueden alcanzarlos
Version 3.109.0
Cambiado (Changed)
- El cargador de la biblioteca nativa ya no es exclusivo de Windows.
LibraryNametoma como valor predeterminadopdfium.dll,libpdfium.soolibpdfium.dylibsegún el objetivo, la build de V8 se busca con el nombre correspondiente, y la carga y el enlace de símbolos pasan por el cargador portable en Free Pascal. El comportamiento de Windows no cambia, incluido el diseño de despliegue Win32 y Win64 y el diagnóstico de discrepancia de arquitectura - Los directorios de despliegue en otros objetivos siguen la escritura
<cpu>-<os>que las unidades compiladas ya usan, de modo queDLLs/x86_64-linux/libpdfium.sose sitúa junto aLib/FPC/x86_64-linux. La alternativa al directorio del sistema permanece exclusiva de Windows; en otros sitios la ruta de búsqueda del cargador la cubre
Version 3.108.0
Añadido (Added)
TPdfHarfBuzzTextShaperconforma texto bidireccional y de escrituras complejas en objetivos Free Pascal que no tienen Uniscribe. Resuelve los niveles de incrustación conFPdfBidi, segmenta los tramos por escritura, conforma cada tramo con libharfbuzz y coloca los tramos en orden visual. Instálelo conConfigureTextShaper; libharfbuzz se resuelve en tiempo de ejecución yHarfBuzzAvailableinforma honestamente cuando falta- El conformador no enumera fuentes. Uniscribe lee el binario de la fuente desde un contexto de dispositivo, lo que no tiene equivalente portable, así que el anfitrión pasa un
TPdfFontDataResolverque asigna un nombre de fuente a los bytes del archivo de fuente y mantiene esa política donde le corresponde
Version 3.107.0
Añadido (Added)
FPdfBidiimplementa el algoritmo bidireccional Unicode (UAX #9) en Pascal puro:PdfResolveBidiLevelsdevuelve un nivel de incrustación por unidad de código UTF-16,PdfBidiVisualOrderaplica la reordenación L2 yPdfBidiClassOfexpone el Bidi_Class de un punto de código. Cubre las reglas P2-P3, X1-X10, W1-W7, N0-N2, I1-I2 y L1-L2, incluidos los iniciadores de aislamiento y los pares de corchetes BD16- La unidad es neutral respecto a compilador y plataforma, lo que permite dar formato al texto bidireccional donde Uniscribe no está disponible. Un motor de conformado resuelve glifos para un tramo cuya dirección ya se conoce, así que esta es la pieza que debe decidir primero la dirección
Version 3.106.0
Añadido (Added)
ConfigureTextShaperinstala el backend de conformado de texto por el que se enruta toda la biblioteca, junto conActiveTextShaper,ActiveTextShaperNameyClearTextShaper. TantoShapePdfTextcomoTPdf.AddShapedTextahora usan el conformador instalado en lugar de crear uno de Uniscribe directamente, de modo que un anfitrión puede proporcionar su propio motor y una prueba puede proporcionar uno determinista
Cambiado (Changed)
FPdfTextShapingcompila en objetivos distintos de Windows: el backend Uniscribe es ahora el predeterminado de la plataforma en lugar de la única implementación, y queda confinado a la build de Windows. Cuando no hay backend disponible, los puntos de entrada de conformado lo informan en lugar de fallar al compilar
Version 3.105.1
Seguridad (Security)
- Una respuesta de sellado de tiempo ahora está acotada a 4 MB en ambos transportes. Una TSA que siguiera enviando podía hacer crecer el búfer de recepción sin límite, convirtiendo una llamada de firma en un crecimiento de memoria sin acotar
Version 3.105.0
Añadido (Added)
- El sellado de tiempo RFC 3161 funciona en objetivos Free Pascal distintos de Windows: el nuevo backend libcurl envía el TimeStampReq y lee el TimeStampResp, de modo que
PadesTsaAvailableinforma True y PAdES B-T, B-LT y B-LTA pueden obtener tokens allí. libcurl se resuelve en tiempo de ejecución y no es una dependencia de compilación; cuando está ausente, el backend informa de no disponible exactamente igual que el de WinHttp. Windows sigue usando WinHttp y no se ve afectado - Firmar en esos objetivos aún necesita material de claves que la biblioteca no posee: proporciónelo mediante
ConfigurePadesSignerProvidercon unIPadesSignerProvider(oIPdfPkcs11SignerProviderpara claves respaldadas por token), ya queFPdfCryptoWines solo para Windows
Version 3.104.1
Añadido (Added)
- La muestra del laboratorio de inspección XFA ahora también está disponible para Lazarus, de modo que las sondas de capacidad XFA, el listado de paquetes, la exportación de paquetes y la alternativa
OnXfaRuntimeMissingpueden ejercitarse desde la build LCL
Version 3.104.0
Cambiado (Changed)
- La biblioteca compila sin diagnósticos evitables en Free Pascal 3.2: la temporización interna lee el tick de milisegundos de
GetTickCount64en lugar de la llamada de 32 bits obsoleta, los accesores obsoletos de la palabra de control SSE se reemplazan porGetMXCSRySetMXCSR, la base de desplazamiento de la huella de contenido tiene un tipo explícito para que ya no dispare una comprobación de rango en tiempo de compilación, y las direcciones de líneas de barrido se comparan como punteros sin signo cuando un mapa de bits se comprueba para diseño top-down
Version 3.103.1
Corregido (Fixed)
- Los metadatos del documento llevados a XMP conservan sus caracteres no ASCII en Free Pascal: los títulos, autores, asuntos, palabras clave y nombres de creador que llegan a
SaveAsPdfA,SaveAsPdfUa,SaveAsPdfE,SaveAsPdfX,SaveAsPdfRySaveAsPdfVTahora se convierten mediante la página de códigos del tipo string en lugar de copiarse byte a byte, de modo que el paquete de metadatos permanece como UTF-8 válido, como exige ISO 19005-1 6.7.2, incluso cuando el programa anfitrión no se ejecuta en una página de códigos UTF-8 - La exportación XFDF, los ciclos de ida y vuelta de metadatos de producción y el análisis de XML de listas de confianza usan la misma conversión correcta de página de códigos, de modo que el texto que se mueve entre
TBytesystringya no depende de la página de códigos del anfitrión
Version 3.103.0
Añadido (Added)
TPdfEuropeanTrustedListanaliza listas de confianza europeas autenticadas, recarga cachés con checksum mediante el mismo autenticador, acepta orígenes de actualización proporcionados por el llamador, expone los anclajes de confianza actuales y evalúa servicios de firma cualificados en un momento de validación solicitadoTPadesTrustValidationOptions.QualifiedTrustEvaluatoraplica una política de confianza cualificada sin conexión a cada firmante validado sin añadir acceso de red al validador PAdES
Version 3.102.0
Añadido (Added)
BeginIncrementalSaveyCommitIncrementalSaveahora añaden revisiones autenticadas a documentos cifrados con AES-256, preservando la referencia/Encryptoriginal, los parámetros de seguridad, las generaciones exactas de objetos y los bytes previos
Cambiado (Changed)
- La sobrecarga de confirmación de archivo ahora vacía de forma duradera y reabre estrictamente un archivo lateral en el mismo directorio, verifica su límite de revisión y reemplaza atómicamente el objetivo, revirtiendo la sesión tras cualquier fallo
Version 3.101.0
Cambiado (Changed)
SaveAsRedactedahora preserva las porciones seguras de texto que se cruza parcialmente, trazados rectangulares e imágenes alineadas con los ejes, y luego elimina los nombres de recursos que ya no son referenciados por los ámbitos de recursos de página, Form XObject, pattern, apariencia y recursos anidados
Version 3.100.0
Cambiado (Changed)
OptimizeImagesahora selecciona remuestreo box, bilineal, bicúbico, Lanczos o bilevel a partir de la escala, la clase de contenido, el detalle medido y la calidad del llamador, con filtrado consciente de alfa y un presupuesto estricto de memoria de trabajo
Version 3.99.0
Añadido (Added)
GraftPdfAcroFormimporta campos AcroForm jerárquicos, widgets, apariencias, orden de cálculo, recursos predeterminados, acciones y valores mediante mapeos de página explícitos y políticas de colisiónTPdfCrossDocumentGraftMapreutiliza objetos indirectos importados por identidad de origen, preservando ciclos, referencias compartidas, generaciones exactas del origen y semántica transaccional de fallo
Version 3.98.0
Añadido (Added)
TPdfOutlineEditorcrea, mueve, elimina, aplica estilo, expande y redirige elementos de marcadores, reasigna destinos explícitos mediante resultados de planes de página y añade una revisión incremental verificada de forma independiente
Version 3.97.0
Añadido (Added)
TPdfTreeEditorlee, valida, actualiza, equilibra, divide, fusiona, serializa y guarda incrementalmente estructuras arbitrarias de NameTree y NumberTree de PDF, preservando referencias indirectas reutilizables y valores de entrada en bruto
Version 3.96.0
Añadido (Added)
TPdfParserResourceBudgetproporciona una única política de proceso segura para hilos de recursión, tokens, objetos, bytes decodificados, ratio de expansión, asignación y límites de tiempo en analizadores PDF personalizados, con instantáneas inmutables por operación y valores predeterminados configurables
Version 3.95.0
Cambiado (Changed)
ValidatePdfXahora valida diccionarios PDF/X activos, metadatos, output intents, fuentes, características prohibidas, transparencia, espacios de color y cajas de página mediante lecturas dispersas acotadas en documentos sin cifrar con xref válido
Version 3.94.0
Cambiado (Changed)
ValidatePdfRahora valida diccionarios PDF/R activos, páginas, filtros de imagen, metadatos y marcadores de pie mediante lecturas dispersas y por ventanas acotadas en documentos sin cifrar con xref válido
Version 3.93.0
Cambiado (Changed)
ValidatePdfEahora valida diccionarios PDF/E activos, metadatos, output intents, formularios y características prohibidas mediante lecturas dispersas acotadas en documentos con xref válido
Version 3.92.0
Cambiado (Changed)
ValidatePdfVTahora realiza análisis avanzados de ámbito, visibilidad, encapsulación y uso de Form anidados de XObject recurrentes mediante lecturas dispersas acotadas en documentos con xref válido
Version 3.91.0
Añadido (Added)
TPdfSparseDictionaryReaderpuede resolver la generación activa de un objeto y decodificar un flujo directo bajo un límite de bytes proporcionado por el llamador
Cambiado (Changed)
ValidatePdfVTahora usa lecturas dispersas acotadas para las comprobaciones de metadatos PDF/VT, DPart, OutputIntent, Info, página y diccionarios ordinarios en la ruta valid-xref normal
Version 3.90.0
Añadido (Added)
TPdfSparseDictionaryReadermantiene abierto un índice disperso de xref y object-stream para lecturas repetidas y acotadas de diccionarios de objetos indirectos
Cambiado (Changed)
InjectPdfVTMarkersahora valida y preserva una jerarquía DPart de PDF/VT existente con lecturas de origen acotadas, mientras que las jerarquías mal formadas continúan por la alternativa de reconstrucción
Version 3.89.0
Añadido (Added)
ReadPdfSparsePageDictionariesdevuelve identidades de objetos de página y bytes de diccionario acotados en el orden del árbol de páginas mediante el índice disperso de objetos
Cambiado (Changed)
InjectPdfVTMarkersahora sintetiza la jerarquía DPart de PDF/VT y añade objetos de marcador con lecturas de origen acotadas cuando el PDF guardado aún no contiene una jerarquía DPart
Version 3.88.0
Añadido (Added)
ReadPdfSparseCatalogSubDictlee un subdiccionario del catálogo directo o indirecto mediante el índice disperso de objetos; lo usa la inyección de marcadores PDF/UA paraMarkInfoyViewerPreferences
Cambiado (Changed)
InjectPdfUaMarkersahora resuelve elMarkInfoy elViewerPreferencesdel catálogo mediante búsqueda dispersa y añade la revisión PDF/UA con lecturas de origen acotadas en la ruta xref normal
Version 3.87.0
Añadido (Added)
AppendPdfSparseUpdatetransmite una revisión dispersa sobre un PDF guardado: bytes de origen literal, cuerpos de objetos proporcionados por el llamador en desplazamientos registrados y un único bloque incremental de xref/trailer encadenado mediante/PrevNormalizePageViewRectnormaliza dos esquinas mapeadas del espacio de página en el rectángulo visible limitado a la página, o informa de que no hay nada visible de la página- La inyección de marcadores PDF/E sintetiza un objeto Info fresco con
/ISO_PDFEVersioncuando el documento de origen no tiene diccionario Info
Cambiado (Changed)
- La inyección de marcadores PDF/E, PDF/X y PDF/R ahora resuelve el catálogo, Info y el trailer mediante búsqueda dispersa, y añade revisiones mediante
AppendPdfSparseUpdatecon lecturas de origen acotadas en la ruta xref normal - El callback de llenado de formularios
FFI_GetPageViewRectahora informa de la parte de la página realmente visible en elTPdfViewadjunto en lugar de siempre la caja de página completa, con alternativa a las dimensiones de página para documentos sin interfaz TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.87.0 de manera consistente
Corregido (Fixed)
- Los puntos de control de segmentos de trazado expuestos desde la vinculación
FPDFPath_GetBezierControlPointsnunca se rellenaban: la exportación nativa solo responde para el índice del extremo de cada cúbica de tres entradas, de modo que la consulta ahora ocurre una vez por curva y las tres entradas llevan los puntos de control de la curva
Version 3.86.0
Añadido (Added)
ReadPdfSparseRevisionInfoexpone datos acotados de última revisión, catálogo, cifrado, ID de documento y estructura etiquetada para posprocesadores de flujosComposePdfSparseUpdateIdpreserva o deriva identificadores de documento de actualización incremental sin materializar el PDF de origen completo
Cambiado (Changed)
InjectPdfAMarkersahora resuelve el catálogo y el trailer mediante búsqueda dispersa, copia entradas grandes en bloques acotados y añade la revisión PDF/A sin asignar un array de bytes del tamaño del origen en la ruta xref normal- La inyección de marcadores PDF/A preserva el estilo de salida clásico o xref-stream, las generaciones de catálogo e Info, los identificadores del trailer, el comportamiento de rechazo de cifrado y las reglas de degradación al Nivel A
Version 3.85.0
Añadido (Added)
SanitiseActiveContentPdfStreamacepta un espacio de trabajo de poda propiedad del llamador para almacenamiento personalizado acotado o respaldado en disco
Cambiado (Changed)
- La depuración de contenido activo ahora actualiza el catálogo y el trailer mediante búsqueda dispersa, ventanas de análisis acotadas y copia de rangos de tamaño fijo, en lugar de leer el PDF completo en un solo array de bytes en la ruta xref normal
TPdf.SaveAsSanitisedaplicaSaveMemoryLimitySaveTemporaryDirectorya su espacio de trabajo de poda e informa de sus diagnósticos de volcado
Corregido (Fixed)
StripMetadata=Trueahora elimina una referencia/Infodel trailer incluso cuando el catálogo no tiene entrada/Metadata
Version 3.84.0
Cambiado (Changed)
TPdf.PdfVersionahora reutiliza el estado del analizador de PDFium medianteFPDF_GetFileVersionen lugar de volver a analizar el PDF de origen completo- Las consultas de versión leen como máximo el encabezado PDF de ocho bytes para evitar que una declaración de catálogo mal formada degrade la versión efectiva
Version 3.83.0
Cambiado (Changed)
PageLabelledPdfStreamahora resuelve y actualiza el catálogo mediante ventanas de flujo acotadas y el índice disperso de objetos diferidos- La salida de etiquetas de página copia PDF de origen grandes en rangos de tamaño fijo en lugar de asignar un array de bytes del documento completo en la ruta xref normal
Version 3.82.0
Cambiado (Changed)
ApplyDefaultOpenActionahora lee revisiones clásicas, xref-stream, híbridas y de object-stream mediante un índice disperso de objetos diferidos, incluidos documentos con números de objeto muy altos- El procesamiento de la acción de apertura predeterminada usa ventanas de tamaño fijo y copia de rangos acotada en lugar de cargar el PDF completo en un solo array de bytes
Version 3.81.0
Añadido (Added)
PostProcessSavedPdfacepta tres espacios de trabajo buscables propiedad del llamador para techos de memoria personalizados y procesamiento respaldado en disco
Cambiado (Changed)
TPdf.SaveAsaplicaSaveMemoryLimitySaveTemporaryDirectorya cada espacio de trabajo de posprocesamiento del PDF guardado e incluye sus volcados en los diagnósticos- La reparación nativa incremental de xref-stream usa ventanas de cola y de diccionario de tamaño fijo con copia de rangos acotada, en lugar de arrays de bytes de todo el archivo y reasignaciones completas repetidas
Version 3.80.0
Añadido (Added)
ReadAttachmentMetadatacaptura nombres, descripciones, subtipos MIME, tamaños decodificados y legibilidad de los adjuntos en una sola enumeración nativa acotadaExtractAttachmentsToStreamsescribe un lote en flujos propiedad del llamador con límites de bytes por archivo y agregados, bloques de escritura configurables, cancelación y resultados por elemento
Cambiado (Changed)
- La extracción por lotes retiene como máximo un adjunto decodificado en la memoria de PDFium Delphi Component en lugar de materializar cada carga útil del lote
Version 3.79.0
Añadido (Added)
TPdfCacheGovernor,TPdf.CacheBudgetBytes, las consultas de uso por tipo y la telemetría coordinan la memoria de caché retenida mediante un presupuesto global de bytes LRU seguro para hilosTPdfTileCachey la caché de fuentes del sistema de todo el proceso pueden unirse a un gobernador seleccionado por el llamador con una contabilidad exacta de mapas de bits y bytes de fuentes
Cambiado (Changed)
- Las escenas de página analizadas, las miniaturas, los datos de estructura, las instantáneas de texto y las instantáneas de objetos de página ahora compiten bajo un presupuesto
TPdfpredeterminado de 256 MiB, preservando sus límites existentes de número de entradas - Las escenas de página activas permanecen fijas hasta que finaliza el renderizado, y las escenas de página nativas opacas usan un cargo estimado explícito porque PDFium no expone ninguna API configurable de bytes de caché total
Version 3.78.0
Añadido (Added)
TPdfLayoutPagedPlan,TPdfLayoutDocument.BuildPagedPlanyTPdf.GeneratePagedLayouttransmiten comandos de diseño a un almacenamiento buscable seleccionado por el llamador y materializan una página a la vez
Cambiado (Changed)
- Los diseños generados grandes pueden volcar comandos a almacenamiento temporal, retener una caché de páginas LRU configurable, restaurar segmentos de encabezado y pie no contiguos y liberar el texto ajustado tras cada elemento de flujo
Version 3.77.0
Añadido (Added)
TPdfLayoutTable, las filas, las celdas y las opciones de tabla añaden tablas entre páginas con pistas de cuadrícula resueltas, títulos, filas de encabezado repetidas, filas de cuerpo divisibles, enlaces y bordes configurables
Cambiado (Changed)
- Las tablas etiquetadas generadas preservan una estructura continua Table / TR / TH / TD entre páginas, mantienen atómicos los grupos que abarcan filas y asocian automáticamente las celdas de datos con los ID de encabezado
Version 3.76.0
Añadido (Added)
TPdfLayoutConstraintsySetLastItemConstraintsañaden a los diseños generados control configurable de mantener juntos, mantener con el siguiente, salto de página físico antes / después y líneas viudas / huérfanas
Cambiado (Changed)
BuildPlanreutiliza cada resultado de texto ajustado para la predicción de paginación y la emisión de comandos, evitando que keep-with-next repita la medición del texto
Version 3.75.0
Añadido (Added)
TPdf.InspectPdfUaUnicodeCoverageinforma de evidencia acotada a nivel de objeto sobre asignaciones Unicode directas, reemplazos deActualText, errores de asignación, valores Unicode ausentes y objetos de origen sin resolver
Cambiado (Changed)
TPdf.ValidatePdfUaahora reutiliza un único escaneo de caracteres con ámbito de objeto que excluye los caracteres Artifact y generados, y evita que elActualTextde un objeto de texto enmascare el contenido adyacente
Version 3.74.0
Cambiado (Changed)
ValidatePdfUaPageContentTaggingyTPdf.ValidatePdfUaahora informan depvuaiArtifactInStructureTreecuando un objeto de página Artifact es reclamado por un MCID del árbol de estructura, incluidos los artifacts de paginación basados en trazados- El escaneo de contenido de página PDF/UA ahora corta el circuito solo después de detectar tanto contenido real sin etiquetar como contención Artifact no válida, preservando la cobertura entre páginas sin repetir comprobaciones completadas
Version 3.73.0
Añadido (Added)
TPdf.InspectPdfUaLanguageCoverageinforma de evidencia acotada de objetos de página y cadenas de estructura para los tramos de lenguaje natural, incluidos el lenguaje efectivo, el origen de la declaración, el MCID, el índice de estructura y extractos de textoResolvePdfUaEffectiveLanguageresuelve las declaraciones de lenguaje de contenido marcado, del ancestro de estructura más cercano y del catálogo con evidencia explícita de validez
Cambiado (Changed)
TPdf.ValidatePdfUaahora informa depvuaiNaturalLanguageUncoveredcuando el texto que no es artifact o las cadenas de accesibilidad no tienen una declaración/Langefectiva válida
Version 3.72.0
Añadido (Added)
TPdf.InspectPdfAMetadatainforma de evidencia de equivalencia tipada por campo para las ocho asignaciones de Info a XMP de ISO 19005-1, incluidos los valores vacíos explícitos y los fallos de análisis de fechasTPdf.NormalizePdfAMetadatarepara solo las propiedades XMP asignadas que no coinciden, preservando los espacios de nombres no relacionados y las alternativas de lenguaje no predeterminadas
Cambiado (Changed)
TPdf.ValidatePdfAahora informa depvaiInfoXmpValueMismatchcuando los valores Info decodificados por PDFium difieren de los valores XMP con tipos correctos tras una comparación de fechas consciente de Unicode o de zona horaria
Version 3.71.0
Añadido (Added)
InspectPdfVT2sStreamdevuelve evidencia de condiciones de impresión para cada parte MIME de PDF/VT, incluidas la identidad del OutputIntent, la procedencia del perfil incrustado o MIME, los hashes ICC y datos de encabezado, y los recuentos de páginas y registros DPartFPdfIccProfileproporciona inspección acotada del encabezado ICC y de la tabla de etiquetas, con soporte de MD5, SHA-256, espacios de color, versión, clase de dispositivo, ID de perfil y descripción de perfil multilingüe
Cambiado (Changed)
- La validación PDF/VT-2s ahora resuelve los adjuntos MIME ICC anteriores mediante especificaciones de archivo URL de
DestOutputProfileRefy validaCheckSum,ICCVersion,ProfileCS,ProfileName, la clase de dispositivo y los espacios de color de proceso permitidos - Todas las partes PDF/VT ahora requieren un OutputIntent
GTS_PDFXautoritativo, un empaquetado de perfil incrustado o externo apropiado para la base PDF/X y la misma condición de impresión caracterizada, mientras que los adjuntos exclusivos de PDF/X permanecen fuera de las comparaciones PDF/VT - La validación PDF/VT-2 de un solo archivo ahora reconoce
DestOutputProfileRefcomo un perfil de destino externo en lugar de informar de que falta
Version 3.70.0
Cambiado (Changed)
- La validación PDF/VT ahora comprueba
GTS_Scope,GTS_XID,GTS_EnvyGTS_Encapsulateddirectamente en cada XObject en lugar de permitir que diccionarios cercanos o anidados satisfagan los requisitos de las pistas - El ámbito
Recordahora resuelveRecordLeveldesde el diccionario indirectoDPartRoot, mientras que el ámbitoStreamse rechaza en archivos PDF/VT-1 - Los flujos de contenido decodificados de páginas y Form XObject ahora validan la visibilidad de recursos
Do, los recuentos de ocurrenciasSingleUsey la propiedad de los registros de destinatarios mediante los recursos heredados efectivos y la jerarquía DPart - Los XObject encapsulados ahora validan la forma booleana, el ámbito recomendado, el
Intentde Image, los grupos de transparencia aislados, los espacios de color de fusión y las dependencias de contenido opcional directas o anidadas
Version 3.69.0
Cambiado (Changed)
- La validación PAdES ahora rechaza las entradas duplicadas de
Contents,ByteRange,SubFilter,FilteryTypeen lugar de aceptar el valor seleccionado por el analizador - El descubrimiento de firmas ahora usa un escaneo lineal de diccionarios consciente de flujos, reconoce tokens de nombres PDF escapados y no puede ser redirigido por un diccionario anidado cerrado colocado antes del
ByteRangereal - La validación del
ByteRangede la firma ahora exige que el hueco excluido coincida exactamente con el token hexadecimal directo deContents, al tiempo que sigue permitiendo revisiones incrementales posteriores - Los diccionarios de firma ahora requieren un
Filtercon valor de nombre y aplican combinaciones consistentes de tipo y subfiltroSigoDocTimeStamp
Version 3.68.0
Añadido (Added)
TPdf.BuildPadesEvidenceReportcorrelaciona datos de firmas PDFium, política CMS, estado de confianza y de sellado de tiempo, hashes de la ruta de certificados, cobertura DSS/VRI y decisiones de revisiones posteriores para cada firmaTPadesEvidenceReportexporta evidencia acotada de firmas múltiples como JSON o CSV e informa de telemetría de origen, firma, DSS, revisión y truncamiento
Cambiado (Changed)
- La validación de confianza PAdES ahora registra identidades SHA-256 para el certificado del firmante y la ruta de certificados de Windows ordenada, preservando la validación sin conexión de forma predeterminada
- La generación de evidencia reutiliza una única captura retenida de bytes de origen en los análisis de cumplimiento, confianza, DSS y revisión, en lugar de copiar el PDF original en un nuevo flujo para cada etapa
Version 3.67.0
Añadido (Added)
TPadesSignatureFieldOptionscrea nombres de campos de firma configurables, valores semilla requeridos, listas de motivos y de attestación legal, certificados de firmante aceptables y bloqueos de campo- La firma local y remota puede crear firmas de aprobación o certificación con las transformaciones ISO 32000-1
FieldMDPyDocMDP
Cambiado (Changed)
- Las firmas de certificación preservan los permisos existentes del catálogo mientras registran la nueva firma mediante
/Perms /DocMDP
Version 3.66.0
Añadido (Added)
RenderPageBandedToStreamescribe la salida PNG o TIFF directamente en un flujo del llamador, con altura de banda, compresión PNG y límites de bytes de salida configurablesRenderPageBandedToEncoderalimenta códecs definidos por el llamador con bandas de página secuenciales y devuelve telemetría de bandas, filas, memoria, finalización y salida
Corregido (Fixed)
RenderPageBandedahora preserva la geometría de renderizado de página completa y recorta cada banda solicitada en lugar de reescalar la página completa en cada banda
Version 3.65.0
Añadido (Added)
TPdfParallelRenderReportahora informa del tamaño de origen, la memoria capturada máxima, el backend de almacenamiento y el tipo de respaldo compartido
Cambiado (Changed)
RenderPagesParallelcomparte el origen capturado mediante memoria inmutable, una asignación de archivo de solo lectura o acceso aleatorio deFPDF_LoadCustomDocument, en lugar de asignar un segundo array de bytes del documento completo- Los orígenes de renderizado paralelo volcados a disco permanecen bajo
SaveMemoryLimity ya no requieren recargar el PDF completo en la memoria direccionable del proceso
Version 3.64.0
Añadido (Added)
ImportImposedahora tiene una sobrecarga que devuelveTPdfImpositionExecutionReportcon recuentos de importación nativa, orígenes únicos, huecos en blanco, plantillas XObject, objetos de formulario, generación de contenido y páginas de salida
Cambiado (Changed)
- La imposición de geometría cero envía cada página de origen ordenada por una única llamada a
FPDF_ImportPagesByIndexantes de la inserción de páginas en blanco y la composición N-up nativa - La imposición de geometría personalizada reutiliza una plantilla nativa de XObject por página de origen única, lee métricas de página en caché sin cambiar la página de origen y preasigna el almacenamiento exacto del plan
Version 3.63.0
Añadido (Added)
BeginPageObjectEditTransaction,CommitPageObjectEditTransactionyRollbackPageObjectEditTransactionagrupan mutaciones nativas de objetos de página en un lote atómico con ámbito de página y reversión validada por instantáneaPageObjectEditTransactionStatusinforma de la página vinculada, el estado sucio, el recuento de mutaciones exitosas y el recuento de generaciones de contenido
Cambiado (Changed)
- Los lotes de objetos confirmados ahora invocan
FPDFPage_GenerateContentuna vez en lugar de una por cada mutación de inserción, eliminación, transformación, propiedad, marca, objeto de anotación o apariencia - El guardado, los cambios de página, la eliminación de páginas, las transacciones de edición anidadas y las actualizaciones nativas fallidas de inserción o de anotaciones se rechazan antes de que el contenido diferido pueda perderse
Version 3.62.0
Añadido (Added)
ReadPageObjectsSnapshotcaptura datos de objetos de página propiedad del llamador con presupuestos de objetos, trazados, recortes, marcas, texto, cadenas y tiempoPageObjectsSnapshotproporciona reutilización LRU consciente de revisiones con capacidad configurable y telemetría de ocupación, aciertos y fallos
Cambiado (Changed)
PageComplexityahora reutiliza la instantánea inmutable de objetos de página en lugar de repetir consultas nativas de enumeración de objetos, transparencia, trazados e imágenes
Version 3.61.0
Añadido (Added)
TPdfahora expone una LRU unificada de miniaturas para vistas previas incrustadas y renderizadas, con límites configurables de entradas y bytes, además de telemetría de aciertos, fallos, expulsión, ocupación y revisiónRenderPageThumbnailacepta rotación, opciones de renderizado, color de fondo yTPdfColorScheme, preservando el contrato de mapa de bits propiedad del llamador
Cambiado (Changed)
- La extracción y el renderizado repetidos de miniaturas reutilizan resultados nativos de PDFium mediante claves de revisión, página, origen, tamaño, rotación, flags, fondo y esquema de color, incluida la ausencia en caché de miniaturas incrustadas opcionales
TPdfThumbnailViewsincroniza su caché de mapas de bits de páginas visibles con las revisiones de miniaturas del documento, de modo que las ediciones no dejen vistas previas obsoletas
Version 3.60.0
Añadido (Added)
ReadTextPageSnapshotcaptura Unicode, asignaciones UTF-16, geometría y estilo de caracteres, y metadatos normalizados de objetos de texto en una sola pasada, con presupuestos explícitos de caracteres, objetos, nombres de fuente y tiempoTextPageSnapshotproporciona copias profundas propiedad del llamador mediante una LRU configurable consciente de revisiones, con telemetría de capacidad, recuento, aciertos y fallos
Cambiado (Changed)
GetStructuredTextyGetTextInReadingOrdercon diseño físico ahora reutilizan la misma instantánea de texto y aplican ordenación geométrica O(n log n)
Corregido (Fixed)
- Las cachés pequeñas de instantáneas de texto y estructura ahora expulsan la página más antigua al almacenar datos nuevos bajo el índice de página solicitado, evitando el aliasing de caché entre páginas
Version 3.59.0
Añadido (Added)
LifecycleActionPolicyselecciona la ejecución automática deshabilitada, solo explícita o compatible de las acciones de ciclo de vida de documento y página PDFExecuteDocumentLifecycleActionexpone acciones de JavaScript, apertura, cierre, guardado e impresión del documento, mientras queExecutePageLifecycleActionejecuta acciones de apertura y cierre de página sin cambiarPageNumber
Cambiado (Changed)
- Las cargas de página sin interfaz ahora reciben las mismas acciones automáticas de apertura y cierre de página que las cargas impulsadas por el visor, con páginas temporales reutilizadas o liberadas bajo el bloqueo de renderizado
Version 3.58.0
Añadido (Added)
ReadStructureElementsyVisitStructureElementsproporcionan un recorrido iterativo de la estructura etiquetada con presupuestos explícitos de profundidad, elementos, atributos y tiempo, además de un estado de finalización detalladoStructureElementsForPageexpone instantáneas de página con base uno sin cambiarPageNumber, respaldadas por una caché LRU configurable consciente de revisiones con telemetría de aciertos, fallos y recuento
Cambiado (Changed)
- Los consumidores de accesibilidad, reflujo, validación y visor ahora reutilizan instantáneas de estructura propiedad del llamador hasta que una edición relevante del documento o de la página las invalida
Version 3.57.0
Añadido (Added)
- Los callbacks nativos completos de hospedaje de formularios ahora proporcionan manejadores de página diferidos seguros frente al ciclo de vida, enrutamiento de cursor de la vista de interacción, notificación de cambios de valor, rectángulos de texto seleccionado, eventos URI y eventos de destino GoTo
FormHostCallbacksCompleteinforma de la disponibilidad de los callbacks, mientras queFormSelectionRectsyClearFormSelectionRectsexponen la geometría de selección acotada en el espacio de página
Corregido (Fixed)
- Los callbacks de página actual de XFA ahora traducen correctamente entre los índices de página de base cero de PDFium y el
PageNumberde base uno del componente - Los callbacks URI de AcroForm y XFA ahora preservan los bytes URI en bruto y requieren aprobación explícita del anfitrión antes de cualquier lanzamiento externo
Version 3.56.0
Añadido (Added)
- Las instantáneas indexadas de
PageMetricsexponen las dimensiones, rotación, etiqueta, transparencia y cinco cajas de página estándar de una página sin cambiar la página activa
Cambiado (Changed)
- Las lecturas repetidas de metadatos de página reutilizan una caché de instantáneas nativa invalidada automáticamente, reduciendo las aperturas de página en cargas de trabajo de miniaturas, preflight y análisis de documentos
Version 3.55.0
Añadido (Added)
- La inspección de trazados expone los puntos de control Bézier cúbicos exactos cuando la build de PDFium cargada proporciona
FPDFPath_GetBezierControlPoints, con una sonda opcional de capacidad para DLL antiguas FormFieldTypeAtPoint,TPdfView.FormFieldTypeAty las propiedades indexadas deFontFlagsexponen datos nativos de formularios y fuentes sin manejadores en brutoTPdf.Signaturesdevuelve todos los contenidos de firma nativos, ByteRanges, subfiltros, motivos, horas y permisos en una sola instantánea propiedad del llamador
Cambiado (Changed)
- Las comprobaciones de presencia de campos de formulario ahora usan pruebas de impacto nativas directas por punto en lugar de abrir y cerrar manejadores de anotaciones
Corregido (Fixed)
- La validación PDF/E-1 ahora permite campos AcroForm ordinarios, archivos incrustados y anotaciones FileAttachment, al tiempo que informa con precisión del
/XFAy/NeedAppearances truede AcroForm de nivel superior, incluidos los valores indirectos y de object-stream
Version 3.54.0
Añadido (Added)
FPdfProductionañade selección de imágenes multicódec medida, backends de procesamiento de color y de fuentes, rutas SVG, planes de reemplazo con estilo, actualizaciones transaccionales de paquetes XFA, vectores de códigos de barras, modelos Portfolio y extracción segura de RichMediaFPdfStandardsExecutionañade medición y conversión GeoPDF, reparación transaccional de PDF/A, planes PDF/UA-2, perfiles multicolores externos, evidencia histórica de DSS y VRI, consultas DPart, hechos profundos de PDF/E y franjas PDF/R de memoria fijaTPdf.ImportImposedcompone planes N-up y de folleto acotados mediante rutas N-up nativas o de XObjects de página con geometría exacta de medianil, sangrado y creeping, mientras queTPdf.CompareWithinforma diferencias semánticas, geométricas y de píxeles con tolerancia- La firma PAdES ahora admite validadores de ruta y proveedores HSM conectables, PDF MAC adjunto a la firma,
cms-algorithm-protectiony documentos de política de firma sin conexión
Cambiado (Changed)
- El motor de diseño acepta HTML y Markdown acotados, fluye a través de columnas y resuelve pistas de cuadrícula fijas, automáticas y fraccionarias
- Los ciclos de ida y vuelta XFDF ahora conservan campos multivalor y de texto enriquecido, ventanas emergentes, acciones, destinos, superposiciones de apariencia, espacios de nombres personalizados y el estado explícito de presencia
Version 3.53.0
Añadido (Added)
ConfigurePdfLibraryproporciona configuración inmutable del renderizador nativo, fuentes, V8, Brotli, ruta de fuentes de usuario y sandbox antes de la primera carga de PDFium- Los atributos nativos de estructura, las relaciones de anotaciones, los archivos adjuntos de anotaciones, los valores tipados de diccionario, las políticas de foco, las consultas de z-order de enlaces y formularios y los diagnósticos de asignación TTF predeterminada están disponibles a través de API de alto nivel acotadas
TPdfView.ReplaceFormTextAndKeepSelectionpreserva la selección activa a través de ediciones repetidas y los eventos de liberación del botón derecho ahora llegan al motor de formularios nativo
Cambiado (Changed)
- La hora determinista del documento ahora usa una conversión de calendario UTC estable además de la época fija, produciendo los mismos metadatos en cada zona horaria del anfitrión
- Las escrituras de cadenas de archivos adjuntos validan el resultado nativo y codifican las claves de diccionario como UTF-8
Version 3.52.0
Añadido (Added)
TPdf.GetImageObjectRenderedBitmapdevuelve el resultado renderizado de un objeto de imagen con su matriz, espacio de color, máscaras y estado de renderizado actuales aplicadosTPdf.TextObjectGlyphWidth,TPdf.TextObjectFontSizeyTPdf.SetTextObjectFontSizeexponen la medición nativa de glifos y la edición exacta del tamaño de fuente del objeto de textoTPdf.TransformPageObjectClipPath,TPdf.DetachFormObjectChild,TPdf.SharePageObjectMarkyTPdf.IsAnnotationObjectSubtypeSupportedañaden edición precisa de objetos de contenido e inspección de capacidades
Version 3.51.0
Corregido (Fixed)
- Ocho miembros de
TPdfanunciados en notas de versión anteriores estaban declarados en la sección privada y no se podía llamar a ellos desde fuera de la unidadPDFium; ahora son públicos, tal y como está documentado:LinkAtPoint,GetTextRenderMode,GetTextObjectRenderedBitmap,IsAnnotationSubtypeSupported,ChooseRenderFlags,AttachmentHasKey,GetAttachmentStringValueySetAttachmentStringValue
Cambiado (Changed)
- La documentación de referencia en inglés ahora cubre todos los miembros públicos de
TPdfyTPdfView: 88 miembros que no tenían página de referencia recibieron una, y las páginas de clase, el índice de navegación y la referencia de la API los enumeran a todos - Las páginas de referencia que antes apuntaban a una página compartida ahora enlazan a la página del propio miembro, de modo que un resultado de búsqueda abre la descripción de la API que se buscó
- La referencia de la API documenta las enumeraciones y los registros accesibles desde las firmas públicas, incluidos los tipos de informe de carga y de flujo, los tipos de texto, fuente y OCR, los tipos del generador de diseño, los tipos de validación PAdES, los tipos de lote y validación, y los tipos de renderizado paralelo
Version 3.50.0
Añadido (Added)
- Cada demo de interfaz gráfica ahora se abre con contenido listo para usar en lugar de un formulario vacío: las demos de visor y de laboratorio cargan un documento de muestra generado, las demos de informes producen un informe completado al iniciarse y las demos de procesamiento generan de antemano entradas de muestra para que la acción principal se ejecute con un solo clic
MultiPageViewer,SplitViewyFontPropertiesgeneran documentos de muestra en memoria al iniciarse (una presentación de seis páginas, dos documentos de comparación en paralelo y una página de fuentes múltiples para inspeccionar con un clic)- Las demos de procesamiento como
MergePDF,BatchExport,SplitPDF,ExtractText,PDFtoJpg,PrintPDFyPrintPreferencesgeneran de antemano PDF de muestra junto al ejecutable y rellenan sus controles de entrada, con regeneración idempotente que nunca sobrescribe archivos existentes FormFillyExtractImagescargan automáticamente los archivos de muestra incluidos en sus carpetas de demo,ImageToPDFgenera dos mapas de bits de muestra,WatermarkStamppreconstruye sus muestras de sello yXfdfLabse abre sobre un documento generado que contiene anotaciones de texto y de resaltado
Cambiado (Changed)
CreatePDFahora generaSample.pdfjunto al ejecutable al iniciarse sin mostrar un diálogo, de modo que el documento existe en cuanto se abre la demoTPdf.AboutInfoy los metadatos del instalador ahora informan Version 3.50.0 de manera consistente
Version 3.49.0
Añadido (Added)
FORM_GetTextDirectionyFORM_SetTextDirectionde los binarios PDFium actualizados ahora están vinculados, manteniendo la capa de vinculación dinámica con cobertura completa de las 472 exportaciones de PDFiumTPdf.FocusedFormFieldTextDirectionyTPdf.SetFocusedFormFieldTextDirectionexponen la dirección de texto en memoria del widget enfocado mediante el nuevo enumeradoTPdfFormTextDirection(ftdUnknown,ftdAuto,ftdLTR,ftdRTL), con equivalentes enTPdfViewque repintan la escena de la página tras un cambio de dirección
Cambiado (Changed)
FPDF_LIBRARY_CONFIGahora refleja el diseño de la versión 6 de PDFium con el campo experimentalm_BrotliEnabledpara los binarios compilados conPDF_ENABLE_BROTLITPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.49.0 de manera consistente
Version 3.48.0
Añadido (Added)
- El demo
PDFViewerahora genera en memoria un documento de muestra de seis páginas al iniciarse mediante la API de creación, de modo que el visor se abre con contenido renderizado y sin ningún archivo de ejemplo en el disco - Un panel de miniaturas construido sobre
TPdfThumbnailViewofrece vistas previas de las páginas con navegación por clic junto al árbol de marcadores en los tres ports del demo - La búsqueda del visor ahora resalta todas las coincidencias de la página actual mediante
HighlightSearchTexten lugar de un único rectángulo de resultado, con el recuento de coincidencias mostrado en la barra de estado - Los botones de la barra de herramientas
Nighty2-Upactivan con un solo clic el modo de renderizado nocturno duotono y el modo de visualización a doble página
Cambiado (Changed)
- La selección de texto del visor ahora usa el motor de selección integrado de
TPdfViewcon selección de palabras por doble clic, selección por arrastre y atajos de portapapeles, en sustitución del código de selección escrito a mano - Las páginas se renderizan con sombra paralela y desplazamiento suave para una experiencia de lectura moderna
TPdf.AboutInfoy los metadatos del instalador ahora informan Version 3.48.0 de manera consistente
Version 3.47.0
Añadido (Added)
FPdfBenchmarkejecuta corpus de PDF acotados con pasadas de calentamiento y de medición configurables, límites de páginas y píxeles, cancelación cooperativa y estado por caso de superado, fallido u omitidoTPdfBenchmarkReportregistra los tamaños en bytes de entrada y de salida guardada, la latencia de carga y de primera página, el rendimiento de renderizado, los tiempos de guardado y reapertura, el conjunto de trabajo pico muestreado, los hashes SHA-256 semántico y de píxeles, la estabilidad entre ejecuciones repetidas, las puertas de hash esperado y la equivalencia de reapertura independiente- Los informes de rendimiento exportan CSV seguro para fórmulas y JSON estructurado para CI, la cualificación de versiones y el seguimiento longitudinal del rendimiento
GetSkiaRenderCapabilities,RenderPageSkiayRenderPageSkiaByIndexexponen el renderizado nativo opcional de páginas y formularios con Skia, con reutilización de la caché de páginas analizadas y sin requisito estricto de exportaciones de la DLL- Una ABI de salida de impresión versionada y controlada por capacidades expone la enumeración exacta de placas de tintas directas, el renderizado de placas, la detección de sobreimpresión y la vista previa de sobreimpresión cuando el módulo PDFium cargado las proporciona
Corregido (Fixed)
- Las compilaciones de PDFium sin
PDF_USE_SKIAahora se cargan con normalidad en lugar de fallar porque faltan las exportaciones experimentales de Skia
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.47.0 de manera consistente
Version 3.46.0
Añadido (Added)
ValidatePdfRahora comprueba el contenido de página exclusivamente rasterizado, la geometría de bandas, los modelos de color, la resolución efectiva, los parámetros de compresión, los metadatos requeridos y los perfiles cifrados de PDF 2.0 mediante opciones de validación configurablesBuildPdfARepairPlanconvierte la evidencia de validación en pasos de remediación ordenados por dependencias con clases de seguridad, protecciones de impacto en firmas y salida JSONBuildPdfXProductionPreflightinforma de las cajas de página, las fuentes incrustadas, las output intents, los colorantes, la transparencia, la sobreimpresión, las separaciones, la resolución de imagen y la preparación para producción sin descodificar las cargas de imagen- La validación de estructura PDF/UA-2 ahora comprueba la propiedad de los archivos asociados, el orden de lectura, las descripciones, las relaciones y la detectabilidad
Cambiado (Changed)
TAssociateFile.Description,TPdf.ImageInfoyTPdf.PageComplexityexponen los metadatos que necesitan los flujos de trabajo de archivos asociados y de preflight de producciónTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.46.0 de manera consistente
Version 3.45.0
Añadido (Added)
TPdfXmpPacketanaliza, edita, clona y serializa XMP con conocimiento de espacios de nombres, incluidos espacios de nombres desconocidos, contenedores RDF tipados, valores URI y de recurso, calificadores, alternativas de idioma, envolturas de paquete y relleno preservadoTPdf.ReadXmpPacketySaveAsWithXmpPacketexponen la lectura de metadatos de alto nivel y la salida atómica, y los cambios en documentos firmados requieren autorización explícita
Seguridad (Security)
- El lector XML acotado rechaza DTD y entidades externas y limita los bytes del paquete, el anidamiento, los nodos, los atributos y las referencias numéricas a caracteres
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.45.0 de manera consistente
Version 3.44.0
Añadido (Added)
TPdfValidationRuleRegistryregistra cláusulas de perfil con gravedad, dependencias, orientación de reparación, evidencia y predicados integrados o personalizadosTPdfValidationBudgetyTPdfValidationExecutionContextacotan reglas, fallos, objetos, recursión, evidencia UTF-8, memoria reservada, tiempo transcurrido, fallo rápido y cancelación cooperativaValidatePdfFilesParallelvalida archivos mediante documentos de trabajo aislados mientras preserva el orden de entrada y agrega distribuciones de incidencias, tiempos, fallos, cancelaciones y errores de carga
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.44.0 de manera consistente
Version 3.43.0
Añadido (Added)
TPdfStructureElementahora transporta datos de espacio de nombres, mapeo de roles de espacio de nombres, referencia, archivo asociado, anotación, widget, etiqueta y apariencia para la validación semántica PDF/UA-2ValidatePdfUa2StructureElementsy sus validadores específicos comprueban espacios de nombres y contención de ISO/TS 32005, rejillas de tabla acotadas, anotaciones, formularios, asociaciones Formula/MathML, archivos asociados, raíces de documento, FENote, listas, referencias TOC, títulos y leyendas sin cargarpdfium.dllClassifyPdfUaNamespaceidentifica los espacios de nombres de estructura de PDF 1.7, PDF 2.0, MathML, ARIA, DPUB, personalizados y ausentesPdfUa2StructureHasIssueproporciona una consulta de incidencia única segura para C++Builder sin devolver un set de Pascal por valor
Cambiado (Changed)
ValidatePdfUaStructureElementsaplica automáticamente el nuevo conjunto de reglas semánticas parapuc2mientras preserva la ruta de reglas de PDF/UA-1TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.43.0 de manera consistente
Version 3.42.0
Añadido (Added)
TPdfUaSaveOptions.PdfUa2crea salida PDF/UA-2 conpdfuaid:part2,pdfuaid:rev2024 y una versión efectiva de catálogo PDF 2.0ValidatePdfUadetectapuc2e informa de metadatos de revisión ausentes, archivos que no son PDF 2.0, configuraciones de contenido opcional sin nombre, anotaciones obsoletas y encabezados H genéricos
Cambiado (Changed)
- La validación PDF/UA ahora selecciona reglas específicas de perfil para el orden de tabulación, XFA y encabezados según PDF/UA-1 y PDF/UA-2
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.42.0 de manera consistente
Version 3.41.0
Añadido (Added)
SetPageObjectMarkParamañade o sustituye un parámetro entero, real, de cadena o de blob en una entrada de contenido marcado existente sin reemplazar la marcaRemovePageObjectMarkParamelimina una propiedad seleccionada preservando el nombre de la marca y todas las propiedades no relacionadas
Cambiado (Changed)
- Los números no enteros del contenido marcado ahora realizan el recorrido de ida y vuelta como
pmpFloaten lugar de truncarse en instantáneas enteras - La validación fallida de parámetros durante
AddPageObjectMarkelimina la marca nativa creada parcialmente TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.41.0 de manera consistente
Version 3.40.0
Añadido (Added)
ConfigureSystemFontProviderinstala un mapeador de fuentes de la aplicación antes de que PDFium se inicie y suministra bytes TrueType u OpenType validados para fuentes de documento ausentes o sustituidasTPdfSystemFontPolicycontrola la sustitución de tipos de letra, el respaldo nativo, los límites de bytes por fuente y la caché acotada de solicitudesGetSystemFontProviderStatisticsinforma de la actividad de mapeo, caché, respaldo, rechazo, tablas de datos y manejadores activos
Cambiado (Changed)
- Las retrollamadas del proveedor exponen el tipo de letra, el peso, el estilo, el juego de caracteres y el paso solicitados por PDFium, manteniendo los fallos de retrollamada dentro de la frontera nativa
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.40.0 de manera consistente
Version 3.39.0
Añadido (Added)
AddCidType2Textincrusta datos TrueType suministrados por el llamador con geometría CID-a-GID explícita por glifo y mapeos CID-a-UnicodeTPdfCidFontOptionsselecciona la incrustación completa, el subconjunto preferido con respaldo o el subconjunto requerido y configura presupuestos acotados de fuente, glifos y UnicodeTPdfCidFontReportinforma de las decisiones de subconjunto, los tamaños en bytes, los glifos únicos, el estado de incrustación, el texto esperado, el texto extraído y la integridad de la extracción
Cambiado (Changed)
- La creación de subconjuntos TrueType preserva los identificadores de glifo solicitados, rechaza la salida insegura y revierte cada objeto de página insertado si falla la verificación de mapeo o extracción
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.39.0 de manera consistente
Version 3.38.0
Añadido (Added)
BuildReflowDocumentcrea un árbol de nodos semánticos reutilizable y acotado a partir de la estructura Tagged PDF o de la inferencia de diseño físico en un rango de páginas seleccionadoTPdfReflowDocument.ToHtmlemite encabezados, párrafos, listas, figuras, leyendas, secciones de página y tablas responsivas con escape y con semántica de encabezado y de spanTPdfReflowOptionscontrola la detección de tablas, las secciones de página, la geometría, el CSS, los saltos de línea, el rango de páginas, la cancelación y los presupuestos de recursos
Cambiado (Changed)
- El contenido de las tablas sustituye a los bloques de párrafo superpuestos durante el reflow, y el estado de página activa se restaura tras el éxito, el fallo o la cancelación
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.38.0 de manera consistente
Version 3.37.0
Añadido (Added)
ApplyOcrSearchLayerrenderiza las páginas seleccionadas mediante PDFium y envía píxeles BGRA acotados de arriba abajo a unIPdfOcrProvidersuministrado por el llamadorTPdfOcrWordtransporta texto Unicode, confianza y cuadriláteros en el espacio de píxeles que se mapean mediante la geometría nativa de página en texto invisible con capacidad de búsquedaTPdfOcrReportregistra la finalización por página, las omisiones por texto existente, los fallos, la cancelación, los píxeles renderizados y las palabras aceptadas o rechazadas
Cambiado (Changed)
- La inserción OCR preserva los flujos de imagen del escaneo original, filtra los resultados malformados o de baja confianza, se confirma una vez por página y restaura la página activa
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.37.0 de manera consistente
Version 3.36.0
Añadido (Added)
ExtractTablesdetecta tablas con reglillas y alineadas por espacios en blanco a partir de la geometría nativa de palabras y de las reglillas de trazados transformadosTPdfTableinforma de filas, columnas, celdas combinadas, límites de página, celdas de encabezado, modo de detección, confianza y salida directa CSV o JSONExtractDocumentTablesescanea todas las páginas bajo presupuestos compartidos y marca las tablas coincidentes que continúan a través de los límites de página
Cambiado (Changed)
- La extracción de tablas aplica límites configurables de palabras, reglillas, celdas y tablas, y restaura la página activa tras los escaneos a nivel de documento
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.36.0 de manera consistente
Version 3.35.0
Añadido (Added)
GenerateTaggedLayoutcrea un nuevo documento de diseño semántico con contenido marcado nativo, un árbol de estructura Document, mapeos ParentTree e IDTree y metadatos de idioma del documentoTPdfLayoutSemanticsmodela encabezados, secciones, listas, figuras, leyendas, tablas, asociaciones de encabezado, spans, texto alternativo, texto actual, idiomas e identificadores de elementoTPdfLayoutDocument.AddLinkemite anotaciones Link de URI y asocia cada anotación con su elemento de estructura Link mediante mapeos OBJR y StructParent
Cambiado (Changed)
- El texto del diseño adopta por defecto la semántica de párrafo, mientras que los encabezados, los pies, las reglas, las imágenes y los formularios reutilizables se consideran por defecto artefactos salvo etiquetado explícito
- La validación del plan semántico rechaza identificadores duplicados, padres ausentes, ciclos, contenencias de lista o tabla no válidas, figuras sin texto de reemplazo e identificadores de encabezado de tabla sin resolver antes de la emisión del documento
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.35.0 de manera consistente
Version 3.34.0
Añadido (Added)
TPdf.AddShapedTextescribe ejecuciones de glifos RTL, bidi, contextuales y con ligaduras mediante la modelización nativa del sistema y las APIs de fuente CID Type 2 de PDFiumShapePdfTextyTPdfUniscribeTextShaperexponen identificadores de glifo posicionados, avances, desplazamientos, clústeres de origen, posiciones visuales de ejecución y niveles bidi sin modificar un documento
Cambiado (Changed)
- Los mapas ToUnicode generados cubren cada glifo modelizado, mientras que
ActualTextalmacena la cadena Unicode lógica original para consumidores de extracción y accesibilidad conformes - Las cadenas de contenido marcado con marcas de orden de bytes UTF-16 ahora se descodifican correctamente a través de
PageObjectMarks TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.34.0 de manera consistente
Version 3.33.0
Añadido (Added)
TPdfLayoutCachedNodeconstruye contenido de diseño con subclases en el primer uso y admite colocaciones escaladas repetidas medianteAddCachedNodeTPdfLayoutPlaninforma de aciertos y fallos de la caché de medición, de las colocaciones de nodos en caché y de los XObjects nativos reutilizados
Cambiado (Changed)
BuildPlanreutiliza planes coincidentes según la identidad completa de restricciones de página, contenido, fuente, estilo, origen y medidor, sin repetir la medición de textoGenerateLayoutconvierte cada nodo en caché único en un XObject vinculado al destino y crea objetos Form ligeros para cada colocaciónTPdf.AboutInfo, los metadatos del paquete y los metadatos del instalador ahora informan Version 3.33.0 de manera consistente
Version 3.32.0
Añadido (Added)
TPdfLayoutDocumentconstruye texto ajustado, espaciadores, reglas, imágenes, XObjects de página reutilizables, saltos de página explícitos, encabezados y pies en un plan de páginas medidoGenerateLayoutpagina el diseño completo antes de añadir atómicamente páginas y objetos de página nativos, con referencias{page}y{pages}estables
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete y los metadatos del instalador ahora informan Version 3.32.0 de manera consistente
Version 3.31.0
Añadido (Added)
- Los constructores de
TPdfPagePlandescriben operaciones de página de eliminación, movimiento, inserción, división y fusión sin aplicarlas ValidatePagePlandevuelve el mapa exacto de páginas antiguas a nuevas e inventaría marcadores afectados, destinos con nombre, etiquetas de página, campos de formulario, páginas etiquetadas, funciones importadas y firmas
Seguridad (Security)
- Los planes que dejarían destinos de navegación colgantes o cambiarían contenido firmado sin autorización explícita se rechazan antes de que se ejecute cualquier operación nativa de página
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.31.0 de manera consistente
Version 3.30.0
Añadido (Added)
SaveRecoverySnapshotescribe un paquete de recuperación con suma de verificación y tamaño acotado que contiene la huella del origen y el diario de edición del documento verificadoRestoreRecoverySnapshotreejecuta un paquete de recuperación solo cuando su suma de verificación, cadena de diario, huella del origen y huella recuperada coinciden todasEnableRecoveryAutosaverefresca atómicamente un archivo de recuperación explícito tras cada commit, deshacer o rehacer con cambios, sin reescribir el PDF de origen
Cambiado (Changed)
InspectRecoverySnapshotinforma del origen de recuperación, las huellas, el recuento de entradas, la posición y el almacenamiento acotado sin aplicar el paqueteImportEditJournaly la restauración de recuperación ahora requieren autorización explícitaAllowSignedDocumentantes de aplicar ediciones a un PDF firmado- El almacenamiento del paquete de recuperación usa el almacén de acceso aleatorio acotado configurado y el reemplazo de escritura directa en el mismo directorio para diarios grandes y actualizaciones de autoguardado seguras ante fallos
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.30.0 de manera consistente
Version 3.29.0
Añadido (Added)
BeginEditTransaction,CommitEditTransactionyRollbackEditTransactionagrupan ediciones nativas arbitrarias del documento en transacciones atómicasUndoEdityRedoEditaplican deltas inversos y directos verificados con SHA-256 sobre cambios de páginas, objetos, anotaciones, adjuntos y metadatosExportEditJournaleImportEditJournalpersisten deltas portables acotados con validación de huella del origen y de cadena de resúmenes para su reejecución posterior
Cambiado (Changed)
- Las instantáneas de transacción usan salida nativa reproducible, de modo que los commits sin cambios permanecen vacíos incluso cuando los guardados ordinarios de PDFium contienen identificadores o marcas de tiempo no deterministas
- Los commits fallidos y la reejecución de diario no válida restauran atómicamente el documento cargable anterior, mientras que el recuento de entradas, los bytes almacenados y el tamaño de la instantánea se mantienen bajo límites configurados por el llamador
- Los PDF firmados requieren autorización explícita
AllowSignedDocumentantes de que comience una transacción de edición del documento TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.29.0 de manera consistente
Version 3.28.0
Añadido (Added)
TPdf.InspectOptionalContentenumera capas OCG, configuraciones predeterminada y alternativas, estados de uso View/Print/Export, metadatos de zoom e idioma, capas bloqueadas, arrays de orden, grupos de radio, políticas OCMD, expresiones de visibilidad y estado efectivo de renderizadoTPdf.SaveAsOptionalContentConfiguredescribe una copia estrictamente verificada con estados de capa seleccionados por el llamador para un uso y una configuración elegidos
Cambiado (Changed)
- La salida de estados de capa ahora actualiza tanto los arrays de configuración
/ONy/OFFcomo los diccionarios de estado Usage de los OCG, de modo que PDFium aplique la visibilidad solicitada a través de su contexto de renderizado nativo - Las escrituras de configuración rechazan grupos desconocidos, cambios en capas bloqueadas, conflictos de grupos de radio, archivos cifrados en fase intermedia y archivos firmados sin autorización explícita, y eliminan por defecto las reglas de estado automático para mantener determinista el resultado seleccionado
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.28.0 de manera consistente
Version 3.27.0
Añadido (Added)
TPdf.RenderPageByIndexrenderiza cualquier página basada en uno con un tamaño exacto en píxeles sin cambiar la página de edición activa ni disparar eventos de cambio de páginaPageSceneCacheCapacity,PageSceneCacheCountyClearPageSceneCacheexponen control y diagnóstico acotados de la caché de escenas
Cambiado (Changed)
- Los renderizados de páginas por índice, las miniaturas renderizadas y la extracción de miniaturas incrustadas ahora reutilizan el estado de página analizado de PDFium mediante una caché LRU de ocho entradas por defecto
- Las entradas de escena se invalidan al activar una página, al editar, ante cambios del árbol de páginas, retrollamadas de estado de formulario, borrado explícito y desmontaje del documento, y los renderizados en curso se retienen con seguridad hasta su liberación
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.27.0 de manera consistente
Version 3.26.0
Añadido (Added)
TPadesSignatureAlgorithmInfoinforma del resumen, la firma, la clave pública y el OID de curva con nombre de cada firmante CMS junto con su estado de política de algoritmo evaluado de forma independienteInspectPadesSignatureAlgorithmyEvaluatePadesSignatureAlgorithmreconocen los perfiles P-256, P-384, P-521, brainpoolP256r1, brainpoolP384r1, brainpoolP512r1, Ed25519 y Ed448
Seguridad (Security)
- La validación PAdES ahora rechaza desajustes de curva elíptica y de resumen, OID de firma ECDSA en desacuerdo con el resumen CMS, parámetros EC sin nombre, parámetros Ed25519 y longitudes de salida SHAKE256 de Ed448 distintas de 512 bits
- La verificación CMS nativa sigue siendo la fuente de validez criptográfica, mientras que los algoritmos no disponibles y las curvas no reconocidas se notifican como
pcsUnsupporteden lugar de tratarse como firmas no válidas TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.26.0 de manera consistente
Version 3.25.0
Añadido (Added)
TPdf.ExportObjectGraphexporta los objetos activos clásicos, de xref-stream y de object-stream como JSON tipado y acotado con diccionarios, arrays, cadenas, nombres, valores escalares, referencias indirectas, recuentos de bytes de flujo y resúmenes SHA-256 de flujo opcionales explícitosTPdf.SaveAsObjectGraphPatchedestablece o elimina valores de diccionario de nivel superior comprobados contra el esquema mediante valores de parche tipados nulos, booleanos, enteros, reales, de nombre, de cadena de texto y de referencia indirecta
Seguridad (Security)
- La exportación del grafo de objetos aplica presupuestos de objetos, recursión, cadenas y bytes de salida, mientras que el parcheo valida cada operación antes de la entrega y rechaza referencias colgantes, operaciones duplicadas, entradas cifradas, cambios protegidos de filtro o longitud de flujo y documentos firmados salvo autorización explícita
- Los parches del grafo de objetos se preparan como revisión incremental, se materializan de nuevo para la verificación xref, se cargan en modo estricto mediante PDFium y se copian o renombran atómicamente solo cuando todas las comprobaciones tienen éxito
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.25.0 de manera consistente
Version 3.24.0
Añadido (Added)
TPdf.ValidatePadesTrustverifica cada firma separada detectable contra elByteRangeoriginal exacto, evalúa el enlace signing-certificate-v2 y la confianza actual del sistema Windows, e informa de estados independientes de firma, cadena, revocación y marca de tiempoTPdf.ValidatePadesTrustAsynctoma una instantánea del origen cargado original antes del envío, informa del progreso por etapas para el análisis, la criptografía, la construcción de cadenas, AIA, OCSP, CRL y el trabajo de marca de tiempo RFC 3161, y admite cancelación cooperativaTPadesTrustValidationOptionsselecciona confianza sin conexión o en línea, verificación opcional de revocación y marca de tiempo, un tiempo de espera acotado de recuperación de URL, un token de cancelación y una retrollamada de progreso
Seguridad (Security)
- Los tokens de marca de tiempo de firma y de Document Time-stamp ahora validan su impresión de mensaje SHA-256, la firma CMS adjunta, la cadena TSA y el estado de revocación opcional de forma independiente de la firma ordinaria del documento
- La validación de confianza nunca calcula el hash de una copia reguardada por PDFium, usa por defecto la recuperación de certificados solo desde la caché sin conexión e informa de estados no admitidos o indeterminados en lugar de tratar como válida la evidencia de confianza o revocación nativa no disponible
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.24.0 de manera consistente
Version 3.23.0
Añadido (Added)
TPdf.RenewPadesArchiveTimestampyRenewPadesArchiveTimestampToStreamañaden un nuevo Document Time-stamp RFC 3161 a una cadena de firmas PAdES existente sin cambiar ningún byte históricoTPadesArchiveTimestampOptionscontrola el acceso TSA, el nonce, la capacidad de token reservada y un refresco completo opcional del DSS, mientras queTPadesArchiveTimestampReportregistra los niveles de origen y resultado, las longitudes de cadena, los tamaños en bytes y la identidad de la marca de tiempo devuelta
Corregido (Fixed)
- La salida PAdES B-LTA nueva y renovada declara ESIC ExtensionLevel 2, mientras que la validación B-LT ya no requiere Level 2 salvo que haya un Document Time-stamp presente
Seguridad (Security)
- La renovación calcula el hash de los bytes originales cargados exactos más cualquier actualización del DSS solicitada, rechaza orígenes cifrados o incompletos, valida el resultado B-LTA detectable antes de escribir la salida y prepara la salida de archivo antes del reemplazo
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.23.0 de manera consistente
Version 3.22.0
Añadido (Added)
TPdf.AnalyzeSignatureRevisionsreconstruye la cadena original de revisiones incrementales y devuelve los cambios de objetos por firma clasificados según los permisos DocMDP y FieldMDPTPadesRevisionAnalysisReportdistingue las actualizaciones permitidas de formularios, anotaciones, firmas y material de validación de los cambios de página o documento no permitidos, los casos sin resolver y las definiciones sombra sospechosas
Seguridad (Security)
- El análisis de revisiones detecta definiciones de objetos sin referencia, redefiniciones de objetos de firma, contenido activo, cadenas de revisión malformadas y objetos comprimidos sin resolver, aplicando presupuestos acotados de revisiones, objetos y cambios
- El análisis usa siempre el archivo original cargado, el búfer de memoria, el flujo personalizado o el origen progresivo completado, en lugar de bytes reescritos por PDFium
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.22.0 de manera consistente
Version 3.21.0
Añadido (Added)
TPdf.PreparePadesRemoteSignaturecrea un marcador de firma separada de ancho fijo y devuelve una solicitud persistente que contiene el resumen SHA-256 del documento, elByteRangeexacto, las coordenadas de reserva y la huella del PDF preparadoTPdf.CompletePadesRemoteSignaturecompleta sesiones de firma en HSM, en la nube o interrumpidas tras validar la solicitud persistida y el CMS devueltoTPdf.SavePadesRemoteSigningRequestyTPdf.LoadPadesRemoteSigningRequestproporcionan un formato binario de sesión versionado y estable para fronteras de proceso y de máquina
Seguridad (Security)
- La finalización rechaza PDF preparados modificados, coordenadas de
ByteRangealteradas, marcadores reutilizados no vacíos, valores CMS demasiado grandes, formas de SignedData no admitidas, atributos signing-certificate-v2 ausentes y resúmenes de mensaje CMS que no coinciden con el documento preparado TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.21.0 de manera consistente
Version 3.20.0
Añadido (Added)
TPadesDssOptions.Vrisescribe un diccionario indirecto/Type /VRIpor firma, con clave el SHA-1 en mayúsculas del valor/Contentsdescodificado completo incluido el rellenoTPadesDssVriselecciona el material de certificados, OCSP y CRL mediante índices validados, mientras que la firma PAdES B-LT y B-LTA ahora crea automáticamente el VRI de la nueva firma
Cambiado (Changed)
- Los certificados del DSS, las respuestas OCSP y las CRL se desduplican por hash de contenido con ordenación estable por primera aparición, comprobaciones de colisión de bytes exactos y remapeo de referencias VRI antes de escribir cualquier byte de destino
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.20.0 de manera consistente
Version 3.19.0
Añadido (Added)
TPdf.GetStructuredTextconvierte la página actual en registros reutilizables de bloque, línea y span con estilo, preservando los índices de caracteres de origen, los escalares Unicode, la geometría, los nombres de fuente, los tamaños, los pesos y los ángulos de textoTPdfStructuredTextOptionsselecciona el orden del flujo de contenido o del diseño físico, el enriquecimiento opcional de fuente y semántico, y un presupuesto máximo de caracteres con fallo cerrado- Los fragmentos Tagged PDF y de contenido legible heurístico enriquecen los bloques con tipo de estructura, nivel de encabezado, idioma, origen e identidad del elemento de estructura, mientras que el texto alternativo de Figure sin coincidencia sigue representado
Cambiado (Changed)
- La extracción de diseño físico ahora usa ordenación de caracteres O(n log n), búferes de líneas y spans de crecimiento geométrico, agrupación de líneas y columnas, construcción de Unicode con búfer y caché de fuentes de objetos de texto adyacentes no nulos para un rendimiento predecible en páginas grandes
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.19.0 de manera consistente
Version 3.18.0
Seguridad (Security)
TPdf.SaveAsRedactedaplica cada rectángulo/Redacta una instantánea aislada del documento, elimina cada objeto de página de nivel superior que interseca y pinta un rectángulo de reemplazo opaco sin cambiar el documento cargado- La salida censurada elimina las anotaciones de censura, elimina opcionalmente otras anotaciones que intersecan, borra los adjuntos incrustados nativos y retira del catálogo
/AF, el contenido activo, los formularios, los metadatos y los objetos inalcanzables de revisiones anteriores TPdfRedactionOptionscontrola el color de reemplazo, la eliminación de anotaciones superpuestas y un presupuesto de escaneo de objetos de página con fallo cerrado, mientras queTPdfRedactionReportregistra cada eliminación y cada métrica de salidaTPdfSanitiseOptions.StripAssociatedFilesahora elimina por defecto las referencias de archivos asociados a nivel de catálogo
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.18.0 de manera consistente
Version 3.17.0
Añadido (Added)
TPdf.RenderPagesParallelrenderiza concurrentemente solicitudes de páginas basadas en uno, y cada trabajador posee un módulo PDFium, un documento y un estado de página cargados de forma independiente a partir de una única instantánea capturada del documentoTPdfParallelRenderOptionscontrola los DPI, el número de trabajadores, la rotación, los indicadores de renderizado nativos, el color de fondo, los límites de píxeles por página y los límites agregados de salida retenidaTPdfParallelRenderReportpreserva el orden de las solicitudes y devuelve búferes BGRA o RGBA de arriba abajo propiedad del llamador con éxito, cancelación, fallo, dimensiones, tiempos y detalles de diagnóstico por página- El renderizado progresivo de los trabajadores sondea
IPdfCancellationTokenentre fragmentos nativos, mientras que las solicitudes no válidas y los fallos de presupuesto quedan aislados en sus resultados correspondientes TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.17.0 de manera consistente
Version 3.16.0
Añadido (Added)
TPdfEncryptionRevision.erR7añade salida AES-256-GCM de ISO/TS 32003 con/V 6,/R 7,/CFM /AESV4y la extensión de desarrollador de PDF 2.0 requerida- Cada cadena y flujo cifrados reciben un IV único de 96 bits, un texto cifrado de longitud invariable y una etiqueta de autenticación de 128 bits, mientras que
EncryptMetadata = Falsepreserva los bytes del flujo de metadatos DecryptAesGcmDocumentBytesvalida las contraseñas de usuario o propietario, los permisos cifrados, los datos PDF MAC independientes opcionales y cada etiqueta GCM antes de devolver bytes de texto plano compatibles con PDFium- La salida AESV4 puede combinarse con
TPdfEncryptOptions.EnableIntegrityProtectionpara que la autenticación GCM por objeto y la protección PDF MAC de documento completo de ISO/TS 32004 coexistan - El cifrado ahora usa entradas de referencia cruzada clásicas válidas en lugar de interpretar texto con forma de objeto dentro de los datos de flujo como objetos indirectos
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.16.0 de manera consistente
Version 3.15.0
Añadido (Added)
TPdfEncryptOptions.EnableIntegrityProtectionescribe códigos de autenticación PDF MAC independientes de ISO/TS 32004 para documentos AES-256 del Standard Security Handler revisión 5 y 6TPdf.ValidatePdfMacverifica los bytes originales exactos del origen, el/ByteRangeestricto que cubre hasta el EOF, elAuthenticatedDataCMS, la clave de archivo derivada de la contraseña, los atributos autenticados, la clave MAC envuelta y el valor HMACFPdfHmacañade HMAC-SHA256 y HKDF-SHA256, mientras queFPdfAesañade las primitivas de AES-256 Key Wrap y de desenvoltura autenticada de RFC 3394TPdfMacValidationResultdistingue códigos de autenticación válidos, ausentes, no válidos y no admitidos con texto de diagnósticoTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.15.0 de manera consistente
Version 3.14.0
Añadido (Added)
TPdf.ValidatePadesahora verifica las firmas CMS separadas contra los segmentos/ByteRangeoriginales exactos en Windows, incluidos los atributos firmados y el valor de la firmaTPadesValidationResultexpone el estado agregado de integridad y los estados por firma de ByteRange, CMS,signing-certificate-v2, confianza del sistema, revocación y marca de tiempo, sin confundir evidencia no admitida o no comprobada con una firma no válida- El enlace del certificado del firmante se comprueba con SHA-256, las cadenas de certificados usan únicamente la evaluación de la caché de confianza del sistema Windows y los códigos de error nativos siguen disponibles para diagnóstico
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.14.0 de manera consistente
Version 3.13.1
Corregido (Fixed)
TPdf.ValidatePadesahora inspecciona el archivo original, la memoria con búfer o los bytes del flujo personalizado en lugar de una copia reguardada por PDFium que podía invalidar desplazamientos o descartar diccionarios de firma- Las comprobaciones de
/ByteRangede PAdES ahora aceptan firmas que cubren una revisión PDF completa anterior seguida de actualizaciones incrementales válidas, y también validan los rangos de Document Time-stamp TPadesValidationResult.SourceStatusdistingue la validación del origen original de la entrada progresiva no disponible o incompleta, y los predicados de conformidad rechazan resultados sin bytes originalesTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.13.1 de manera consistente
Version 3.13.0
Añadido (Added)
FPdfSha3proporciona primitivas SHA3-256, SHA3-384, SHA3-512 y SHAKE256 sin dependencias para ISO/TS 32001 y el trabajo criptográfico relacionado de PDF 2.x- Los contextos incrementales absorben entrada dividida arbitrariamente, mientras que SHAKE256 admite llamadas squeeze repetidas y salida que cruza las fronteras de tasa del esponjado
- Los ayudantes de un solo paso para arrays de bytes y hexadecimales en minúsculas complementan la API de flujo, con validación explícita de ciclo de vida y tamaño en Delphi, C++Builder y Lazarus
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.13.0 de manera consistente
Version 3.12.0
Añadido (Added)
TPdf.ImportFDFimporta datos de formulario FDF desde archivos o flujos y aplica los valores analizados a través de la ruta de campos de widget existenteFdfImportFromStreamyFdfImportFromFileanalizan campos jerárquicos directos o indirectos, cadenas literales y hexadecimales PDF, PDFDocEncoding, texto Unicode, valores de nombre y valores vacíos explícitos bajo presupuestos acotados de recursos- La exportación FDF ahora escribe nombres y valores de campos no ASCII como cadenas de texto UTF-16BE conformes al estándar y escapa con seguridad los nombres de archivo de origen
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.12.0 de manera consistente
Version 3.11.0
Añadido (Added)
TPdf.DetectPageSkewrenderiza la página actual a bajo DPI y detecta el ángulo de inclinación proyectando los píxeles oscuros sobre ángulos de rotación candidatos, devolviendo el ángulo que maximiza la varianza de sumas por fila (alineación de líneas de texto) con una precisión de ~0.1 gradosTPdfSkewReportexpone el ángulo detectado, la confianza y las dimensiones de la muestraTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.11.0 de manera consistente
Version 3.10.0
Añadido (Added)
TPdf.GetTextInReadingOrderextrae el texto de la página actual en orden bruto del flujo de contenido o en orden de diseño físico (de arriba abajo, de izquierda a derecha) medianteFPDFText_GetCharBox+ extracción de caracteres ordenada por posición, de modo que el texto multicolumna y el reordenado visualmente se lee con naturalidad- El enum
TPdfReadingOrderselecciona entreroContentOrderyroPhysicalLayout TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.10.0 de manera consistente
Version 3.09.0
Añadido (Added)
TPdfImageOptimizeOptions.PreserveBilevelomite las imágenes binarias de 1 bit (ImageMask / escaneos de line art) duranteOptimizeImages, de modo que la reducción de muestreo por vecino más cercano no destruya sus bordes nítidosTPdfImageOptimizeOptions.MinDimensionomite las imágenes más pequeñas que el umbral (normalmente iconos o elementos decorativos que no se benefician de una reducción adicional)TPdfImageOptimizeOptions.Defaultproporciona el punto de partida recomendado (objetivo de 150 DPI, ratio de 1.5, binarias preservadas, dimensión mínima de 8)TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.09.0 de manera consistente
Version 3.08.0
Añadido (Added)
TPdfTileCacheproporciona una caché LRU acotada de teselas de página renderizadas con clave por revisión del documento, página, zoom, rotación, indicadores de renderizado y rectángulo de dispositivo, de modo que las teselas sin cambios no se vuelven a renderizar en los repintados y las teselas obsoletas de un guardado anterior se expulsan automáticamenteTTileKeyexpone la clave de caché compuesta con una fábricaCreateestática y un comparadorEqualsTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.08.0 de manera consistente
Version 3.07.0
Añadido (Added)
TPdf.GetAnnotationFontColoryTPdf.SetAnnotationFontColorenvuelvenFPDFAnnot_GetFontColoryFPDFAnnot_SetFontColor, que estaban enlazadas pero sin usar, exponiendo la lectura y escritura del color de texto del widget para la edición de campos de formulario sin tocar directamente el diccionario de la anotaciónTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.07.0 de manera consistente
Version 3.06.0
Añadido (Added)
TPdf.RenderPageBandedrenderiza la página actual en bandas horizontales mediante una retrollamada, de modo que los pósters y las páginas de ingeniería puedan exportarse sin asignar nunca un mapa de bits de destino completo — cada banda se renderiza en unTBitmaprecién creado con la altura de banda solicitada y se libera cuando la retrollamada vuelveTPdfBandCallbackexpone el contrato por banda (índice de banda, desplazamiento y superior, mapa de bits) con un retorno Boolean que permite a los llamadores cancelar pronto el renderizado por bandasTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.06.0 de manera consistente
Version 3.05.0
Añadido (Added)
TPdf.RenderPageProgressiveWithColorSchemedirige el bucle de renderizado progresivo nativo con un esquema de color para baja visión medianteFPDF_RenderPageBitmapWithColorScheme_Start, permitiendo a los llamadores sobrescribir los colores de relleno y trazo de trazados y de relleno y trazo de texto para accesibilidad, conservando el bucle Continue consciente de cancelaciónTPdfColorSchemeexpone los cuatro campos de sobrescrituraTColorcon unDefaultque delega en los colores integrados de PDFium cuando todos los campos sonclDefaultTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.05.0 de manera consistente
Version 3.04.0
Añadido (Added)
TPdf.ExportFDFserializa los valores de campos de formulario como un documento FDF (ISO 32000-1 §12.7.11) junto a la ruta XFDF existente, reutilizando el mismo modelo de datosTXfdfFieldpara que los llamadores recopilen los campos una vez y emitan cualquiera de los dos formatosFdfExportToStreamyFdfExportToFileenFPdfXfdfexponen el serializador FDF de bajo nivel para llamadores que construyen colecciones de campos con independencia de unTPdfcargadoTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.04.0 de manera consistente
Version 3.03.0
Añadido (Added)
TPdf.SaveAsSanitisedescribe una copia limpia de una sola revisión que retira el contenido activo del catálogo (/OpenAction,/AAdel catálogo,/Names,/AcroForm,/Metadata) y luego poda los objetos inalcanzables para que los cuerpos huérfanos de JavaScript, acciones y adjuntos desaparezcan del cuerpo del archivoTPdfSanitiseOptionsexpone controles de eliminación independientes por vector más una pasada opcional de poda por alcanzabilidad;TPdfSanitiseReportregistra el recuento de entradas eliminadas, el recuento de objetos podados, los tamaños en bytes y cualquier errorTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.03.0 de manera consistente
Version 3.02.0
Añadido (Added)
TPdf.SaveAsPageLabelledescribe una copia PDF completa cuyo árbol de números/PageLabelsdel catálogo se sustituye por los rangos suministrados, aplicando estilos de numeración decimal, romanos en mayúsculas/minúsculas y letras en mayúsculas/minúsculas con cadenas de texto de prefijo opcionales y números iniciales según ISO 32000-1 §12.4.2TPdfPageLabelRange,TPdfPageLabelRanges,TPdfPageLabelStyleyTPdfPageLabelReportexponen el modelo de rangos, el enum de estilos y los recuentos de bytes/rangos por guardado- Las entradas
/PageLabelsexistentes del catálogo se detectan y rechazan salvo que se paseReplaceExisting=True, en cuyo caso la entrada antigua se elimina antes de inyectar los nuevos rangos TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.02.0 de manera consistente
Version 3.01.0
Añadido (Added)
TPdf.FlattenPageRotationfija el/Rotateactual de cada página en el flujo de contenido, las cajas de página y los rectángulos de anotación, y luego restablece/Rotatea 0 — envolviendoFPDFPageObj_TransformF+FPDFAnnot_GetRect/SetRect+FPDFPage_SetMediaBox/SetCropBox+FPDFPage_SetRotationpara que el diseño visual se preserve sin depender de la pista de visualización de rotaciónTPdfFlattenRotationOptionsexpone controles de transformación de anotaciones, intercambio de cajas de página y actualización automática por página;TPdfFlattenRotationReportregistra las páginas procesadas, omitidas y fallidas más el total de objetos y anotaciones transformadosTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.01.0 de manera consistente
Version 3.00.0
Añadido (Added)
TPdf.StampPagesFromPdfestampa una página de origen como superposición o capa inferior Form XObject posicionada, escalada y opcionalmente rotada a lo largo de una o más páginas de destino, envolviendoCreateXObjectFromPage+FPDFPageObj_SetMatrix+FPDFPageObj_SetBlendMode+FPDFPage_InsertObjectAtIndexcon políticas explícitas de caja de página, anclaje, margen, escala, rotación, mezcla y orden zTPdfOverlayOptionsyTPdfOverlayReportexponen los controles de colocación, transformación, mezcla y orden z más los recuentos por página de páginas estampadas, fallidas y omitidasTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 3.00.0 de manera consistente
Version 2.99.0
Añadido (Added)
TPdf.RefreshAppearanceregenera selectivamente el flujo de apariencia de un solo widget medianteFPDFAnnot_SetAP, evitando una reconstrucción completa de página conNeedAppearancesTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.99.0 de manera consistente
Version 2.98.0
Añadido (Added)
TPdfView.MouseDownahora enruta los eventos del botón derecho al motor nativo de relleno de formularios medianteFORM_OnRButtonDown, habilitando menús contextuales e interacciones de widget con el clic derecho- Los elementos 78 (mapeo de anotaciones de enlace), 82 (presentación de widgets) y 83 (modelo de atributos de estructura) del mapa de rutas se confirmaron como ya completados mediante la infraestructura existente
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.98.0 de manera consistente
Version 2.97.0
Añadido (Added)
TPdf.SetDeterministicTimeyTPdf.RestoreActualTimepermiten a las pruebas y a las compilaciones reproducibles inyectar una hora fija de creación, modificación y hora actual mediante retrollamadas nativas admitidasTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.97.0 de manera consistente
Version 2.96.0
Añadido (Added)
TPdf.GetWidgetAdditionalActionJavaScriptlee el JavaScript de acciones adicionales del widget para un disparador de eventos dado medianteFPDFAnnot_GetFormAdditionalActionJavaScriptsin ejecutar ningún scriptTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.96.0 de manera consistente
Version 2.95.0
Añadido (Added)
TPdf.GetObjectTextextrae el texto Unicode de un objeto de página de texto medianteFPDFTextObj_GetTextpara la edición precisa de contenido y el diagnóstico de codificaciónTPdf.GetObjectsByTypedevuelve los índices de todos los objetos de página que coinciden con una categoría (texto, trazado, imagen, formulario, sombreado) para una salida selectiva por categoríaTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.95.0 de manera consistente
Version 2.94.0
Añadido (Added)
TPdf.AttachmentHasKey,GetAttachmentStringValueySetAttachmentStringValueleen, escriben y sondean valores de extensión personalizados de file-spec en adjuntos incrustadosTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.94.0 de manera consistente
Version 2.93.0
Añadido (Added)
TPdf.InsertObjectAtIndexinserta un objeto de página en una posición de pila solicitada medianteFPDFPage_InsertObjectAtIndexen lugar de añadirlo siempre al finalTPdf.UpdateAnnotationObjectconfirma un objeto de apariencia de anotación editado medianteFPDFAnnot_UpdateObjectpara que los cambios en objetos de página propiedad de anotaciones persistan de forma fiableTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.93.0 de manera consistente
Version 2.92.0
Añadido (Added)
TPdf.InsertClipPathcrea un trazado de recorte rectangular y lo inserta en la página actual mediante las rutas nativasFPDF_CreateClipPathyFPDFPage_InsertClipPath, complementando el inspectorPageObjectClipPathexistenteTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.92.0 de manera consistente
Version 2.91.0
Añadido (Added)
TPdf.GetPageComplexityescanea la página actual e informa de los recuentos de objetos de imagen, trazado y texto, además del total de segmentos de trazado, el total de píxeles de imagen y la presencia de transparencia para planificar el renderizadoTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.91.0 de manera consistente
Version 2.90.0
Añadido (Added)
TPdf.IsAnnotationSubtypeSupportedconsulta a la DLL de PDFium cargada qué subtipos de anotación admite antes de editarTPdf.ChooseRenderFlagsselecciona indicadores de renderizado nativos (semitonos, caché de imágenes limitada) a partir de la escala final y del tamaño de destino para el submuestreo adaptativo de imágenesTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.90.0 de manera consistente
Version 2.89.0
Añadido (Added)
TPdf.GetTextRenderModeexpone el modo de renderizado de texto nativo (relleno, trazo, recorte) de un objeto de página de texto para el diagnóstico de creaciónTPdf.GetTextObjectRenderedBitmaprenderiza un solo objeto de texto en un mapa de bits aislado mediante la ruta nativaFPDFTextObj_GetRenderedBitmapTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.89.0 de manera consistente
Version 2.88.0
Añadido (Added)
TPdf.GetThumbnailahora recurre a renderizar un reemplazo cuando la página no tiene miniatura incrustada, implementando la preferencia de miniatura incrustada en primer lugarTPdf.LinkAtPointdevuelve si existe un enlace nativo en una coordenada del espacio de página usandoFPDFLink_GetLinkAtPointen lugar de escaneos solo por rectángulosTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.88.0 de manera consistente
Version 2.87.0
Añadido (Added)
TPdf.AuditActiveContentdevuelve una instantáneaTPdfActiveContentAuditdel recuento de acciones JavaScript, el recuento de archivos incrustados, el recuento de firmas, el tipo de formulario XFA y los permisos del documento sin ejecutar ningún script ni acciónTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.87.0 de manera consistente
Version 2.86.0
Añadido (Added)
TPdf.GetFeatureInventoryescanea todas las páginas una sola vez y devuelve un registro unificado de los recuentos de objetos de texto, trazado, imagen, Form XObject y sombreado, junto con datos de adjuntos, firmas, tipo de formulario, permisos y versión PDFTPdfFeatureInventoryagrega en una única instantánea datos de todo el documento que antes requerían llamadas a propiedades separadasTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.86.0 de manera consistente
Version 2.85.0
Añadido (Added)
TPdf.SaveAsReproduciblereescribe el documento de modo que dos guardados del mismo estado en memoria produzcan una salida idéntica byte a byte- Se eliminan las marcas de tiempo no deterministas de
/Info(/CreationDate,/ModDate) y se omite el/IDdel origen (derivado de bytes dependientes del reloj), mientras que el orden y la generación de objetos permanecen estables TPdfReproducibleReportinforma de los recuentos de objetos conservados y podados más el número de entradas de marca de tiempo eliminadasTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.85.0 de manera consistente
Version 2.84.0
Añadido (Added)
TPdf.SaveAsInlineImagesExternalisedreescribe el documento extrayendo cada imagen en líneaBI/ID/EIen un XObject de imagen reutilizable y sustituyendo el bloque en línea por un operador/ImN Do- Las abreviaturas del diccionario de imagen en línea (
/W,/H,/BPC,/CS,/F, valores de espacio de color y valores de filtro) se expanden a sus nombres completos de image-XObject para que el objeto extraído sea conforme al estándar - El diccionario
/Resources /XObjectde la página se actualiza con las nuevas referencias XObject y el flujo de contenido reescrito se comprime con Flate TPdfInlineImageExternaliseReportinforma de los recuentos de externalizadas, omitidas y fallidas más el recuento de XObjects creadosTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.84.0 de manera consistente
Version 2.83.0
Añadido (Added)
TPdf.SaveAsFlateRecompressedreescribe el documento y recodifica los flujosFlateDecodeelegibles con compresión máxima, sustituyendo un flujo solo cuando el ahorro medido en bytes supera un umbral del llamadorTPdfFlateRecompressOptionsselecciona un ahorro mínimo en bytes y un ratio de ahorro mínimo para que los flujos ya óptimos queden intactosTPdfFlateRecompressReportinforma de los recuentos de flujos recomprimidos, omitidos y fallidos junto con los totales de bytes de los flujos originales y recomprimidos- Los números y generaciones de objetos permanecen estables; solo cambian las cargas de flujos recomprimidos y sus valores
/Lengthdirectos, de modo que cada referencia cruzada superviviente sigue siendo válida TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.83.0 de manera consistente
Version 2.82.0
Añadido (Added)
TPdf.OptimizeImagesrecorre cada objeto de imagen de página y reduce el muestreo de aquellas cuyo DPI efectivo de colocación supera un objetivo seleccionado por el llamador, y luego confirma cada página tocada mediante el generador de contenido nativoTPdfImageOptimizeOptionsselecciona el DPI objetivo y un ratio mínimo para que solo se recodifiquen las imágenes realmente sobremuestreadasTPdfImageOptimizeReportinforma de los recuentos de imágenes optimizadas, omitidas y fallidas junto con un mensaje de fallo estructurado- La reducción de muestreo usa una pasada de vecino más cercano sobre el búfer de mapa de bits nativo de PDFium, preservando el formato, el stride y el canal alfa del origen, y
FPDFImageObj_SetBitmaprecodifica la imagen superviviente TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.82.0 de manera consistente
Version 2.81.0
Añadido (Added)
TPdf.SaveAsDeduplicatedreescribe el documento como una única revisión limpia que colapsa fuentes, imágenes y Form XObjects compatibles en un representante compartido- Una huella de contenido recursiva combina cada diccionario de recursos, su subgrafo alcanzable completo y su carga de flujo en bruto, de modo que los duplicados se fusionan solo cuando todo su contenido es idéntico
- Cada referencia cruzada a un duplicado fusionado se reescribe al representante superviviente, mientras que la tabla de referencias cruzadas clásica reconstruida mantiene estables los números de objeto
TPdfDedupReportinforma de los recuentos de objetos conservados y podados más los recuentos por categoría de fuentes, imágenes y Form XObjects fusionadosTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.81.0 de manera consistente
Version 2.80.0
Añadido (Added)
TPdf.SaveAsReachablereescribe el documento como una única revisión limpia que conserva solo los objetos indirectos alcanzables desde el catálogo y el diccionario /Info del trailerTPdfPruneReportinforma de los recuentos de objetos indirectos conservados y podados junto con los tamaños en bytes de origen y salida, y razones de fallo estructuradas para entradas cifradas o malformadas- Se barren los objetos huérfanos inalcanzables dejados por actualizaciones incrementales, fusiones de páginas o guardados reparados, mientras que la referencia cruzada clásica y el trailer reconstruidos preservan
/Root,/Infoy/IDsin renumerar TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.80.0 de manera consistente
Version 2.79.0
Añadido (Added)
TPdf.CreateDocumentSearchcrea una búsqueda de documento completo hacia adelante o hacia atrás que devuelve una coincidencia cada vez sin construir un índice de texto del documento completoTPdfDocumentSearchResultinforma de la página basada en uno, el rango de caracteres, el texto coincidente y los rectángulos del espacio de página de cada resultado- Las sesiones de búsqueda aceptan
IPdfCancellationToken, retienen solo los manejadores de página y texto actuales de PDFium y terminan de forma segura cuando el documento se cierra TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.79.0 de manera consistente
Version 2.78.0
Cambiado (Changed)
TPdfRangeRequestSchedulerahora adelanta las transferencias superpuestas de menor prioridad para que las pistas críticas de página de PDFium no esperen detrás de descargas en segundo plano- Los bytes dispersos disponibles externamente cancelan las transferencias activas redundantes, mientras que las retrollamadas de transporte reemplazadas o duplicadas devuelven False sin publicar cobertura obsoleta
- La promoción de prioridad preserva los historiales de reintento independientes, y la anticipación del transporte ya no consume el presupuesto de reintento de las colas de rango no afectadas
TPdfRangeRequestStatistics.SupersededRequestCountinforma del trabajo de transporte desplazado por pistas de mayor prioridad o por cobertura suministrada externamenteTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.78.0 de manera consistente
Version 2.77.0
Añadido (Added)
TPdf.SaveAsNormalizedContentescribe contenido de página con sintaxis normalizada en un flujo o un archivo reemplazado atómicamente e informa de los recuentos de páginas normalizadas, omitidas y fusionadasNormalizePdfContentSequenceproporciona normalización de tokens independiente y acotada para secuencias descodificadas de flujo de contenido
Cambiado (Changed)
- Los arrays
/Contentsde página ahora pueden fusionarse en un solo flujo preservando cadenas, nombres, cargas de imagen en línea, operadores desconocidos y estado gráfico entre flujos - Los tokens malformados, los ámbitos de estado desbalanceados, los filtros no admitidos, la entrada cifrada y las reescrituras de documentos firmados tienen políticas explícitas y notificación de estado estructurada
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.77.0 de manera consistente
Version 2.76.0
Añadido (Added)
TPdfStreamInspectorinventaría objetos físicos arbitrarios de flujo PDF e informa de desplazamientos de objeto, longitudes en bruto, cadenas de filtros, DecodeParms, marcadores de archivo externo, estado de cifrado y rutas nativas de imagen o adjuntoCopyRawDatacopia cargas codificadas completas o ventanas de bytes validadas, mientras queDecodeDataaplica predictores ASCIIHex, ASCII85, LZW, Flate, RunLength, TIFF de 8 bits y PNG en el orden declaradoTPdfStreamInspectOptionsacota los recursos de origen, en bruto, descodificados, de diccionario, de recuento de flujos y de ratio de expansión, con informes estructurados para límites, datos malformados, códecs no admitidos, cifrado y fallos de escritura
Cambiado (Changed)
- La resolución de longitud de flujo ahora expone extensiones exactas para valores
/Lengthdirectos e indirectos, incluidos los flujos de longitud cero y las cargas que contienen la secuencia literalendstream TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.76.0 de manera consistente
Version 2.75.0
Añadido (Added)
TPdfLoadOptionsañade políticas compatible, strict y de recuperación a la carga desde archivo, memoria, rango de bytes y flujo personalizadoTPdfLoadReportinforma de la ruta de recuperación nativa, la validez del xref, los desplazamientos dañados, los conflictos de entradas, los recuentos de revisiones, los presupuestos de auditoría y las incidencias estructuradas para documentos clásicos, híbridos y de xref-streamTPdf.SaveAsRepairedcrea una copia completa de una sola revisión y la carga de forma independiente en modo estricto antes de entregar el flujo verificado o reemplazar atómicamente un archivo de destino
Cambiado (Changed)
- Las sobrecargas de carga existentes conservan el comportamiento compatible y ahora publican la validez del xref nativo y el estado de recuperación a través de
LastLoadReport - La carga estricta rechaza documentos que requirieron reconstrucción nativa del xref o que fallaron la auditoría estructural, mientras que la salida de reparación de documentos firmados requiere autorización explícita del llamador
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.75.0 de manera consistente
Version 2.74.0
Añadido (Added)
TPdf.MergeFilesfusiona listas de orígenes respaldados por archivo con rangos de páginas y contraseñas por origen, manteniendo como máximo un documento de origen abiertoTPdfBatchMergeOptionsañade el manejo de errores de detener u omitir, importaciones por origen o por fragmentos, políticas de formulario y de esquema, control de inserción, retrollamadas de progreso, cancelación, copia de preferencias del visor y control de reversiónTPdfBatchMergeReportinforma de las páginas confirmadas y revertidas, los resultados por origen, las llamadas de importación nativas, el lote más grande, el pico de orígenes abiertos, las detecciones de políticas, las incidencias y el estado terminal
Cambiado (Changed)
- La ruta por lotes predeterminada realiza una importación nativa de páginas por origen para que PDFium pueda reutilizar objetos clonados de ese origen, y luego cierra el origen antes de abrir el siguiente archivo
- El modo por fragmentos ofrece puntos de cancelación más finos y lotes nativos más pequeños, mientras que los orígenes parciales fallidos y los resultados de detener o cancelar pueden eliminar todas las páginas insertadas por la operación
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.74.0 de manera consistente
Version 2.73.0
Añadido (Added)
TPdfRandomAccessStoreproporciona E/S secuencial y posicionada segura para subprocesos, mantiene el contenido pequeño en memoria acotada y vuelca una sola vez a almacenamiento temporal privado en un techo seleccionado por el llamadorTPdf.SaveMemoryLimitySaveTemporaryDirectoryconfiguran la preparación del guardado, mientras queLastSaveSpillCountyLastSaveLargestMemoryBufferexponen diagnósticos medibles por guardado
Cambiado (Changed)
- Los búferes de preparación de guardado, conversión de estándares, validación, cifrado, DSS y PAdES ahora comparten almacenamiento de trabajo acotado con archivos de volcado exclusivos de borrado al cerrar y limpieza de memoria
- Las retrollamadas de bloques personalizadas de PDFium serializan las búsquedas ordinarias de flujo y usan lecturas posicionadas independientes del cursor cuando están respaldadas por
TPdfRandomAccessStore - El escaneo de capacidades XFA basado en archivo ahora lee bloques superpuestos de tamaño fijo en lugar de copiar el PDF completo en memoria
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.73.0 de manera consistente
Version 2.72.0
Añadido (Added)
TPdf.BeginIncrementalSave,CommitIncrementalSaveyEndIncrementalSaveproporcionan una sesión de revisiones que añade solo los objetos indirectos cambiados o recién creadosTPdfIncrementalCommitInfoinforma del recuento de objetos cambiados, los bytes añadidos, los bytes totales de salida y el recuento de revisiones con éxito de cada commit
Cambiado (Changed)
- Cada commit sucio preserva la salida previa completa como prefijo exacto de bytes, no emite ninguna revisión cuando nada cambió y continúa el formato clásico o de xref-stream del origen
- La salida incremental nativa de xref-stream se repara con su tipo, entrada propia, longitud, índice y terminador de objeto requeridos antes de seguir procesándose
- Los documentos cifrados se rechazan antes de que comience una sesión, mientras que los documentos firmados requieren permiso explícito del llamador para que la política de firmas no pueda omitirse accidentalmente
- La sobrecarga de archivo completa un archivo temporal hermano antes de reemplazar atómicamente el destino y revierte el estado de la sesión tras cualquier fallo de escritura o reemplazo
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.72.0 de manera consistente
Version 2.71.0
Añadido (Added)
TPdf.SaveAsObjectStreamescribe archivos PDF 1.5+ con grupos de objetos comprimidos y acotados y un xref stream puro que contiene entradas type-2 completasPackPdfObjectStreamspuede modernizar la entrada clásica, híbrida, de xref-stream y de object-stream existente tras resolver la revisión activa
Cambiado (Changed)
- El orden de objetos local a la página, los anchos de campo xref adaptativos, el acceso directo al catálogo y los techos configurables de miembros y bytes descodificados equilibran el tamaño del archivo con el rendimiento de acceso aleatorio
- La sobrecarga de archivo completa un archivo temporal hermano antes de reemplazar atómicamente el destino, mientras que las opciones incrementales, de versión y de agrupación no válidas se rechazan antes de comenzar la salida
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.71.0 de manera consistente
Version 2.70.0
Añadido (Added)
TPdf.SaveAsLinearizedescribe un PDF Fast Web View verdadero en un flujo o archivo usando la agrupación de objetos de primera página, dos secciones de referencia cruzada y las tablas de pistas de desplazamiento de página y objetos compartidos del Anexo F- Los miembros activos de object-stream se materializan automáticamente, permitiendo que las entradas de xref-stream y object-stream se conviertan en salida amigable con rangos sin cambiar el contenido visible de las páginas
Cambiado (Changed)
- La sobrecarga de archivo completa un archivo temporal hermano antes de reemplazar atómicamente el destino, mientras que la sobrecarga de flujo conserva las opciones normales de guardado de PDFium y las comprobaciones explícitas de versión
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.70.0 de manera consistente
Version 2.69.0
Añadido (Added)
TPdfRangeRequestSchedulerconvierte las pistas de rango de bytes de PDFium en trabajo de transporte priorizado, fusionado y acotado en tamaño sin forzar una descarga contigua- La compleción total y parcial, los reintentos acotados, la desduplicación de disponibilidad dispersa, las estadísticas de solicitudes y la cancelación segura por generación admiten canalizaciones HTTP Range y de transporte personalizado
TPdfProgressiveDocument.RangeRequestsrecibe automáticamente las pistas de documento, formulario y página, promoviendo solo los bytes exactos que bloquean una página interactiva
Cambiado (Changed)
CancelProgressiveLoadahora cancela el trabajo de rango activo antes del desmontaje nativo de disponibilidad y flujo, y las compleciones de transporte obsoletas se ignoran con seguridadTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.69.0 de manera consistente
Version 2.68.0
Añadido (Added)
TPdfProgressiveDocumentmantiene viva la sesión de disponibilidad de PDFium mientras un flujo de acceso aleatorio remoto o creciente recibe los rangos de bytes que PDFium solicitaCheckDocumentAvailability,CheckFormAvailabilityyLoadAvailablePagedevuelven pistasTPdfDownloadRangefusionadas para que un host pueda obtener solo los datos necesarios para abrir y mostrar una página linealizadaAvailableByteCountadmite descargas contiguas monótonas, mientras queOnDataAvailableadmite cachés de rangos dispersos y desordenados
Cambiado (Changed)
- Los archivos linealizados usan las puertas nativas de documento, formulario y página progresivas de PDFium; los archivos no linealizados cambian automáticamente al cargador nativo de flujo personalizado cuando el archivo completo está presente
TPdfStreamAdapterpuede exponer un tamaño final lógico distinto de los bytes almacenados actualmente, preservando el límite explícito de 4 GiB deFPDF_FILEACCESSTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.68.0 de manera consistente
Version 2.67.0
Añadido (Added)
TPdfView.AllowFormEventsdesactiva los eventos de ratón, teclado y foco que el visor reenvía a la capa de relleno de formularios, para un visor de solo lectura o uno que dirige por sí mismo la interacción con los formularios- Los campos de formulario siguen renderizándose con normalidad con la opción desactivada: la carga y el cierre de páginas quedan deliberadamente sin bloquear, ya que inicializan la capa de formulario en lugar de reaccionar a la entrada
- El conmutador se une a los interruptores existentes
AllowUserPageChangeyAllowUserTextSelectiony vale True por defecto, de modo que el comportamiento existente no cambia
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.67.0 de manera consistente
Version 2.66.0
Añadido (Added)
- Las acciones con nombre que un documento lanza (ISO 32000-1 §12.6.4.11) ahora llegan al host mediante el nuevo evento
OnNamedAction; antes todas ellas se descartaban - Sin manejar, los cuatro nombres estándar de navegación —
NextPage,PrevPage,FirstPage,LastPage— mueven la página, acotando en la primera y la última en lugar de dar la vuelta TPdf.PerformNamedActionpermite a una aplicación disparar directamente el mismo comportamiento, devolviendo False para un nombre sin significado suministrado por la biblioteca
Corregido (Fixed)
- Una prueba de cifrado medía el cuerpo de un flujo escaneando hacia atrás desde
endstream, lo que en ocasiones confundía un byte del texto cifrado con un terminador de línea y notificaba un fallo intermitente; la biblioteca era correcta en todo momento
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.66.0 de manera consistente
Version 2.65.0
Añadido (Added)
BuildToUnicodeCMapgenera el CMap ToUnicode (ISO 32000-1 §9.10.3) que necesita una fuente CID para que su texto pueda copiarse, buscarse y leerse con tecnología de asistencia — sin uno, el texto se renderiza correctamente pero se extrae como nada- Las entradas se agrupan en bloques según el límite de 100 por bloque que fija la especificación, los glifos duplicados se escriben una sola vez y
.notdefse omite - El CMap sigue la convención CID = GID, de modo que no se necesita ningún flujo
CIDToGIDMapa su lado
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.65.0 de manera consistente
Version 2.64.0
Añadido (Added)
- Las anotaciones de tinta y de sello se dibujan desde sus propios objetos de página en lugar de desde el flujo de contenido de la página, y esos objetos ahora son accesibles:
AnnotationObjectCountyAnnotationObjectInfolos leen,AddPathToAnnotationentrega a la anotación un trazado construido conCreatePath, yRemoveAnnotationObjectelimina uno - Construir la apariencia de un sello ya no requiere una herramienta externa: cree el trazado como de costumbre y entréguelo a la anotación en lugar de a la página
- PDFium solo acepta objetos de página en los subtipos de tinta y sello, de modo que cualquier otro subtipo se rechaza con un mensaje que nombra la restricción en lugar de fallar de forma oscura
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.64.0 de manera consistente
Version 2.63.0
Añadido (Added)
TPdf.AddStandardFontTextdibuja texto con una de las 14 fuentes que todo lector de PDF debe proporcionar, sin incrustar ningún programa de fuente — el archivo resultante es mediblemente más pequeño que el mismo texto dibujado conAddText, que incrusta el tipo de letra del sistema que encuentra- El nuevo enum
TPdfStandardFontnombra las 14 fuentes, de modo que un llamador no puede teclear mal un nombre de fuente base; PDFium coincide con esos nombres exactamente y una errata daría silenciosamente como resultado que no exista la fuente - PDF/A y PDF/X exigen ambas que todas las fuentes estén incrustadas, de modo que la salida orientada a esos perfiles debería seguir usando
AddText
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.63.0 de manera consistente
Version 2.62.0
Añadido (Added)
TPdf.TextObjectGlyphOutlinedevuelve el contorno de un glifo de la fuente de un objeto de texto como segmentos de trazado, para convertir texto en arte vectorial o inspeccionar un glifo que una sustitución de fuente pueda haber alterado- El resultado reutiliza el tipo
TPdfPathSegmentsexistente, de modo que se lee exactamente como el contorno de un objeto de trazado dibujado - Las coordenadas están en el espacio de diseño de la propia fuente, normalizadas de modo que una em sea 1.0; el tamaño de fuente solicitado no las escala, de modo que un llamador que quiera unidades de dispositivo multiplica por el tamaño en puntos
- Un resultado vacío significa que la fuente no expone ningún contorno para ese glifo, lo cual no es un error; pedir un glifo de un objeto que no es de texto lanza una excepción
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.62.0 de manera consistente
Version 2.61.0
Añadido (Added)
TPdf.InspectAvailabilityinforma de lo que PDFium puede decir de un PDF sin cargarlo como documento: si el archivo está linealizado (“web optimizado”), si un análisis completo tendría éxito, si contiene datos de formulario y qué página mostraría primero un visor- Los nuevos tipos
TPdfAvailability,TPdfLinearizationyTPdfFormAvailabilitytransportan las respuestas; el flujo se lee pero no se retiene, y su posición se restaura al volver - Esto cierra la última laguna de la familia
FPDFAvail_*, que estaba enlazada y cargada pero no tenía ningún llamador en toda la biblioteca - Delphi, Lazarus y C++Builder cubren cada uno los datos notificados, la garantía de posición del flujo y el rechazo de flujo nil
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.61.0 de manera consistente
Version 2.60.0
Añadido (Added)
- El contenido marcado (ISO 32000-1 §14.6) ahora es accesible desde la API de alto nivel:
PageObjectMarkslee cada etiqueta BDC y su lista de propiedades de un objeto de página,AddPageObjectMarkescribe una,RemovePageObjectMarkelimina una yPageObjectMarkedContentIDinforma del MCID - Los nuevos tipos
TPdfContentMark,TPdfContentMarkParamyTPdfMarkParamKindtransportan el nombre de etiqueta y sus parámetros tipados (entero, float, cadena, blob), con la clase de valor resuelta desde PDFium en lugar de adivinada por el getter que tiene éxito - Añadir una marca reconstruye el flujo de contenido de la página, de modo que la etiqueta sobrevive a un guardado; esto tuvo que ser explícito porque
SaveAsno regenera el contenido por sí solo - Delphi, Lazarus y C++Builder llevan cada uno seis casos, incluido uno que descomprime el flujo de contenido guardado para confirmar que el operador BDC y su lista de propiedades realmente quedaron grabados
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.60.0 de manera consistente
Version 2.59.0
Añadido (Added)
TPdfAnnotationincorporaHasLinkUriyLinkUri, de modo queCreateAnnotationahora puede producir un enlace web funcional: la anotación se guarda con una acción/URIque apunta a la dirección indicada- Establecer un URI de enlace en cualquier subtipo distinto de
anLinklanza una excepción, ya que solo una anotación Link lleva un diccionario de acción - El campo es de solo escritura por ahora; leer de vuelta un destino de enlace pasa por la familia
FPDFLink_*, que necesita el manejador del documento - Delphi, Lazarus y C++Builder verifican todos que los bytes guardados lleven la acción
/URIy la dirección de destino
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.59.0 de manera consistente
Version 2.58.12
Añadido (Added)
- La validación PDF/X notifica
pvxiTrimBoxWithArtBoxcuando una página lleva/TrimBoxy/ArtBoxa la vez; ambas declaran la página acabada, de modo que un RIP no tiene forma de saber cuál es la autoritativa (ISO 15930) - La validación PDF/X notifica
pvxiPageBoxOutsideMediaBoxcuando/TrimBoxo/BleedBoxsobresale de/MediaBox, incluida una caja con origen negativo; una caja que excede el soporte no puede imprimirse - Los rectángulos se normalizan antes de la comparación, de modo que se acepta cualquier orden de esquinas, y una caja que toca exactamente el borde del soporte sigue validando
- Los informes de preflight clasifican ambas incidencias bajo estructura y nombran la solución concreta
- Delphi, Lazarus y C++Builder cubren los dos casos rechazados y el conforme
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.58.12 de manera consistente
Version 2.58.11
Añadido (Added)
- La validación PDF/UA notifica
pvuaiTociWithoutToccuando un documento etiqueta entradas TOCI pero nunca etiqueta el contenedor TOC al que pertenecen, lo que deja a la tecnología de asistencia anunciando elementos de la tabla de contenidos sin tabla de contenidos (ISO 14289-1 §7.7) - Los informes de preflight clasifican la incidencia bajo estructura y recomiendan envolver las entradas en un elemento TOC
- C++Builder obtiene su primera cobertura de pruebas PDF/UA junto a los casos de Delphi y Lazarus
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.58.11 de manera consistente
Version 2.58.10
Añadido (Added)
- La validación PDF/A notifica
pvaiSymbolicTrueTypeEncodingcuando una fuente TrueType simbólica lleva una entrada/Encoding; ISO 19005-1 §6.3.7 solo admite el cmap integrado de la fuente, de modo que un/Encodinglo contradiría - El indicador simbólico se lee del
/FontDescriptor, ya esté escrito en línea en el diccionario de la fuente o referenciado indirectamente; una fuente no simbólica conserva su/WinAnsiEncodingo/MacRomanEncodingrequerido sin ser marcada - Los informes de preflight clasifican la incidencia bajo contenido y recomiendan eliminar la entrada
- Delphi y Lazarus cubren el caso marcado más ambos casos aceptados; C++Builder cubre el caso marcado y el no simbólico
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.58.10 de manera consistente
Version 2.58.9
Añadido (Added)
- La validación PDF/A notifica los límites de implementación de contenedores del Anexo C de ISO 19005-1:
pvaiNameOverLimitpara nombres de más de 127 bytes,pvaiArrayOverLimitpor encima de 8191 elementos,pvaiDictOverLimitpor encima de 4095 entradas ypvaiNestingOverLimitpor encima de 28 niveles de anidamiento - Los límites son inclusivos, de modo que un contenedor situado exactamente en uno sigue validando; las pruebas fijan tanto el lado rechazado como el aceptado de cada frontera
- Los informes de preflight clasifican las cuatro incidencias bajo estructura y nombran el límite concreto en cada recomendación
- Delphi y Lazarus cubren los cuatro límites más los casos frontera; C++Builder cubre el límite de array y la frontera
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.58.9 de manera consistente
Version 2.58.8
Añadido (Added)
- La validación PDF/R notifica
pvriPageImageMismatchcuando el recuento de imágenes no coincide con el recuento de páginas; ISO 23504-1 §6.5.1 hace que cada página sea exactamente una imagen de banda, de modo que una página sin imagen o con varias no es conforme - Las pruebas de Delphi, Lazarus y C++Builder cubren una página sin imagen, una página con dos y el caso conforme de una sola imagen
Cambiado (Changed)
- Las pruebas de inyección de marcadores PDF/R ahora parten de una página de origen que ya lleva una imagen de banda, ya que la inyección de marcadores añade metadatos y no puede suministrar contenido de página
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.58.8 de manera consistente
Version 2.58.7
Añadido (Added)
- La validación PDF/R notifica
pvriFontForbiddencuando una página nombra un recurso de fuente; una página PDF/raster lleva la imagen escaneada y nada más (ISO 23504-1 §6.5.2) - La validación PDF/R notifica
pvriForbiddenImageFilterpara codificaciones de banda fuera de la lista blanca, de modo que/LZWDecode,/RunLengthDecode,/ASCII85Decode,/ASCIIHexDecode,/JBIG2Decodey/Cryptse rechazan mientras que/CCITTFaxDecode,/DCTDecode,/JPXDecodey/FlateDecodepasan (ISO 23504-1 §6.6) - Los informes de preflight clasifican ambas incidencias bajo contenido y recomiendan la solución concreta
- Las pruebas de Delphi, Lazarus y C++Builder cubren un recurso de fuente, un filtro rechazado y una página que usa solo codificaciones de la lista blanca
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.58.7 de manera consistente
Version 2.58.6
Añadido (Added)
- La validación PDF/E notifica
pveiFontNotEmbeddedcuando un documento muestra uso de fuentes pero no lleva ningún programa de fuente incrustado, de modo que el requisito se comprueba también en la ruta sin DLL además de mediante PDFium - Un plano de ingeniería tiene que renderizarse de forma idéntica décadas después, de modo que ISO 24517-1 no exime ninguna de las 14 fuentes estándar; la comprobación se aplica por igual a
/Type1,/TrueType,/Type0y/MMType1 - Los informes de preflight clasifican la nueva incidencia bajo contenido y recomiendan incrustar cada programa de fuente
- Las pruebas de Delphi, Lazarus y C++Builder cubren un descriptor sin programa, un
/FontFile2incrustado y un documento que no usa ninguna fuente
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.58.6 de manera consistente
Version 2.58.5
Añadido (Added)
InjectPdfEMarkersahora escribe la output intent que exige ISO 24517-1 §6.2: un perfil ICC de destino sRGB incrustado, una output intent/GTS_PDFE1que lo nombra y el array/OutputIntentsdel catálogo, todo como parte de la misma actualización incremental- El flujo del perfil deriva su
/Nde la cabecera ICC en lugar de asumir tres componentes, de modo que un perfil CMYK quedaría descrito correctamente - La validación PDF/E notifica
pveiMissingOutputIntentypveiMissingIccProfile, de modo que un candidato sin una condición de color declarada ya no se acepta - Las pruebas de Delphi, Lazarus y C++Builder cubren una output intent aceptada, una sin perfil de destino y un catálogo sin ninguna output intent
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.58.5 de manera consistente
Version 2.58.4
Añadido (Added)
- La validación PDF/X ahora notifica
pvxiFontNotEmbeddeddesde un escaneo de bytes, de modo que una fuente no incrustada se detecta en la ruta sin DLL en lugar de solo mediante la comprobación respaldada por PDFium - A diferencia de PDF/A, las 14 fuentes estándar no están exentas en PDF/X, de modo que cualquier uso de fuente sin un programa de fuente incrustado se notifica
- La comprobación sigue siendo conservadora: se dispara solo cuando el archivo muestra uso de fuentes pero no lleva ningún
/FontFile,/FontFile2ni/FontFile3, porque comparar el recuento de descriptores con el de programas produce falsos positivos en descriptores compartidos - Las pruebas de Delphi, Lazarus y C++Builder cubren un descriptor sin programa, un programa incrustado y un documento que no usa ninguna fuente
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.58.4 de manera consistente
Version 2.58.3
Añadido (Added)
- La validación PDF/X ahora notifica
pvxiColorSpaceForbiddencuando un candidato PDF/X-1a lleva/DeviceRGB,/CalRGBo/Lab, que ISO 15930-1 §6.2 excluye de su intercambio CMYK - La comprobación se limita exclusivamente a PDF/X-1a, de modo que PDF/X-3 y posteriores siguen permitiendo el RGB y los espacios independientes del dispositivo que asocian con la output intent
- Solo se prueban tokens de nombre de espacio de color sin ambigüedad; un flujo
ICCBasednecesita que su/Nesté resuelto y queda en la capa de modelo de objetos - Las pruebas de Delphi, Lazarus y C++Builder cubren un espacio RGB marcado, un espacio Lab marcado, un par CMYK y escala de grises aceptado, y el caso permitido en PDF/X-3
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.58.3 de manera consistente
Version 2.58.2
Añadido (Added)
- La validación PDF/X ahora notifica
pvxiTransparencyForbiddenpara un grupo de transparencia o una máscara suave activa, que ISO 15930-1 §6.2 (PDF/X-1a) e ISO 15930-3 §6.3 (PDF/X-3) prohíben - La comprobación se limita a la conformidad detectada, de modo que PDF/X-4 y PDF/X-6 siguen permitiendo la transparencia y un archivo cuyo nivel no pudo identificarse nunca se marca por una regla que quizá no le aplique
- Una máscara suave desactivada explícitamente con
/SMask /Noneno se trata como transparencia PdfHasActiveSMaskse trasladó deFPdfPdfaa la interfazFPdfPdfCommonpara que todos los validadores puedan compartir una única regla de máscara suave- Las pruebas de Delphi, Lazarus y C++Builder cubren un grupo marcado en X-1a, una máscara suave marcada en X-3, una máscara suave desactivada y el caso permitido en X-4
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.58.2 de manera consistente
Version 2.58.1
Añadido (Added)
- La validación PDF/X ahora comprueba la forma de la output intent requerida por ISO 15930-7 §6.2.4:
pvxiOutputIntentSchemenotifica un subtipo presente que no es/GTS_PDFX, ypvxiOutputIntentMissingIdentifiernotifica un/OutputConditionIdentifierausente - El subtipo se compara como un token de nombre completo, de modo que un nombre más largo como
/GTS_PDFXVersionya no pasa, mientras que una escritura escapada con#xxdel mismo nombre sí sigue pasando - Una output intent que no lleva ningún subtipo se deja estar, porque su ausencia ya la notifican las incidencias de nivel de marcador
- Los informes de preflight registran ambas incidencias bajo la categoría de output intent y sugieren la corrección
- Las pruebas de Delphi, Lazarus y C++Builder cubren el subtipo aceptado, un subtipo PDF/A, un token de nombre más largo, un subtipo ausente y un identificador de condición ausente
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.58.1 de manera consistente
Version 2.58.0
Cambiado (Changed)
- Las 35 retrollamadas que PDFium invoca desde sus propias tramas de C++ (relleno de formularios, XFA, plataforma JavaScript, pausa de renderizado progresivo y lectura y escritura de flujos) ahora contienen cualquier excepción de Pascal y devuelven el valor de fallo documentado en lugar de deshacerse a través de la frontera entre lenguajes
- Un manejador de eventos que lance una excepción, una asignación que falle o un error inesperado dentro de una retrollamada ya no pueden tumbar el proceso ni dejar a PDFium en un estado indefinido
Corregido (Fixed)
- Registrar un temporizador de formulario filtraba su entrada cuando el temporizador subyacente no podía crearse
Añadido (Added)
- Las pruebas de Delphi, Lazarus y C++Builder ahora cubren el guardado en un flujo de destino que rechaza las escrituras y afirman que el documento permanece utilizable y guardable después
Version 2.57.8
Corregido (Fixed)
- Las versiones antiguas de Delphi (XE5 y anteriores) dejaban de compilar la biblioteca de evaluación con
E2003 Undeclared identifier: 'GetTickCount64'enFPdfPades.pas, porque la unidad Windows incluida con esos compiladores no exporta el símbolo - Esos mismos compiladores también fallaban en
GetUserDefaultLocaleNameenPDFium.pasy en la asignación deTBytesaarray of ByteenGetXfaFormPackets, de modo que la retrollamada de configuración regional XFA y la instantánea de paquetes ahora también compilan en esos compiladores
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.57.8 de manera consistente
Version 2.57.7
Cambiado (Changed)
- Cada reescritura del lado del guardado ahora trunca el flujo de destino antes de escribir en lugar de solo rebobinarlo, de modo que un búfer suministrado por el llamador que ya contuviera un documento más largo no pueda conservar una cola obsoleta más allá del nuevo
%%EOF - Las pruebas de Delphi, Lazarus y C++Builder ahora cubren el guardado en un flujo prerellenado
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.57.7 de manera consistente
Version 2.57.6
Corregido (Fixed)
- El escaneo de objetos que precede al cifrado aceptaba series de dígitos de cualquier longitud, de modo que un número largo en cualquier parte del archivo podía desbordarse a un número de objeto negativo o falso y añadir una entrada fantasma a la tabla de referencias cruzadas reconstruida
- Los números de objeto por encima del límite del Anexo C de ISO 32000-1 y las generaciones superiores a 65535 ahora se rechazan como cabeceras de objeto en lugar de truncarse
Añadido (Added)
- Las pruebas de Delphi, Lazarus y C++Builder ahora afirman el recuento exacto de entradas en uso de la tabla reconstruida
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.57.6 de manera consistente
Version 2.57.5
Corregido (Fixed)
- Cifrar con
EncryptMetadata = Falseescribía/EncryptMetadata falseen el diccionario Encrypt pero seguía cifrando el flujo de metadatos del documento, de modo que un lector que siguiera esa declaración encontraba XMP ilegible - Un flujo
/Type /Metadataahora se copia sin cambios cuando el cifrado de metadatos está desactivado, mientras que cualquier otro flujo se sigue cifrando
Añadido (Added)
AnsiNameTokenMatchesKeyahora forma parte de la interfazFPdfPdfCommonpara comparaciones de nombres conscientes de delimitadores- Las pruebas de Delphi, Lazarus y C++Builder ahora cubren ambos modos de cifrado de metadatos
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.57.5 de manera consistente
Version 2.57.4
Corregido (Fixed)
- La tabla de referencias cruzadas reconstruida durante el cifrado omitía la cabecera de lista libre del objeto 0 obligatoria según ISO 32000-1 §7.5.4, de modo que su primera subsección comenzaba un objeto tarde
- Cada entrada reconstruida declaraba generación 0; los objetos escritos con una generación mayor ahora la conservan, de modo que la tabla coincide con las cabeceras de objeto a las que apunta
Añadido (Added)
- Las pruebas de Delphi, Lazarus y C++Builder ahora cubren la entrada de cabecera de lista libre y la preservación de generación en la tabla reconstruida
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.57.4 de manera consistente
Version 2.57.3
Corregido (Fixed)
- La salida cifrada omitía la palabra clave
streamde cada objeto de flujo, de modo que el archivo guardado ya no era sintaxis PDF válida y los lectores estrictos notificaban el contenido de la página ni como flujo ni como array de flujos - La reescritura de
/Lengthcoincidía con/Lengthcomo simple subcadena, de modo que un diccionario de flujo con/Length1(cualquier fuente incrustada) veía su nombre de clave corrompido mientras la longitud real quedaba obsoleta - Un flujo que declaraba su longitud indirectamente como
/Length N 0 Rveía su número de objeto sobrescrito con la nueva longitud; la entrada ahora se sustituye por la longitud cifrada directa - Un diccionario de flujo sin ningún
/Lengthahora recibe uno en lugar de dejar al lector sin longitud
Añadido (Added)
AnsiFindDictKeyTokenahora forma parte de la interfazFPdfPdfCommonpara búsquedas de claves de diccionario de nivel superior conscientes de delimitadores- Las pruebas de Delphi, Lazarus y C++Builder ahora cubren la preservación de
/Length1, la sustitución de longitud indirecta y la concordancia del tamaño del cuerpo del flujo
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.57.3 de manera consistente
Version 2.57.2
Corregido (Fixed)
SaveAsEncryptedySaveAsEncryptedToStreamconRevision = erR6producían documentos que rechazaban su propia contraseña correcta en aproximadamente uno de cada cuatro archivos, porque el contador de rondas del algoritmo 2.B de ISO 32000-2 §7.6.4.3 comenzaba una ronda por debajo y la ronda extra cambiaba los valores/U,/O,/UEy/OE- Los documentos cifrados con R6 ahora se reabren con la contraseña de usuario o propietario en cualquier lector conforme, y siguen rechazando una contraseña incorrecta
Añadido (Added)
- Las suites de pruebas de Lazarus y C++Builder obtuvieron cobertura de cifrado que antes era exclusiva de Delphi: longitudes de clave R6, campos del diccionario Encrypt, un ciclo repetido de cifrado y reapertura, y el rechazo de contraseñas incorrectas
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.57.2 de manera consistente
Version 2.57.1
Cambiado (Changed)
- Escribir en un campo de formulario, mover el caret y alternar casillas de verificación ahora repinta solo el área que PDFium notifica como dañada en lugar del visor completo
- Las cajas de daño se normalizan para el eje Y de página ascendente, se ensanchan un píxel para que los bordes de widget con suavizado queden limpios y se recortan al área cliente visible
- Una caja de daño completamente desplazada fuera de la ventana gráfica ya no programa un repintado, mientras que una vista inactiva o una página sin mapear sigue recurriendo a un repintado completo
- Las pruebas de Delphi, Lazarus y C++Builder ahora cubren la invalidación acotada de formularios, las cajas de página invertidas, las cajas fuera de pantalla y la seguridad de vistas inactivas
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.57.1 de manera consistente
Version 2.57.0
Añadido (Added)
TPdfThumbnailView.Orientationsoporta disposiciones de miniaturas verticales y horizontales preservando el valor vertical predeterminado existenteFirstVisiblePageIndex,LastVisiblePageIndexyEnsureCurrentPageVisibleexponen y controlan la ventana de miniaturas con índices de página basados en uno
Cambiado (Changed)
- Cambiar
CurrentPageIndexahora desplaza la miniatura seleccionada a la vista en cualquier orientación - Las pruebas Delphi, Lazarus y C++Builder ahora cubren los valores predeterminados de orientación, la conmutación, los rangos visibles y la visibilidad de la página seleccionada
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.57.0 de manera consistente
Version 2.56.2
Cambiado (Changed)
HighlightSearchText,AddSearchTextHighlightyClearHighlightahora invalidan solo los rectángulos de dispositivo para los rangos de búsqueda que se añadieron o eliminaron en lugar de repintar toda la vista- Reemplazar resaltados con las mismas coincidencias o añadir coincidencias duplicadas ya no programa un repintado innecesario
- Las pruebas Delphi, Lazarus y C++Builder ahora cubren la invalidación acotada, las actualizaciones idempotentes, el borrado y la seguridad de vistas inactivas
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.56.2 de manera consistente
Version 2.56.1
Cambiado (Changed)
TPdfThumbnailViewahora reutiliza los mapas de bits renderizados para las páginas que permanecen visibles entre repintados y posiciones de desplazamiento adyacentes- La caché retiene solo el rango de páginas visibles actual y libera entradas precisamente cuando las páginas abandonan ese rango, el documento asignado cambia o las dimensiones de las miniaturas cambian
- Las pruebas Delphi, Lazarus y C++Builder ahora cubren la reutilización de caché, la poda de la ventana, la invalidación por tamaño, el reemplazo de documento y la destrucción del componente
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.56.1 de manera consistente
Version 2.56.0
Añadido (Added)
TPdfView.CutSelectedFormTextToClipboardyTPdfView.PasteFormTextFromClipboardproporcionan edición Unicode del portapapeles para el widget de formulario editable con foco
Cambiado (Changed)
- Los editores de formulario con foco ahora manejan los atajos de teclado estándar copiar, cortar, pegar y seleccionar todo antes de reenviar la entrada de texto a PDFium
- Cortar y pegar rechazan campos de solo lectura y sesiones sin permiso de relleno o modificación de formulario, mientras que cortar copia correctamente antes de eliminar el texto seleccionado
- Las pruebas Delphi, Lazarus y C++Builder ahora cubren el comportamiento sin foco, el recorrido de ida y vuelta de atajos y el rechazo de solo lectura
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.56.0 de manera consistente
Version 2.55.0
Añadido (Added)
TPdfView.AddSearchTextHighlightañade coincidencias únicas para otro término de búsqueda a la superposición de página actual, permitiendo que varias consultas permanezcan resaltadas juntas
Cambiado (Changed)
HighlightSearchTextsigue siendo el punto de entrada de reemplazo y ahora comparte el escáner aditivo, mientras que los rangos de caracteres duplicados se ignoran yClearHighlightelimina el conjunto acumulado completo- Las pruebas Delphi, Lazarus y C++Builder ahora cubren la acumulación de consultas distintas y la supresión de rangos duplicados
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.55.0 de manera consistente
Version 2.54.0
Añadido (Added)
TPdfahora expone instantáneas completas de objetos de página, actualizaciones de estilo por lotes, transformaciones afines de objetos, segmentos de ruta, rutas de recorte e hijos Form XObject- La inspección de caracteres ahora incluye colores de relleno y trazo, nombre e indicadores de fuente, límites de glifo sueltos, matrices efectivas, handles de objeto de texto y conversión de índice de carácter a texto
- Las anotaciones ahora hacen un recorrido de ida y vuelta de la geometría de borde y los flujos de apariencia normal, rollover y down
- Nuevos accesores de miniaturas en bruto y decodificadas, transformaciones de contenido de página y anotación, y
RenderPageWithMatrixproporcionan rutas avanzadas directas de renderizado y edición
Cambiado (Changed)
- Los cambios de estilo de objeto de página pueden confirmarse como un solo lote para que PDFium regenere el contenido de la página una sola vez
- El renderizado matricial usa la ruta de mapa de bits sin copia existente cuando la disposición del mapa de bits de destino es compatible
Version 2.53.1
Corregido (Fixed)
- El título del menú Copiar chino integrado ahora usa puntos de código Unicode independientes de la codificación y se muestra correctamente en builds Lazarus
- Las cadenas de herramientas de Delphi más antiguas pueden compilar
FPdfAsynccuando su unidadWinapi.Windowsomite la declaraciónGetTickCount64
Version 2.53.0
Añadido (Added)
- Nuevo fixture de pruebas
Tests.ApiCoverageque cubre las API TPdf públicas que anteriormente no tenían cobertura de pruebas de extremo a extremo:GetPageBox/SetPageBox(lectura/escritura MediaBox/CropBox, errores de caja faltante y recorrido de ida y vuelta de guardado),FlattenPage/FlattenAllPages(valor de retorno y preservación del recuento de páginas),GenerateFormAppearances(sin acción sobre documentos sin formulario),SaveAsEncrypted/SaveAsEncryptedToStream(AES-256 con recorrido de ida y vuelta de contraseña — verifica que el archivo cifrado se niega a abrir sin la contraseña y se abre con ella), validación de límites deDeletePage(página 0 y fuera de rango lanzanEPdfError) y los centinelas de anotaciónHasContents/HasAuthorintroducidos en v2.38.0 (verificando queDefault(TPdfAnnotation)los deja enFalse)
Version 2.52.0
Añadido (Added)
TPdfView.CopySelectedFormTextToClipboardcopia la selección de texto dentro del widget AcroForm con foco al portapapeles de Windows comoCF_UNICODETEXT
Cambiado (Changed)
- Las operaciones de copia de texto de página y formulario con foco ahora comparten el mismo escritor defensivo de portapapeles Unicode y dejan el portapapeles sin cambios cuando su selección está vacía
- Las pruebas Delphi, Lazarus y C++Builder ahora cubren llamadas de copia de formulario inactivas o sin foco y un recorrido de ida y vuelta de selección de formulario con foco a través del portapapeles de Windows
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.52.0 de manera consistente
Version 2.51.0
Añadido (Added)
TPdfView.SelectLineAtselecciona la línea de texto visual que contiene una página basada en uno y un índice de carácter basado en cero sin requerir entrada del ratón
Cambiado (Changed)
- La selección de línea programática, la selección de triple clic y
Shift+HomeoShift+Endahora comparten un modelo de límites de línea de caja de caracteres - Las pruebas Delphi, Lazarus y C++Builder ahora cubren la selección de línea estable y los índices de página o carácter no válidos
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.51.0 de manera consistente
Version 2.50.0
Añadido (Added)
TPdf.LoadDocumentahora acepta una ventanaIndexbasada en cero yCounten un búferTBytes, permitiendo que los PDF incrustados se carguen sin asignar una porción de matriz de bytes temporal
Cambiado (Changed)
- La carga de rango de bytes rechaza ventanas negativas o fuera de los límites antes de cambiar el estado del documento y preserva las opciones de duración de búfer almacenado en búfer y prestado existentes
- Las pruebas Delphi, Lazarus y C++Builder ahora cubren las ventanas de PDF incrustado y los argumentos de rango de bytes no válidos
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.50.0 de manera consistente
Version 2.49.1
Añadido (Added)
TPdfView.FitModeahora soportapfmFitHeightpara ajustar la página actual a la altura visible de la ventana gráfica permitiendo el desplazamiento horizontal cuando sea necesario
Corregido (Fixed)
- Los modos de ajuste ahora convergen después de que un cambio de barra de desplazamiento modifique el área cliente, manteniendo los resultados fit-page, fit-width y fit-height consistentes entre VCL y LCL
- Las pruebas del visor Delphi, Lazarus y C++Builder ahora cubren la selección de
pfmFitHeighty los recorridos de ida y vuelta de enumeración TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.49.1 de manera consistente
Version 2.49.0
Añadido (Added)
- La superficie de enlace público de PDFium ahora cubre las 470 funciones exportadas en los encabezados revisados, incluyendo el acceso a descripciones de adjuntos mediante
FPDFAttachment_SetDescriptionyFPDFAttachment_GetDescription TPdfahora expone descripciones de adjuntos, validez de referencias cruzadas, desplazamientos de fin de trailer, revisión del security-handler, carga en memoria de 64 bits, rangos de bytes de firma, rangos de texto de enlaces web y snapshots ampliados de datos de imagen, filtro, metadatos y perfil ICC- Los asistentes de formulario ahora soportan enfoque nativo de campo, consultas y actualizaciones de opciones de selección enfocadas, reenvío de la rueda del ratón, trazos de tinta escribibles y superposiciones de formulario después del renderizado progresivo
Cambiado (Changed)
FormFieldCount, los índices de campos de formulario y el orden de tabulación ahora describen solo anotaciones de widget en lugar de incluir anotaciones de página no relacionadas- Las páginas
TPdfsin interfaz ahora entran y salen del ciclo de vida de la página de llenado de formulario para que el enfoque nativo y las APIs de campos enfocados funcionen sin unTPdfView - Las exportaciones de descripción de adjuntos están limitadas por capacidad para que las aplicaciones que usan una compilación más antigua de PDFium todavía puedan cargar la librería y detectar la función no disponible
Corregido (Fixed)
- El renderizado progresivo de página ahora pinta los controles de formulario cuando el llenado de formulario está habilitado
- Las pruebas de Delphi, Lazarus y C++Builder ahora cubren los nuevos diagnósticos de documento, descripciones de adjuntos, rutas de tinta, comportamiento de formulario, rangos de bytes de firma, rangos de enlaces web y metadatos de imagen
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.49.0 de manera consistente
Version 2.48.0
Añadido (Added)
TPdfMatrixahora expone fábricas, clonación y asignación, diagnósticos de estado finito e invertibilidad, comparación basada en tolerancia, acceso a traslación, reporte de determinante y descomposición afín- Composición prepend, rotación consciente del pivote, escalado, sesgo y volteos, más mapeo de rectángulos stretch, contain y cover soportan flujos de trabajo de espacio local y diseños ajustados sin aritmética manual de coeficientes
- Acceso inverso no mutante, mapeo inverso de puntos, transformaciones de vectores y cuadriláteros, lotes dinámicos de puntos y rectángulos, variantes in-place y límites transformados en un pase expanden la superficie geométrica reutilizable
Cambiado (Changed)
- Traslación, escalado y volteos de ejes ahora actualizan solo los coeficientes afectados en lugar de enrutar a través de multiplicación afín general
- La transformación de rectángulos normaliza su entrada una vez, usa una ruta exacta especializada alineada por ejes cuando es posible y calcula límites rotados generales sin registros de puntos temporales
- Las transformaciones de lote de puntos y rectángulos asignan un arreglo de resultados o reutilizan el almacenamiento del llamador, mientras que los límites de puntos transformados se acumulan en un pase sin un arreglo intermedio
Corregido (Fixed)
- El mapeo de rectángulos rechaza resultados de tamaño cero, no finitos y con desbordamiento de
Singleantes de publicar una matriz inutilizable - Las pruebas de Delphi, Lazarus y C++Builder ahora verifican el orden de composición, invariantes de pivote, recorridos de ida y vuelta inversos, rectángulos ajustados, descomposición y comportamiento de geometría en masa
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.48.0 de manera consistente
Version 2.47.0
Añadido (Added)
FPdfAsyncahora provee razones y mensajes de cancelación estructurados, registros de devolución de llamada removibles, fuentes basadas en tiempo de espera, espera de cancelación y operaciones try-cancel atómicas mediante interfaces extendidas que preservan la API originalTPdfFuture<T>.RunExagrega despacho de respuesta y prioridad de trabajador configurables mientras que las envolturas de resultados exponen IDs de operación, validez de valor, nombres de clase de excepción, sincronización de finalización y ayudantes de finalización reutilizablesTPdfAsyncExecutoragrega un grupo fijo reutilizable de trabajadores con cuatro carriles de prioridad FIFO, contrapresión de cola acotada opcional, identificadores de tarea cancelables, espera consciente del tiempo de espera, snapshots de tarea, estadísticas agregadas y apagado elegante
Cambiado (Changed)
- Los trabajos asincrónicos repetidos pueden reutilizar hilos de trabajador y operaciones de cola O(1) en lugar de crear un hilo para cada tarea, mientras que la finalización sincronizada permanece disponible para hosts de UI
- Las fallas de executor y future preservan diagnósticos de clase y mensaje de excepción, la cancelación mantiene su razón original y las excepciones de devolución de llamada permanecen aisladas del ciclo de vida del trabajador y del apagado
- Las pruebas de Delphi, Lazarus y C++Builder ahora cubren la superficie extendida de cancelación, metadatos future, control de tarea, contrapresión, ordenamiento de prioridad, estadísticas, falla y apagado
Corregido (Fixed)
- Los dueños de cancelación concurrentes ahora reciben un resultado determinístico del primer escritor en lugar de depender de una secuencia separada de observación y cancelación
- La espera de inactividad del hilo principal procesa respuestas de tarea sincronizadas, impidiendo que un trabajador completado deje al executor permanentemente no inactivo durante un apagado coordinado
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.47.0 de manera consistente
Version 2.46.0
Añadido (Added)
FPdfAsn1ahora expone clases de identificador, codificación y decodificación de número de etiqueta alta de 64 bits, registros TLV analizados, ventanas de lector hijo de copia cero, decodificadores primitivos tipados y rebanadas de contenido o valores codificados- Los escritores DER ahora soportan el rango completo INTEGER de 64 bits sin signo, contenido INTEGER arbitrario validado, ENUMERATED, selección automática de UTCTime o GeneralizedTime, etiquetas application y private, SEQUENCE de múltiples valores y salida SET OF canónicamente ordenada
ValidateDerdevuelve errores de validación conscientes del desplazamiento mientras impone límites configurables de anidamiento, conteo de nodos, longitud de contenido, conteo de errores, raíz y ordenamiento SET opcional
Cambiado (Changed)
- La concatenación DER y la composición de múltiples valores usan una asignación de salida, los búferes del escritor exponen operaciones reserve, count, capacity y transferencia de propiedad, y el ordenamiento SET OF ahora usa ordenamiento por mezcla
O(n log n) - Los valores BOOLEAN, INTEGER, BIT STRING, OBJECT IDENTIFIER, NULL, UTF8String, PrintableString, IA5String, UTCTime y GeneralizedTime reciben verificaciones de forma canónica durante la codificación, decodificación tipada o validación
- El paquete de tiempo de ejecución de Lazarus ahora exporta
FPdfAsn1y las suites de prueba de Delphi, Lazarus y C++Builder ejercitan la misma superficie DER pública
Corregido (Fixed)
- Los números de etiqueta específicos de contexto mayores que 30 ya no se truncan en los cinco bits bajos del identificador
- Los identificadores de etiqueta alta malformados, las longitudes definidas no mínimas, el UTF-8 inválido, el relleno BIT STRING distinto de cero, los campos de tiempo inválidos, las raíces finales y las violaciones de límite de recursos se rechazan determinísticamente
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.46.0 de manera consistente
Version 2.45.0
Añadido (Added)
FPdfPreflightReportahora asigna severidad Info, Warning o Error a cada problema y expone APIs de severidad, status, categoría, código de problema, lookup, search, flattening y filtering a nivel de estándar y de reporte- Los reportes preflight ahora exportan SARIF 2.1.0, JUnit XML, NDJSON y XML nativo mediante métodos
To*ySave*ToFilecorrespondientes para pipelines de CI, automatización y streaming - Huellas de reporte SHA-256 estables identifican resultados de validación equivalentes independientemente de las rutas de origen y las marcas de tiempo de generación
Cambiado (Changed)
- Los reportes JSON, CSV, text, Markdown y HTML ahora incluyen severidad y resúmenes de status ampliados; HTML agrega subtítulos de tabla accesibles y un resumen de status
- La construcción de colecciones de problema y estándar usa crecimiento geométrico de capacidad, los resultados de consulta están pre-dimensionados, el escape JSON escribe en un búfer de salida acotado y todos los archivos de reporte usan un escritor UTF-8 directo
- Los resúmenes de categorías de problema usan ordenamiento determinístico, las marcas de tiempo incluyen milisegundos, JSON lleva
formatVersion: 2y las celdas CSV neutralizan fórmulas de hoja de cálculo
Corregido (Fixed)
- La exportación JSON ahora preserva pares Unicode suplementarios válidos y reemplaza unidades de código sustituto UTF-16 aisladas en lugar de emitir datos escalares malformados
- La exportación HTML ahora escapa apóstrofes y las vistas de reporte filtradas poseen arreglos de problema independientes en lugar de compartir almacenamiento de resultados mutable
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.45.0 de manera consistente
Version 2.44.0
Añadido (Added)
- Los marcadores y los destinos exponen el estado de apertura, los recuentos de descendientes, los objetivos de acción, los modos de vista de destino y hasta cuatro parámetros de vista
Metadata,GrantedPermissions,UserGrantedPermissions,HasPermissionyUserHasPermissionproporcionan instantáneas tipadas de inspección de documentos y consultas de permisosExtractThumbnail(PageNumber)renderiza una página solicitada sin cambiar la página activa, y los resultados de marca de tiempo RFC 3161 exponen detalles de política, tiempo de generación y nonce
Cambiado (Changed)
- Las rutas de marcadores, JavaScript, metadatos, destinos y miniaturas utilizan búferes de dos pasadas validados, crecimiento geométrico de colecciones y recorrido seguro frente a ciclos
- El posprocesamiento de guardado resuelve el catálogo activo, el árbol de páginas y la acción de apertura a través de la revisión actual de referencias cruzadas (xref), almacena en caché los flujos de objetos decodificados y analiza los diccionarios PDF con límites léxicos
- El análisis compartido de PDF ahora aplica encabezados de objeto exactos, generaciones, claves de diccionario, longitudes de flujo, geometría del predictor, rangos de enteros y límites de comentarios, cadenas literales y cadenas hexadecimales
- La validación de respuesta RFC 3161 ahora vincula tanto el nonce como el SHA-256
messageImprint, requiere un firmante estructuralmente válido y aplica reglas estrictas de longitud DER, OID, INTEGER y GeneralizedTime
Corregido (Fixed)
- Los documentos incrementales ya no seleccionan catálogos duplicados inactivos ni sufijos de referencia malformados al añadir una acción de apertura predeterminada
- Los tokens de marca de tiempo con longitudes DER de forma larga conservan el token codificado completo, mientras que el orden malformado de campos opcionales CMS y los conjuntos de firmantes vacíos se rechazan
- Las compilaciones limpias de Delphi ahora escriben los campos de semilla de nonce de PAdES mediante copias de bytes seguras respecto a la alineación y pasan los bytes de respuesta XFA con el tipo de puntero nativo exacto
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.44.0 de manera consistente
Version 2.43.0
Añadido (Added)
- Los registros de anotaciones y campos XFDF ahora exponen banderas de presencia que distinguen un valor XML omitido de un valor explícitamente vacío
Cambiado (Changed)
- La importación XFDF acepta elementos y atributos con prefijo de espacio de nombres, contenido mixto de texto y CDATA, referencias de entidades y valores con espacios en blanco significativos, al tiempo que rechaza referencias a escalares Unicode no válidas
- La importación y exportación XFDF utilizan coincidencia de campos indexados y búferes geométricos acotados, lo que mejora el rendimiento y el comportamiento de asignación máxima para formularios profundamente anidados, colecciones de anotaciones grandes, listas de tinta, vértices y cuadriláteros de marcado
- La validación PDF/A y PDF/UA utiliza un crecimiento acotado para colecciones grandes de páginas, flujos, nombres de estructura y colecciones RoleMap; la resolución de RoleMap de PDF/UA ahora sigue matrices directas y objetos indirectos de matriz o nombre de generación exacta
Corregido (Fixed)
- Los ciclos completos de XFDF ahora conservan rutas de campos profundamente anidadas, valores de campos explícitamente vacíos, contenidos de anotaciones explícitamente vacíos y la distinción entre contenidos ausentes y vacíos
- Las cargas de búfer de memoria no válidas y las asignaciones de páginas fuera de rango se rechazan sin dejar un estado parcial del documento o de la página, y una recarga de página nativa fallida conserva la página activa anteriormente
- Los identificadores de contenido marcado grandes y los búferes de metadatos de firma están acotados y se validan antes de la asignación o del acceso nativo
Version 2.42.0
Añadido (Added)
TPdfMatrixahora proporcionaInvert,TryInvert,TransformPointyTransformRectpara el mapeo de coordenadas, pruebas de impacto, límites normalizados y manejo explícito de matrices singularesTPdf.WrapTextha obtenido una sobrecarga deBreakLongWordsque divide texto CJK y de otro tipo sin espacios, al tiempo que mantiene juntos los pares de sustitutos UTF-16 válidosTPdfAnnotation.AttachmentPointSetsexpone cada cuadrilátero en anotaciones de marcado multilínea, mientras que el campoAttachmentPointsexistente sigue siendo un alias para el primer conjunto
Cambiado (Changed)
- La extracción de texto, la construcción de contenido legible, la búsqueda de palabras y el mapeo de desplazamientos de texto hablado ahora utilizan asignación acotada y rutas de búsqueda binarias, reduciendo las asignaciones repetidas y los análisis lineales en páginas grandes
- La serialización ASN.1 y la generación de PDF cifrados ahora utilizan búferes de salida geométricos; el ordenamiento de objetos cifrados utiliza clasificación
O(n log n)y las filas de referencias cruzadas (xref) se escriben directamente en el búfer final WrapTextconserva los límites de línea CR, LF y CRLF y reutiliza un objeto de medición nativo para toda la operación- La importación y exportación XFDF conservan cada cuadrilátero de marcado; la importación también aplica colores RGB/interiores y analiza coordenadas decimales independientemente de la configuración regional del proceso
Corregido (Fixed)
- Los llamadores heredados pueden volver a actualizar el contenido y el autor de la anotación asignando cadenas no vacías sin establecer los centinelas
HasContentsyHasAuthormás recientes - Las cadenas de anotaciones explícitamente vacías ahora utilizan un búfer nativo válido terminado en cero, por lo que borrar
/Contents,/Ty otras claves de texto opcionales ya no pasa un puntero nil a PDFium
Version 2.41.0
Cambiado (Changed)
- Los informes de preflight
SaveJsonToFile,SaveMarkdownToFileySaveTextToFileahora escriben en UTF-8 en Delphi, coincidiendo con el métodoSaveHtmlToFileexistente, en lugar de usar la página de códigos ANSI del sistema; esto evita que los caracteres no ASCII en rutas de archivos, recomendaciones y notas de alcance se corrompan en Delphi al guardarse con estos métodos SaveCsvToFileahora escribe en UTF-8 con un prefijo BOM para que Excel para Windows detecte automáticamente la codificación; sin el BOM, Excel trata un archivo CSV en UTF-8 como página de códigos 1252 y corrompe los caracteres no ASCII
Corregido (Fixed)
- La demo
ExtractImagespresentaba fugas de los objetosTBitmapalmacenados en caché enFExtractedImagescuando se cerraba el formulario sin borrarlos explícitamente primero; ahora el formulario sobrescribeDestroypara llamar aClearExtractedImages, liberando cada mapa de bits en caché
Version 2.40.0
Cambiado (Changed)
TPdf.RenderPage(HDC, ...)ahora enmascara las excepciones FPU/SSE alrededor de la llamada aFPDF_RenderPage, coincidiendo conTPdfView.RenderPage(HDC)(corregido en v2.25.0) y con cada punto de entrada de renderizado que devuelve un mapa de bits; la sobrecarga directa a DC a nivel deTPdfdejaba anteriormente las excepciones FPU sin enmascarar en compiladores anteriores a D12
Corregido (Fixed)
ColorToARGBahora devuelve un píxel completamente transparente (alfa 0) paraclNoneyclDefaulten lugar de tratar el valor centinela como un color RGB literal; el comportamiento anterior producía un relleno oscuro y casi opaco cuando un llamador pasabaclNoneesperando "ningún color"
Version 2.39.1
Corregido (Fixed)
- Los guardados explícitos en PDF 1.3 ahora eliminan las entradas
/SMask /None,/AIS falsey/TK trueque solo repiten el estado gráfico inicial, mientras continúan rechazando estados de transparencia que no sean los predeterminados
Version 2.39.0
Cambiado (Changed)
CreatePDFeImageToPDFahora utilizan destinos de guardado confirmados y notifican éxito solo cuandoSaveAsse completa correctamenteBatchExport,PDFtoJpgySplitPDFahora asignan directorios de salida únicos para que las ejecuciones repetidas y las entradas con el mismo nombre conserven los resultados anterioresSplitViewahora envuelve la búsqueda una vez sin dejar un estado de página oculto tras la cancelación o la falta de coincidencias, y aborta los trabajos de impresión incompletos en lugar de enviar una salida parcial
Corregido (Fixed)
MergePDFahora rechaza tokens de rango de páginas malformados y rutas de salida que sobrescriban el origen, cuenta las páginas realmente importadas y se niega a guardar un resultado vacío- Las demos
Attachmentde Delphi y C++Builder ahora confirman los guardados en la misma ruta mediante un reemplazo de archivos seguro contra reversiones, de modo que un cambio de nombre fallido no pueda eliminar el PDF original
Version 2.38.0
Cambiado (Changed)
SetAnnotationDataahora protege las escrituras de/Contentsy/Authordetrás de los centinelasHasContents/HasAuthorenTPdfAnnotation, coincidiendo con el patrón existenteHasName/HasSubject/HasIcon; anteriormente, estos dos campos se escribían incondicionalmente, por lo que la asignación de un registroDefault(TPdfAnnotation)para actualizar solo el color o las banderas sobrescribía silenciosamente el contenido y autor existentes de la anotación con cadenas vacías;GetPageAnnotationahora establece los centinelas para que un ciclo de lectura-modificación-escritura conserve los valores originales
Corregido (Fixed)
GenerateFormAppearancesahora lee el valor del botón de opción/casilla de verificación a través deFPDFAnnot_GetFormFieldValue(que recorre el diccionario de campos primarios según ISO 32000-1 §12.7.5) en lugar deFPDFAnnot_GetStringValue(Annot, 'V', ...)(que lee el diccionario de widgets); el widget generalmente no contiene/V, por lo que/ASnunca se sincronizaba con el estado marcado y una casilla de verificación o botón de opción aplanado se renderizaba como desmarcado
Version 2.37.0
Cambiado (Changed)
ParseTsaUrlahora limita el puerto a1..65535después del análisis; de lo contrario, un valor de puerto excesivamente grande se desbordaría mediante el truncamiento deDWORDy podría terminar en un puerto válido- XFDF
ParseFieldahora acepta un parámetro de profundidad (por defecto 0, limitado a 64) y devuelve un campo vacío en el límite, de modo que una cadena<field>maliciosamente anidada con una profundidad de 100 000 ya no puede desbordar la pila
Corregido (Fixed)
- La solicitud HTTP de TSA ahora se protege contra un cuerpo de solicitud vacío antes de pasar
@ReqDer[0]aWinHttpSendRequest; una desreferencia de matriz dinámica de longitud cero accedería a un puntero no asignado;BuildTimeStampReqsiempre devuelve una SEQUENCE no vacía, pero el punto de llamada ahora defiende el contrato
Notas (Notes)
- Se ha corregido el comentario de cabecera de
FPdfTsaWinsobre la comprobación de revocación HTTPS: WinHttp valida la cadena de certificados del servidor por defecto pero no realiza la comprobación de revocación CRL/OCSP a menos que se habilite explícitamente medianteWinHttpSetOption; la redacción anterior afirmaba que la comprobación de revocación "era gratuita", lo cual era engañoso
Version 2.36.0
Cambiado (Changed)
- Las solicitudes HTTP de TSA ahora envían una cabecera
Content-Lengthexplícita además de las cabecerasContent-TypeyAccept; WinHttp la sintetiza a partir de la longitud total, pero algunos proxies RFC 3161 requieren una cabecera explícita y rechazan la solicitud con411 Length Requiredsin ella - La exportación XFDF ahora descarta los caracteres de control C0 (distintos de TAB/LF/CR, que ya están escapados) en lugar de emitir una secuencia barra invertida-hexadecimal no válida; el escape anterior
\-01Fno es XML válido (la barra invertida no tiene un significado especial en XML), por lo que cualquier lector conforme habría rechazado el documento como malformado InjectAssociatedFilesahora escribe/Subtypeen el diccionario de flujo EmbeddedFile cuando el llamador proporcionaTAssociateFile.MIMEType; el campo estaba declarado y documentado, pero el inyector anteriormente tenía codificado de forma fija/Type /EmbeddedFilee ignoraba dicho valor (ISO 32000-2 §7.11.4 permite/Subtypeen el flujo)
Corregido (Fixed)
- La importación XFDF omitía el primer byte de contenido después de una BOM UTF-8 y el primer byte cuando no había BOM:
BytesToAnsi(Bytes, 4, ...)(BOM) yBytesToAnsi(Bytes, 1, ...)(sin BOM) utilizaban desplazamientos de inicio con un desfase de uno porqueBytesToAnsitoma un índice de matriz basado en 0; las llamadas ahora usan3y0 ExtractSignatureValuetenía dos errores de sangría porifcolgantes en los queR.Position:= CNse ejecutaba incondicionalmente para las ramas opcionalescertificates [0]ysignedAttrs [0]; las ramas ahora están envueltas enbegin/endpara que la posición avance solo cuando el TLV opcional se haya leído realmente (el mismo tipo de error corregido enAddSignatureTimestampToCmsen v2.22.0)
Version 2.35.0
Cambiado (Changed)
TFPDFAvail_IsDocAvail,TFPDFAvail_IsPageAvailyTFPDFAvail_IsFormAvailahora tomanhints: PFX_DOWNLOADHINTSen lugar devar hints: FX_DOWNLOADHINTS, por lo que el modo de solo consulta denullptrdocumentado (comprobar la disponibilidad actual sin solicitar más datos) es accesible desde Delphi; la cabecera de PDFium permite explícitamente quehintssea nulo; la vinculación anterior convarhacía que eso fuera imposibleTFPDF_SetSystemFontInfoahora tomapFontInfo: PFPDF_SYSFONTINFOen lugar devar pFontInfo: FPDF_SYSFONTINFO, de modo que los llamadores puedan pasarnilpara indicarle a PDFium que deje de usar una interfaz de fuentes del sistema previamente registrada (la ruta de desactivación documentada)TPdfThumbnailView.Paintahora calculaVisibleRowscon la misma fórmula queUpdateScrollBarRange(ClientHeight div RowHeight), de modo que el número de filas dibujadas coincida con el tamaño de página de la barra de desplazamiento; la fórmula anterior de solo dibujo ((ClientHeight - FMarginY) div RowHeight + 1) podía diferir en una fila en alturas límite, desperdiciando un renderizado en una fila fuera de página u omitiendo la última fila visible
Version 2.34.0
Añadido (Added)
TPdf.SaveAsEncrypted/SaveAsEncryptedToStream: una API de alto nivel que guarda el documento y luego lo cifra con PDF 2.0 AES-256-CBC (V=5/R=5/R=6); acepta unTPdfEncryptOptionscon contraseña de usuario/propietario, permisos y revisión; delega enEncryptDocumentBytes- Cifrado de cadenas literales StrF:
EncryptDocumentBytesahora cifra las cadenas literales(...)en objetos que no son flujos (diccionario Info, etc.) en cadenas hexadecimales AES-256-CBC, coincidiendo con el formato de cifrado de flujo (IV de 16 bytes + texto cifrado PKCS7); las cadenas hexadecimales<...>se dejan sin cambios
Version 2.33.0
Añadido (Added)
- Inyector de cifrado AES-256-CBC de documento completo en
FPdfEncrypt.pas;EncryptDocumentBytestoma un PDF en texto plano y una contraseña, cifra cada objeto de flujo indirecto (IV de 16 bytes + AES-256-CBC PKCS7 bajo la clave de archivo), corrige/Length, añade el objeto de diccionario/Encrypty reconstruye una tabla de referencias cruzadas clásica completa + trailer con/Encrypte/ID; completa la pila de cifrado de PDF 2.0 (bloque AES + GCM + SHA-512/384 + derivación de clave R6 + diccionario + barrido de documentos) - Ayudante
EncryptStreamPayload: el formato de flujo AES-256 de PDF 2.0 (IV antepuesto al texto cifrado AES-CBC-PKCS7), reutilizable por llamadores que gestionan su propio diseño de objetos
Version 2.32.0
Añadido (Added)
- Hash SHA-512 / SHA-384 (FIPS 180-4) en la nueva unidad
FPdfSha512.pas, implementado en Pascal puro; se necesita para la iteración de hash de contraseña R6 de PDF 2.0, que usa un valor de 128 bits módulo 3 para elegir SHA-256/384/512 en cada ronda; comprobado con respuestas conocidas de FIPS-180-4 B.1 - Derivación de claves de cifrado PDF 2.0 y construcción del diccionario Encrypt en la nueva unidad
FPdfEncrypt.pas; implementa el algoritmo 2.B de ISO 32000-2 §7.6.4.3 (hash R6: AES-128-CBC + selección iterativa de SHA-256/384/512), deriva la clave de fichero de 32 bytes y las entradas/O,/U,/OE,/UE,/Perms, y construye el diccionario Encrypt V=5/R=5/R=6 con/CFM /AESV3usando búferes de estilo TBytes
Version 2.31.0
Añadido (Added)
- Primitivas de cifrado de bloques AES (FIPS 197) en la nueva unidad
FPdfAes.pas; AES-128 y AES-256 en Pascal puro con helpers CBC y un backend CSPRNG; las pruebas de respuesta conocida de FIPS-197 Appendix C.2 / C.3 verifican su exactitud; forman la base criptográfica del cifrado PDF 2.0 - Cifrado autenticado AES-GCM (NIST SP 800-38D) en la nueva unidad
FPdfAesGcm.pas; implementa GHASH (multiplicación GF(2^128)), GCTR y la construcción GCM AEAD sobre las primitivas de bloque AES; los casos de prueba de NIST GCM 1 y 3 (AES-128) coinciden exactamente con el texto cifrado y la etiqueta oficiales; el caso de prueba 13 (AES-256) completa el ciclo de ida y vuelta; GCM es el modo ISO/TS 32003 para PDF 2.0 - Validación de integridad de ParentTree y ClassMap de PDF/A Nivel A (ISO 19005-1 §6.8.3);
pvaiParentTreeMissingmarca un StructTreeRoot sin el árbol de números /ParentTree;pvaiClassMapUnresolvedmarca una referencia de clase /C sin un /ClassMap
Version 2.30.0
Añadido (Added)
- Inyección de archivos asociados (
InjectAssociateFiles/TPdf.SaveAsWithAssociateFiles, ISO 32000-2 §7.11.4); la nueva unidadFPdfAssocFilesadjunta arreglos/AFde referencias de especificación de archivos al catálogo o a cualquier diccionario de página, cubriendo los ocho valores de/AFRelationshipde la Tabla 45 de ISO 32000-2; reutiliza el patrón de actualización incremental probado porInjectPadesDssMarkers - Soporte para PDF/X-6 (ISO 15930-9:2020);
TPdfXConformanceañadepxc6; el inyector y el validador lo integran a través de la identificaciónpdfxid:GTS_PDFXVersion; PDF/X-6 es el sucesor basado en PDF 2.0 de PDF/X-4 para el intercambio completo - PDF/A prohíbe la acción
/Thread(brecha en la lista blanca de ISO 19005-1 §6.6.1); la lista de acciones prohibidas ahora cubre Thread junto con Launch, ResetForm, ImportData, SetOCGState, SetState, GoTo3DView, Rendition y Hide
Corregido (Fixed)
- La ruta de validación de PDF/A-4e ahora respeta las mismas comprobaciones de estructura etiquetada, MarkInfo y saltos de palabra que el Nivel A; la simplificación del lado de guardado en v2.29.0 cubría
PdfAIsLevelE, pero tres puertas deValidatePdfACompliancecomprobaban únicamentePdfAIsLevelA, por lo que un documento PDF/A-4e que carecía de estructura etiquetada pasaba silenciosamente - Desviación de la prueba OCG
/BaseState: la pasada de PostProcess en v2.28.0 amplió correctamente la aceptación a/ONo/OFF(ISO 32000-1 Tabla 8.70), pero las pruebas de Delphi y C++ aún esperaban que se rechazara/OFF; las pruebas ahora usan un valor verdaderamente no válido (/Undefined) y una nueva prueba positiva asegura la aceptación de/OFF - Coincidencia excesiva geoespacial de
/Subtype /GEO:ContainsDictionarySubtype('GEO')coincidía con cualquier diccionario que contuviera el token, incluidos los no relacionados como un/ViewerPreferences << /Subtype /GEO >>perdido; el nuevoContainsMeasureDictionarySubtyperequiere adicionalmente/Type /Measureo una clave hermana exclusiva de Measure, por lo que los diccionarios que no son de Measure ya no activan el requisito de ADBE ExtensionLevel 3
Version 2.29.0
Añadido (Added)
- Soporte para PDF/A-4 (ISO 19005-4:2020) en el validador, inyector XMP y capa de modelo de objetos de Pdfium;
TPdfAConformanceañadepac4base,pac4fypac4e; el nivel base es PDF 2.0 (ISO 32000-2) y reemplaza los niveles heredados A/B/U con base + F (formulario) + E (accesibilidad);ValidatePdfAlee un paquete XMPpdfaid:part=4(la base omite el elemento de conformidad),SaveAsPdfAlo emite, ySignPadesWithPdfAaceptapac4basecomo un contenedor de archivo a largo plazo - Vinculación de
FPDFBookmark_GetColor: la última exportación pública no vinculada de PDFium (469/469);TBookmarkobtiene los camposHasColoryColorrellenados a partir del arreglo/Cdel marcador (ISO 32000-1 §12.3.3); la vinculación utiliza una carga tolerante para que las DLL más antiguas que preceden a la exportación sigan funcionando - Comprobación de la versión de cabecera de PDF/E-1 (ISO 24517-1 §5)
pveiBadPdfVersion: PDF/E-1 se basa en PDF 1.6 y ahora se marca una cabecera que no sea 1.6 pvriEncryptVersionMismatchde PDF/R-1 (ISO 23504-1): el cifrado está permitido únicamente en una cabecera%PDF-2.0; ahora se marca un cuerpo 1.x que contenga/Encrypt(anteriormente una instrucción sin efecto)pvriBadMediaBoxde PDF/R-1: elMediaBoxde cada página debe ser[0 0 w h];PdfRHasNonZeroMediaBoxOrigines un escáner ASCII independiente de la configuración regional que omite los MediaBoxes con referencias indirectaspvaiRoleMapUnresolvedde PDF/A Nivel A (ISO 19005-1 §6.8.3.4): ahora se marca un RoleMap presente pero incompleto que deja tipos de estructura personalizados/Ssin asignar, cerrando la brecha dejada por la comprobación existente de solo presenciapvaiRoleMapMissing
Corregido (Fixed)
PdfVersionToName(20)devolvía"1.0"en lugar de"2.0", corrompiendo la entrada/Versiondel catálogo y los mensajes del validador para cada guardado de PDF 2.0; el formateador ahora divide major.minor explícitamente para códigos de versión>= 20- El codificador de INTEGER negativo de
FPdfAsn1.pasno compilaba en Delphi 12 (E2015enInteger(-(V<0))), bloqueando todo el proyecto de prueba; corregido usandoInt64(-Ord(V<0))para la máscara de extensión de signo - La lista de anotaciones prohibidas de PDF/A ahora incluye
/RichMediaen todas las partes (anteriormente omitida; ISO 32000-1 §12.5.6.35 la prohíbe en PDF/A)
Version 2.28.0
Añadido (Added)
TPdfVersionahora incluyepv20para PDF 2.0 (ISO 32000-2);DecodePdfVersion(20)devuelvepv20en lugar depvUnknown, yEncodePdfVersion(pv20)emite 20 para que la versión de un documento PDF 2.0 ya no se pierda al volver a leerla y pueda escribirse explícitamente
Cambiado (Changed)
DecodeDateahora analiza las cadenas de fecha de PDF con campos finales opcionales según PDF Reference 3.8.3, en lugar de requerir la forma completa de 23 caracteresD:YYYYMMDDHHmmSSOHH'mm'; ahora se aceptan fechas truncadas conformes comoD:20260712,D:20260712153000yD:20260712153000Z; anteriormente eran rechazadas por un límite estricto deLength=23; el desfase horario de la zona horaria ahora se valida frente al rango real de UTC-12..UTC+14 en lugar de> 23FPdfMeasure.MeasureTextahora codifica el nombre de la fuente comoAnsiStringde FPC /UTF8Encodede Delphi, coincidiendo con los otros puntos de llamada FPDF_BYTESTRING de la biblioteca, en lugar de una simple conversión aAnsiStringque distorsionaba los nombres de familias no ASCII a través de la página de códigos actual
Corregido (Fixed)
- La ruta de valor negativo de
TDerWriter.Integerfallaba o producía un DER malformado: el buclewhile V <> -1 do V := V shr 8dejabaInnervacío paraValue = -1(error de rango en el siguienteInner[Length(Inner)-1]) y producía bytes de más para otros negativos; el codificador ahora extrae bytes de complemento a dos con desplazamientos de extensión de signo y se detiene correctamente cuando el resto es pura extensión de signo; los campos INTEGER de CMS/PAdES son positivos, por lo que esto solo afecta a los llamadores que pasan valores negativos, pero ahora la ruta es correcta TPdf.GetCharacterOriginyTPdfView.GetCharacterOriginignoraban el valor devuelto deFPDFText_GetCharOriginy devolvían un punto sin inicializar en caso de fallo; el resultado ahora se inicializa a cero y una lectura fallida devuelve el origen, coincidiendo con el contrato deGetCharacterRectangle
Version 2.27.0
Cambiado (Changed)
- Las demos
PDFVieweryMultiPageViewerde Delphi, C++Builder y Lazarus ahora envuelven una vez las búsquedas de documentos, aceptanEnteryF3para el siguiente resultado, restablecen el contexto de búsqueda al cambiar las opciones de coincidencia y reservanEscpara cancelar una búsqueda o un trabajo de impresión activo - La impresión del visor ahora sigue la rotación actual del visor y selecciona la salida vertical u horizontal correspondiente, por lo que la rotación de la barra de herramientas se refleja en las páginas impresas
- Las tres demos
ViewerInteractionLabahora admiten los atajosCtrl+A,Ctrl+C,Enter,F3yEscsin interceptar los comandos nativos de selección y copia de los controles de edición
Corregido (Fixed)
- La cancelación de impresión del visor en C++Builder y Lazarus ahora aborta el trabajo de la impresora en lugar de enviar las páginas renderizadas antes de cancelar, y Lazarus sale explícitamente de cada bucle anidado de copias, páginas y ordenación
- El botón Cancelar de
MultiPageVieweren Delphi ahora está conectado a su controlador, y los campos de búsqueda deMultiPageVieweren C++Builder/Lazarus conservan la edición nativa con las teclas de flecha, Home y End
Version 2.26.0
Cambiado (Changed)
TPdf.GetObjectBitmap,TPdf.GetBitmap,TPdf.GetThumbnaily sus equivalentes deTPdfViewahora adquieren el bloqueo de renderizado alrededor de la llamadaFPDFImageObj_GetBitmap/FPDFPage_GetThumbnailAsBitmap, igual queRenderPage/RenderTile. Son llamadas de renderizado de PDFium que antes se ejecutaban sin el bloqueo y podían competir con unUnloadPage/ReloadPageconcurrente en el mismo documentoTPdf.RenderPageThumbnailahora respeta la entrada de página/Rotate: el ajuste se recalcula a partir de las dimensiones rotadas para páginas/Rotate 90o270, de modo que la proporción de la miniatura coincide con la del visor en lugar de usar las dimensiones intrínsecas (sin rotar) devueltas porFPDF_GetPageSizeByIndex
Corregido (Fixed)
TPdfView.GetCharacterRectangleignoraba el valor devuelto porFPDFText_GetCharBoxy pasaba unTPdfRectanglesin inicializar aPageToDevicecuando PDFium informaba un fallo. El rectángulo ahora se inicializa a cero y unGetCharBoxfallido devuelveRect(0,0,0,0)- La longitud del búfer de ruta URI y ruta de archivo de
GetLinkAnnotationstenía un desfase de uno: la segunda llamada aFPDFAction_GetURIPath/GetFilePathpasabasize(que incluye el NUL final) como longitud para un búfer asignado comosize-1. Ahora la llamada pasasize-1y no puede escribir fuera de la asignación en una compilación de PDFium que no limite el tamaño por sí misma
Version 2.25.0
Cambiado (Changed)
TPdf.AddText,SetText,AddPathyInsertFormObjectFromXObjectahora invalidan la página de texto almacenada en caché y las anotaciones de enlaces antes de regenerar el contenido, igual queSetTextPositionsyRemoveObject. Antes, una llamada aGetText/GetWebLinks/FindFirstdespués de editar la página devolvía datos de texto y enlaces obsoletos, y el controladorFPDF_TEXTPAGEretenido se usaba después de regenerar el contenido con comportamiento indefinidoTPdfView.RenderPage(HDC, ...)ahora adquiere el bloqueo de renderizado y enmascara las excepciones FPU/SSE alrededor de la llamadaFPDF_RenderPage, igual que los demás puntos de entrada de renderizado. La sobrecarga directa a DC anterior podía competir con unUnloadPage/ReloadPageconcurrente en el mismo documento y dejaba sin enmascarar las excepciones FPU en compiladores anteriores a D12- La demo
PrintPDFde Delphi ahora llama aPrinter.Abortal cancelar en lugar de permitir que el bloquefinallyllegue aPrinter.EndDoc, que enviaba las páginas renderizadas antes de la cancelación. La demo de Lazarus ya lo gestionaba correctamente
Corregido (Fixed)
TPdf.GetCharacter,TPdf.GetCharcodey sus equivalentes deTPdfViewtruncaban los puntos de código del plano astral (emoji, CJK Extension B) devueltos porFPDFText_GetUnicodea los 16 bits inferiores medianteWideChar(), produciendo un sustituto aislado que corrompía el procesamiento de texto posterior. Los caracteres superiores a U+FFFF ahora devuelven U+FFFD (carácter de reemplazo); usaGetTextpara recuperar la codificación UTF-16 completa de los caracteres astralesGetWebLinksllamaba aSetLength(Rectangles, FPDFLink_CountRects(...))sin protegerse contra un retorno-1, lo que provocaba unEOutOfMemoryen una página malformada. El conteo negativo ahora se limita a ceroTPdf.Destroyahora limpia la cadenaPasswordde la memoria (medianteUniqueString+FillChar) antes de liberar el búfer con conteo de referencias, de modo que la contraseña no queda legible en el montón después de destruir el componente
Version 2.24.0
Añadido (Added)
TPdf.DeletePage,GetAttachment,GetAttachmentName,GetAttachmentType,SetAttachmentyDeleteAttachmentahora validan el índice de página o archivo adjunto y generanEPdfErrorcuando está fuera de rango, en consonancia con el comportamiento existente de los accesores de anotaciones. Antes, un índice fuera de rango se pasaba directamente a PDFium y producía una operación sin efecto o un comportamiento indefinido
Corregido (Fixed)
- Fugas de controladores de objetos de página en caso de fallo en
TPdf.AddText,AddBitmapyAddJpegImage: cuandoFPDFText_SetText,FPDFImageObj_SetBitmap,FPDFImageObj_SetMatrixoFPDFImageObj_LoadJpegFileInlinegeneraban una excepción después de crear el objeto pero antes de queFPDFPage_InsertObjectlo entregara a la página, se fugaba el controlador nativoFPDF_PAGEOBJECT. Ahora cada ruta destruye el objeto en la excepción antes de volver a generarla TPdf.UnloadPagedescartaba un controladorFPathen progreso (establecido porCreatePathpero aún no consumido porAddPath) asignándolenilsin llamar aFPDFPageObj_Destroy. Ahora el controlador se destruye, por lo que una ruta creada y luego abandonada (o interrumpida por un cambio de página) ya no produce fugasTPdf.InsertFormObjectFromXObjectomitía la llamada aUpdatePage(FPDFPage_GenerateContent) que realiza cada inserción equivalente (AddText/AddPath/AddBitmap/AddJpegImage/SetText/RemoveObject), por lo que un Form XObject insertado así desaparecía al volver a cargar o guardar. Ahora se llama aUpdatePagedespués de la inserción
Version 2.23.0
Corregido (Fixed)
- La validación de contenido opcional de
/BaseStateahora acepta/OFFademás de/ON(ISO 32000-1 Table 8.70 permite ambos). La comprobación anterior rechazaba configuraciones legítimas/OCProperties /D /BaseState /OFFcon un error de contenido opcional malformado aunque el archivo fuera conforme - La validación de contenido opcional de
/Intentahora acepta/Designy arreglos de nombres como[/View /Design], no solo el literal/View. ISO 32000-1 Table 8.70 define/Intentcomo un nombre o un arreglo de nombres tomados de/Viewy/Design; la comprobación anterior de un solo valor rechazaba de más la salida estándar de las herramientas de autoría - La detección del diccionario Measure geoespacial para la compuerta ExtensionLevel 3 de PDF 1.7
/Extensions /ADBEya no requiere/Type /Measure, que ISO 32000-1 Table 254 marca como opcional. Los productores GeoPDF que omiten/Type(PDFBox, QGIS, FME) antes eludían la compuerta y producían silenciosamente una salida PDF 1.7 no conforme; ahora el detector coincide solo con/Subtype /GEO
Version 2.22.0
Cambiado (Changed)
- Los cálculos de ajuste de zoom de
TPdfView(GetPageZoom,GetPageWidthZoom,GetPageHeightZoom) ahora usanClientWidth/ClientHeighten lugar deWidth/Heightde la ventana, de modo quepfmFitPage/pfmFitWidth/pfmFitHeightajustan la página al área visible en lugar del marco exterior con barras de desplazamiento y bordes, eliminando la barra redundante que aparecía cuando la página ajustada era ligeramente mayor que el área cliente AddSignatureTimestampToCmsahora genera unaExceptionexplícita que identifica el campo CMS SignerInfo ilegible (version / sid / digestAlgorithm / signedAttrs / signatureAlgorithm) en lugar de ejecutarExitsilenciosamente y continuar un análisis parcial como si fuera una firma CMS completa; también se corrige la falta del bloquebegin/endalrededor de la rama opcionalsignedAttrs [0]que dejabaR.Positionsin avanzar
Corregido (Fixed)
- Fuga del controlador de clave privada CNG en
ResolveWinSigner: cuandoCryptAcquireCertificatePrivateKeytenía éxito pero la extracción posterior de emisor/serie oTWinCmsSigner.Creategeneraba una excepción,NCryptKeyHandlenunca se liberaba porque su propiedad solo se transfiere al firmante tras un constructor exitoso. La configuración posterior a la adquisición ahora está envuelta para liberar el controlador medianteNCryptFreeObjectante cualquier fallo inicial EcDsaP1363ToDerahora rechaza una mitadroscompletamente cero en lugar de emitir unINTEGER 0; las firmas ECDSA conr = 0os = 0no son válidas (RFC 4754 §6 / FIPS 186-4 §6 exige1 ≤ r, s ≤ n-1) y de otro modo serían aceptadas como genuinas por un verificador permisivo
Version 2.21.12
Corregido (Fixed)
- Los guardados explícitos de PDF 1.5 a PDF 1.7 ahora rechazan estructuras
/OCPropertiesde catálogo malformadas, incluidas entradas/OCGso/Dobligatorias ausentes
Version 2.21.11
Corregido (Fixed)
- Los guardados explícitos de versión PDF ahora rechazan entradas
/Annotsde página cuyos diccionarios omiten/Subtypeo/Rect
Version 2.21.10
Corregido (Fixed)
- Los guardados explícitos de PDF 1.7 ahora requieren que los diccionarios geoespaciales
/Type /Measure /Subtype /GEOy las anotaciones Projection declaren/Extensions /ADBEcon/BaseVersion /1.7y/ExtensionLevel 3o posterior
Version 2.21.9
Corregido (Fixed)
- Los guardados explícitos de PDF 1.7 ahora requieren que las anotaciones RichMedia y las acciones
RichMediaExecutedeclaren/Extensions /ADBEcon/BaseVersion /1.7y/ExtensionLevel 3o posterior
Version 2.21.8
Corregido (Fixed)
- El guardado explícito en PDF 1.7 exige ahora que los flujos PRC 3D declaren
/Extensions /ADBEcon/BaseVersion /1.7y/ExtensionLevel 1o posterior, en lugar de tratar PRC como una función básica de PDF 1.7
Version 2.21.7
Corregido (Fixed)
- Los guardados explícitos de PDF 1.4 y anteriores ahora rechazan entradas
/SMaskInDatade XObject de imagen, incluido el valor0, porque los canales de máscara suave JPEG 2000 requieren PDF 1.5 o posterior
Version 2.21.6
Corregido (Fixed)
- El guardado explícito en PDF 1.4 o anterior rechaza ahora los XObjects de imagen de 16 bits, que requieren PDF 1.5 o posterior, mientras que los destinos PDF 1.5 a PDF 1.7 conservan sus datos de imagen
/BitsPerComponent 16
Version 2.21.5
Corregido (Fixed)
- El guardado explícito en PDF 1.4 o anterior rechaza ahora los valores
/PageLayout /TwoPageLefty/TwoPageRightdel catálogo del documento, que requieren PDF 1.5 o posterior, mientras que los destinos PDF 1.5 a PDF 1.7 conservan el layout de dos páginas solicitado
Version 2.21.4
Corregido (Fixed)
- Los guardados explícitos de PDF 1.3 ahora rechazan entradas de catálogo
/Lang, que requieren PDF 1.4 o posterior, mientras los destinos PDF 1.4 a PDF 1.7 conservan el identificador de idioma
Version 2.21.3
Corregido (Fixed)
- El guardado explícito en PDF 1.3 elimina ahora los árboles de nombres
/EmbeddedFilesdel catálogo, que requieren PDF 1.4 o posterior, sin eliminar los flujos de archivos incrustados referenciados mediante diccionarios de archivos más antiguos
Version 2.21.2
Corregido (Fixed)
- El guardado explícito en PDF 1.3 rechaza ahora los flujos de metadatos activos, que requieren PDF 1.4 o posterior, y los conserva para destinos PDF 1.4 a PDF 1.7
Version 2.21.1
Corregido (Fixed)
- La validación de referencias híbridas aplica ahora las entradas suplementarias
/XRefStmantes que los marcadores xref clásicos de la misma revisión, de modo que las anotaciones comprimidas y otros objetos protegidos por versión ya no se omiten cuando la tabla de compatibilidad los marca como libres
Version 2.21.0
Cambiado (Changed)
- Todas las demos de visualización de Delphi, C++Builder y Lazarus pueden abrir un PDF pasado como primer argumento de línea de comandos, y las demos
MultiPageViewerpara C++Builder y Lazarus ofrecen accesos directos explícitos para seleccionar todo y copiar
Corregido (Fixed)
- Los ejemplos de visor rechazan ahora destinos de página inválidos en marcadores y enlaces, conservan los errores de carga, validan de forma coherente el zoom manual, imprimen la página solicitada con el formulario cumplimentado en lugar de repetir la visible y abortan los trabajos de impresión Delphi cancelados en vez de enviar una salida parcial
Version 2.20.0
Cambiado (Changed)
- Todos los ejemplos de visor de Delphi, C++Builder y Lazarus ofrecen atajos coherentes para abrir, buscar, guardar, imprimir, hacer zoom y navegar por páginas, y cada variante de
ViewerInteractionLabadmite además saltos de página, zoom manual validado de 10–600%, registros de interacción persistentes y comprobaciones de ida y vuelta de coordenadas de clic
Version 2.19.1
Corregido (Fixed)
- La validación explícita de la versión PDF sigue ahora la cadena de revisiones activa de documentos clásicos, híbridos o xref-stream, incluidas las entradas de objetos comprimidos, de modo que los objetos sustituidos, libres y sin referencia ya no producen resultados de versión incorrectos
Version 2.19.0
Cambiado (Changed)
- Las demos de adjuntos, exportación de imágenes, exportación de texto, conversión de páginas y división para C++Builder y Lazarus utilizan ahora carpetas de salida dedicadas o archivos completados de forma segura, nombres fijos con relleno de ceros, actualizaciones de progreso reactivas y recuentos de errores por elemento en el resumen de finalización
Corregido (Fixed)
- El
CJKTextLabde C++Builder mide ahora texto mediante las funciones de edición PDFium exportadas, yMergePDFevita una sobrecarga de mensaje VCL ambigua, restaurando compilaciones limpias en RAD Studio 37
Version 2.18.3
Corregido (Fixed)
- El sello de tiempo de documento PAdES B-LTA se registra ahora como un campo de firma localizable — un Widget invisible accesible a través del array
/Annotsde la primera página y del array/Fieldsdel AcroForm (ETSI EN 319 142-1 §5.4.3) — en lugar de como un objeto huérfano inaccesible que los validadores de enumeración de campos de firma no podían localizar; las anotaciones y los campos existentes se conservan
Version 2.18.2
Corregido (Fixed)
- La firma PAdES y la escritura clásica de referencias cruzadas lanzan ahora un error claro cuando un desplazamiento de bytes supera el campo fijo de 10 dígitos (~9.3 GB), en lugar de dejar sin escribir el marcador
/ByteRange(produciendo una firma inválida) o desbordar la línea xref de 20 bytes (ISO 32000-1 §7.5.4); la salida de flujos de referencias cruzadas usa campos binarios de 8 bytes y no se ve afectada
Version 2.18.1
Corregido (Fixed)
- La firma PAdES resuelve ahora las referencias indirectas
/Annots,/AcroFormy/Fieldsde la primera página con una cabecera de objeto completa (ISO 32000-1 §7.5.3) y el número de generación real de la referencia; la búsqueda anterior de subcadena simple podía hacer coincidir un número de objeto dentro de otro más largo (resolviendo5 0 Rcomo15 0 obj) y una generación fija omitía los objetos congen>0 - Cuando el catálogo, la primera página,
/Annots,/AcroFormo/Fieldsreside dentro de un flujo de objetos, la firma prueba ahora con una copia expandida antes de fallar en lugar de rechazar inmediatamente el documento
Version 2.18.0
Añadido (Added)
ReadPdfVersionInfoinforma de la versión de la cabecera, la versión de núcleo efectiva, la anulación del catálogo y el nivel de extensión del desarrollador de Adobe desde un flujo PDF
Cambiado (Changed)
- El guardado explícito en PDF 1.3-1.7 valida ahora las estructuras de catálogo, recursos de página, XFA, redaction y extensiones de desarrollador en el contexto de su objeto propietario; se rechazan la salida cifrada con versión explícita y la normalización incremental PDF 1.3 para preservar la integridad del documento
- El guardado en una ruta de archivo escribe ahora en un archivo temporal adyacente y reemplaza el destino solo después de que todas las compresiones, normalizaciones y comprobaciones de versión sean correctas
Corregido (Fixed)
- La salida PDF 1.3 incluye ahora el recurso
/ProcSetcompleto requerido y elimina las claves de transparencia de PDF 1.4 cuando solo repiten los valores predeterminados del estado gráfico de PDF 1.3 - Los archivos con entradas de referencia híbrida, xref-stream y flujo de objetos ya no son sobrescritos por el compresor xref clásico, evitando la pérdida de registros de objetos comprimidos
- Los nombres que se asemejan a claves de transparencia o de catálogo dentro de cadenas, comentarios o mapas de recursos no relacionados ya no causan un falso fallo de versión de destino
Version 2.17.0
Añadido (Added)
- Las firmas PAdES se registran ahora como anotaciones Widget invisibles en el array
/Annotsde la primera página y en el array/Fieldsdel AcroForm, conservando las anotaciones y los campos de formulario existentes
Cambiado (Changed)
- Las actualizaciones incrementales para PDF/A, PDF/X, PDF/E, PDF/R, PDF/UA, PDF/VT y PAdES conservan ahora la representación de referencias cruzadas del archivo de origen: los documentos xref-stream reciben una actualización xref-stream según ISO 32000-1 §7.5.8.1, mientras que los clásicos siguen recibiendo una tabla xref
- Los desplazamientos de referencias cruzadas,
startxref,/Prev, los valores ByteRange de PAdES y el procesamiento SHA-256 de amplio rango utilizan ahora posiciones de 64 bits con hashing en bloques, lo que permite archivos de más de 2 GB en compilaciones de 64 bits - Los paquetes XMP grabables generados reservan ahora 2048 bytes de relleno antes de la instrucción de procesamiento de cierre del paquete
Version 2.16.10
Corregido (Fixed)
- La expansión de flujos de objetos ya no resucita copias obsoletas de objetos que una actualización incremental desplazó fuera del flujo de objetos a una definición simple (ISO 32000-1 §7.5.7); las comprobaciones de conformidad y la inyección de marcadores resolvían anteriormente el catálogo o diccionario de metadatos obsoleto en dichos archivos
Version 2.16.9
Corregido (Fixed)
- En Free Pascal, el texto de cadena que no es UTF-8 válido se expande ahora byte a byte como Latin-1 y se escribe como cadenas hexadecimales UTF-16BE; anteriormente, los bytes altos sin procesar se filtraban a una cadena literal, que no es una codificación válida de texto-cadena PDF 1.7
- La decodificación de flujos reconoce ahora los datos deflate sin procesar sin el envoltorio zlib RFC 1950 (un fallo habitual en escritores defectuosos) y los descomprime en modo bruto, de modo que las comprobaciones de conformidad ya no son efectivamente ciegas a dichos flujos
Version 2.16.8
Corregido (Fixed)
- Las actualizaciones incrementales escritas mediante la ruta de postprocesamiento de pasada única actualizan ahora el segundo elemento (cambiante) del trailer
/IDsegún ISO 32000-1 §14.4; las herramientas de caché y sincronización veían anteriormente un identificador obsoleto tras cada actualización
Version 2.16.7
Corregido (Fixed)
- El borrado del cuerpo del flujo requiere ahora que la palabra clave
streamvaya seguida de un final de línea (ISO 32000-1 §7.3.8.1); la palabra dentro de una cadena literal como(downstream)activaba anteriormente el borrado de toda la estructura siguiente hasta el próximoendstream - Los análisis de características prohibidas de PDF/X y PDF/E también borran ahora cadenas literales y comentarios (§7.2.2), de modo que valores como
/Title (see /JavaScript docs)o un token comentado ya no causan la falsa detección deJavaScript,AcroFormoLZWDecode
Version 2.16.6
Corregido (Fixed)
- Las entradas DPM de PDF/VT se validan ahora al escribir según lo documentado: los nombres de clave que infringen la regla NMTOKEN de ISO 16612-2 §6.6 o la regla de prefijo de registrador del Anexo E, y los nombres duplicados, se rechazan en lugar de escribirse en el diccionario DPart
Version 2.16.5
Corregido (Fixed)
- La eliminación de una entrada de diccionario cuyo valor es una cadena hexadecimal (p. ej.,
/Check <...>) elimina ahora toda la entrada; los inyectores dejaban anteriormente un valor hexadecimal huérfano, creando un diccionario sintácticamente corrupto - La eliminación de una entrada cuya referencia indirecta utiliza saltos de línea entre tokens (ISO 32000-1 §7.3.10) ya no deja atrás el número de generación y la palabra clave
R
Version 2.16.4
Corregido (Fixed)
- El análisis del número máximo de objeto ya no requiere que las cabeceras de objeto comiencen una línea (ISO 32000-1 §7.5.3), por lo que los inyectores ya no pueden reclamar un número de objeto que colisione con una cabecera en línea
N G obj; los números de objeto están acotados por el límite superior del Anexo C - Los flujos cuyo
/Lengthes una referencia indirecta resuelven ahora el objeto entero referenciado y utilizan su valor cuando coincide con elendstreamde cierre; anteriormente estos flujos se acotaban mediante una búsqueda de patrón, que truncaba cuerpos que contuvieran legítimamente la secuencia de bytesendstream
Version 2.16.3
Corregido (Fixed)
- La compresión de flujos pasa sin modificar los documentos de flujo de referencias cruzadas (PDF 1.5+ sin la palabra clave clásica
trailer); la ruta de reconstrucción interpretaba anteriormente incorrectamente unstartxreferróneo como posición de tabla y sintetizaba un trailer inferido - El compresor omite los flujos de metadatos XMP para que un documento PDF/A conserve su flujo de metadatos sin filtrar obligatorio (ISO 19005-1 §6.7.2), y deja intactos los flujos de archivos externos (
/Fcon/FFilter) - La tabla de referencias cruzadas reconstruida analiza una copia del documento sin flujos, de modo que el contenido binario de un flujo no puede suplantar cabeceras de objeto; el
/Sizedel trailer reconstruido refleja ahora la tabla real y los números de objeto se acotan por el límite superior del Anexo C - La búsqueda de la tabla de referencias cruzadas inicial acepta ahora terminadores de línea solo CR (ISO 32000-1 §7.5.1) y no puede hacer coincidir las letras
xrefdentro destartxref; el análisis de la palabra clave stream incorporó la misma guarda de cola deendstreamusada en otros lugares y avanza ahora más allá de los cuerpos de flujo omitidos
Version 2.16.2
Corregido (Fixed)
- El análisis de enteros en lectores PDF a nivel de bytes acepta ahora el signo explícito
+(ISO 32000-1 §7.3.3) y rechaza secuencias de dígitos que provocarían desbordamiento, de modo que los documentos hostiles o corruptos no pueden envolver longitudes y desplazamientos
Version 2.16.1
Corregido (Fixed)
- El inyector PDF/UA escribe el valor del catálogo
/Langcomo cadena de texto PDF canónica; anteriormente lo pasaba por un escapador XML, de modo que las etiquetas de idioma que contienen&o paréntesis producían una entrada corrupta y la entrada no ASCII se escribía como UTF-8 sin procesar - La entrada Info
/ISO_PDFEVersionde PDF/E utiliza el codificador de cadena de texto compartido, conservando los valores no ASCII válidos en PDF 1.7 - El escape XML para paquetes XMP elimina ahora los caracteres de control que no son válidos en XML 1.0, de modo que los metadatos de un documento de origen corrupto no pueden inutilizar el flujo de metadatos
- La conversión de fechas PDF a XMP valida que los campos de fecha sean numéricos y rellena el campo de minutos si falta, evitando fechas ISO 8601 malformadas en el XMP generado; fuera de Windows, el timestamp de fallback incluye ahora la hora del día en lugar de solo la fecha
Version 2.16.0
Añadido (Added)
- La decodificación de flujos reconstruye ahora los predictores
/DecodeParms(PNG 10-15 y TIFF 2, ISO 32000-1 §7.4.4.4) después de FlateDecode, respetando/Colors,/BitsPerComponenty/Columns; los flujos de objetos comprimidos con un predictor —una opción habitual en escritores PDF 1.5+— antes exponían bytes diferenciales, de modo que sus objetos resultaban invisibles para las comprobaciones de conformidad y la inyección de marcadores
Corregido (Fixed)
- La detección de FlateDecode analiza ahora
/Filtercomo nombre o array, en lugar de buscar una subcadena, para que las cadenas de filtros en cascada y las apariciones de la palabra en valores ajenos no activen una descompresión incorrecta; las cadenas no admitidas siguen devolviendo los bytes sin procesar
Version 2.15.1
Corregido (Fixed)
- El analizador de diccionarios omite ahora las cadenas literales, las cadenas hexadecimales y los comentarios durante el equilibrio
<</>>(ISO 32000-1 §7.2.2), de modo que los diccionarios con valores como(A >> B)o una cadena hexadecimal adyacente al delimitador de cierre ya no se truncan - La extracción de cadenas literales decodifica ahora la secuencia de escape completa §7.3.4.2 Tabla 3 —
\n \r \t \b \f, octal\ddd, continuaciones de línea y normalización de EOL — en lugar de copiar el carácter de escape literalmente, restaurando las comparaciones correctas de/Producer,/GTS_PDFXVersiony/ISO_PDFEVersionpara escritores que usan escapes octales - Las cadenas literales escritas por los inyectores de marcadores escapan ahora CR, LF y otros caracteres de control
Version 2.15.0
Corregido (Fixed)
- Las actualizaciones incrementales de los inyectores PDF/A, PDF/X, PDF/E, PDF/R, PDF/UA, PDF/VT y de las rutas PAdES y DSS conservan ahora el identificador de archivo permanente del documento de origen: el primer elemento del trailer
/IDse traslada literalmente (ISO 32000-1 §14.4) y solo el segundo elemento (cambiante) se actualiza - Las firmas PAdES, la inyección DSS y los sellos de tiempo de documento B-LTA trasladan ahora la referencia
/Infodel trailer de origen (ISO 32000-1 §7.5.6); el trailer del sello de tiempo de documento gana también el array/ID - La escritura de entrada de trailer
/Infode reserva para documentos de flujo de referencias cruzadas localiza ahora correctamente el diccionario de flujo XRef y conserva el número de generación de la referencia; antes nunca coincidía en archivos PDF 1.5+ conformes, perdiendo silenciosamente la/Info
Version 2.14.4
Corregido (Fixed)
- La fecha
/Mdel diccionario de firma escrita porTPdf.SignPadesySignPadesBytesincluye ahora el prefijo obligatorioD:y el indicador de desplazamiento UTCZ(ISO 32000-1 §7.9.4)
Version 2.14.3
Corregido (Fixed)
- Las búsquedas de claves de diccionario en el lector PDF compartido hacen coincidir ahora tokens de nombre completos (ISO 32000-1 §7.3.5); anteriormente un flujo cuyo diccionario listaba
/Length1antes de/Length(típico de los flujos FontFile) se truncaba a un recuento de bytes incorrecto, cegando silenciosamente los análisis de conformidad de PDF/A, PDF/UA y otros que leen flujos de fuentes, CMap o metadatos - Las búsquedas del trailer
/Encrypt,/Root,/Sizey/Infoya no hacen coincidir claves más largas con un prefijo común (como/EncryptMetadata) - La expansión de flujos de objetos ya no confía en valores
/Ncorruptos u hostiles: los valores no enteros producen ahora 0 en lugar de un número sin inicializar, y un límite superior derivado de/Firstevita asignaciones excesivas al analizar documentos mal formados
Version 2.14.2
Corregido (Fixed)
- Los inyectores de marcadores PDF/X, PDF/VT, PDF/UA, PDF/E y PDF/R pasan ahora los documentos de origen cifrados sin modificar, en lugar de añadir secciones de actualización en texto plano; el comportamiento anterior producía archivos cuyo último trailer perdía la entrada
/Encrypt(ISO 32000-1 §7.5.6), de modo que los lectores conformes leían el cuerpo cifrado como texto plano TPdf.SignPades,SignPadesBytesyInjectPadesDssMarkersemiten ahoraEPadesCryptocuando el documento de origen está cifrado
Version 2.14.1
Corregido (Fixed)
TPdf.SignPadesySignPadesBytesrellenan ahora hacia atrás los cuatro campos/ByteRangedel diccionario de firma- Los diccionarios de sello de tiempo de documento PAdES B-LTA reciben la misma corrección de relleno hacia atrás de
/ByteRange ValidatePadesComplianceacepta ahora la disposición de firma canónica donde el hueco vacío del rango de bytes contiene el valor hexadecimal/Contents
Version 2.14.0
Añadido (Added)
TPdf.ExportXFDFserializa cada valor de campo de formulario y anotación en todas las páginas a un documento XFDF (ISO 19444-1), emitiendo<fields>para los valores jerárquicos de formulario y<annots>para todos los subtipos de anotación soportados (texto, resaltado, subrayado, tachado, ondulado, línea, círculo, cuadrado, caret, polígono, polilínea, sello, tinta, texto libre, adjunto de archivo, sonido, enlace, redactado)TPdf.ImportXFDFimporta un documento XFDF de vuelta al PDF cargado, recreando anotaciones en las páginas correspondientes- El registro
TPdfAnnotationha ganado los camposName(NM),Subject,ModificationDate(M),CreationDate,Icon,Opacity(CA), extremos de línea, vértices de polígono/polilínea y campos de gestos de listas de tinta, de modo que los viajes de ida y vuelta de XFDF preservan todos los metadatos de anotación - Una nueva demo
XfdfLaben los conjuntos Delphi, C++Builder y Lazarus demuestra la exportación/importación de ida y vuelta
Version 2.13.6
Corregido (Fixed)
ValidatePdfAtrata ahora los flujos/Metadatadel catálogo sin/Type /Metadatao/Subtype /XMLcomo metadatos XMP ausentes mediantepvaiMissingXmpMetadata- Los informes de comprobación previa de PDF/A categorizan
pvaiMissingXmpMetadatacomo Metadata y recomiendan un flujo/Metadatadel catálogo con/Type /Metadata,/Subtype /XML, XMP sin filtrar y marcadorespdfaid
Version 2.13.5
Corregido (Fixed)
ValidatePdfAinforma ahora de las anotaciones Widget sin diccionario de apariencia, y de las anotaciones PDF/A-2/PDF/A-3 sin/AP, mediantepvaiAnnotationApDictViolation- Los informes de comprobación previa de PDF/A categorizan
pvaiAnnotationApDictViolationcomo contenido que los inyectores no pueden reparar
Version 2.13.4
Corregido (Fixed)
ValidatePdfAinforma ahora de las imágenes en línea PDF/A-2 y PDF/A-3 con/Io/Interpolateigual atruemediantepvaiImageDictionaryViolation- Los informes de comprobación previa de PDF/A categorizan
pvaiImageDictionaryViolation
Version 2.13.3
Corregido (Fixed)
ValidatePdfAinforma ahora de imágenes inline PDF/A-1 que usan filtros/LZWDecodeo su abreviatura/LZWdentro de flujos de contenido mediantepvaiInlineImageLzwForbidden, igualando la cobertura inline existente para PDF/A-2 y PDF/A-3- El analizador de filtros de imágenes inline avanza ahora más allá de nombres de recursos iniciales como
/GS1, evitando bloqueos al recorrer flujos de contenido PDF/A-1 más amplios
Version 2.13.2
Añadido (Added)
TPdf.SetFocusedFormFieldTextescribe texto en el búfer de edición del campo de formulario enfocado medianteFORM_ReplaceSelection, simétrico aFocusedFormFieldText; en los campos de texto y combo AcroForm el valor se confirma en/Val perder el foco y persiste, mientras que en los campos de texto XFA la escritura queda solo en el búfer en memoria- La plataforma host de JavaScript se conecta ahora cuando V8 está disponible independientemente de XFA — para que también se ejecute el JavaScript de AcroForm incrustado (scripts de nivel de documento, cálculos de campos,
app.alert); anteriormentem_pJsPlatformsolo se conectaba para documentos XFA, dejando el JS de AcroForm silenciosamente deshabilitado
Cambiado (Changed)
- La conexión de la plataforma JavaScript es ahora independiente de XFA en
InitializeFormFill— la tablam_pJsPlatformse construye siempre queV8FeaturesAvailablesea verdadero, aplicada después del cableado de versión y callbacks de XFA en lugar de anidada dentro de él
Version 2.13.1
Añadido (Added)
- Nuevos eventos del host exponen información que antes se perdía en los callbacks de formularios de v2.13.0:
OnXfaUriAction,OnXfaPageCountChanged,OnXfaFocusChange,OnXfaEmail,OnXfaHttpRequest,OnXfaOpenFile,OnJavaScriptBeep,OnJavaScriptPrint,OnJavaScriptMail,OnJavaScriptSubmitForm. Sin manejador asignado, cada evento mantiene el comportamiento previo de no hacer nada, por lo que los hosts existentes no cambian - La propiedad de solo lectura
TPdf.XfaFormPacketsdevuelve una instantánea de todos los paquetes XFA (TXfaPacketList), completando los tiposTXfaPacket/TXfaPacketListdeclarados anteriormente pero sin usar - Los errores PDFium específicos de XFA
FPDF_ERR_XFALOAD/FPDF_ERR_XFALAYOUTse enlazan y exponen ahora medianteLastPdfError, sustituyendo el mensaje genérico "Unknown error" de los fallos de carga o layout XFA
Cambiado (Changed)
FFI_DoURIActionWithKeyboardModifierconsulta ahoraOnXfaUriActionantes de ejecutar mediante el shell una URI de un campo XFA, dando al host derecho de veto (un campo XFA malicioso podía abrir antes URL arbitrarias sin condiciones). Sin manejador asignado se conserva el comportamiento predeterminado deShellExecuteWDecodeFormFieldTypeenruta ahora los tipos de campo XFA medianteIsXfaFormFielden lugar de un case explícito de 8 ramas, manteniendo el enum alineado conFPDF_FORMFIELD_XFA_*por desplazamiento ordinal
Corregido (Fixed)
ValidatePdfAinforma ahora de declaraciones PDF/A-1 que usan flujos de referencias cruzadas PDF 1.5 o flujos de objetos mediante la nueva incidenciapvaiPdfA1Pdf15Structure, y sigue permitiendo flujos de objetos en PDF/A-2 y PDF/A-3
Version 2.13.0
Añadido (Added)
- Soporte completo del entorno de ejecución XFA (XML Forms Architecture):
TPdf.InitializeFormFillconecta ahora los 14 callbacks de versión 2 deFPDF_FORMFILLINFO(FFI_DisplayCaret,FFI_GotoURL,FFI_PageEvent,FFI_PopupMenu,FFI_OpenFile,FFI_EmailTo,FFI_UploadTo,FFI_GetPlatform,FFI_GetLanguage,FFI_DownloadFromURL,FFI_PostRequestURL,FFI_PutRequestURL,FFI_OnFocusChange,FFI_DoURIActionWithKeyboardModifier) y adjunta unIPDF_JsPlatformpara que unpdfium.dllcon XFA pueda renderizar y programar formularios XFA dinámicos - La nueva unidad
Lib\FPdfXfa.pasdeclara las constantes XFA (FXFA_PAGEVIEWEVENT_*,FXFA_MENU_*,FXFA_SAVEAS_*,FPDF_FORMFIELD_XFA_*) y los tiposTXfaPacket/TXfaSaveFormatque antes solo se referenciaban en comentarios - Lector de paquetes XFA estático en
TPdf:GetXfaPacketCount/GetXfaPacketName/GetXfaPacketContent/GetXfaPacketByName, másGetXfaTemplate/GetXfaDatasets/GetXfaConfigy otros métodos, que extraen los paquetes XFAtemplate,datasetsyconfigcomo XML en bruto sin necesidad de un runtime con XFA — útil para auditorías de conformidad y migración de datos - Sondas de capacidad: la global
XfaFeaturesAvailabley, por documento,TPdf.XfaRuntimeAvailable(siFPDF_LoadXFAtuvo éxito realmente) yTPdf.XfaStaticReadable(si las exportaciones del lector de paquetes se resuelven) TPdfFormFieldTypese amplió confiXfa,fiXfaCheckBox,fiXfaComboBox,fiXfaImageField,fiXfaListBox,fiXfaPushButton,fiXfaSignatureyfiXfaTextField, conDecodeFormFieldTypemapeando los nuevos valoresFPDF_FORMFIELD_XFA_*- Eventos host de JavaScript en
TPdf:OnJavaScriptAlert,OnJavaScriptResponse,OnXfaGotoUrlyOnXfaRuntimeMissingpermiten al host personalizar los diálogos JS y la navegación XFA, o reaccionar cuando un documento XFA no puede ejecutar el motor - Nuevo ejemplo Delphi
XfaLabque muestra detección XFA, extracción de paquetes, consultas de capacidad y la vía de fallback cuando falta el runtime
Cambiado (Changed)
TPdf.LoadDocumentahora preanaliza la entrada en busca de marcadores XFA (/XFAen el diccionario AcroForm, o/NeedsRenderingdel catálogo) y, si los encuentra, selecciona automáticamentepdfium.v8.dllestableciendoEnableV8Engine := Trueantes de la primera carga de la biblioteca singleton; una vez cargado unpdfium.dllnormal el proceso no puede cambiar, por lo queOnXfaRuntimeMissingseñala ese casoTPdf.GetPageCountrefleja ahora el número de páginas que el motor XFA informa medianteFFI_PageEventtras la repaginación dinámica, en lugar de solo el árbol de páginas PDF estático- Si se abre un documento XFA sin runtime disponible,
InitializeFormFillfija ahoraversion=1yxfa_disabled=1en vez de solicitar la versión 2 con callbacks sin asignar, lo que antes podía desreferenciar un puntero de callback inválido
Version 2.12.2
Corregido (Fixed)
ValidatePdfAComplianceinforma ahora de los espacios de nombres XMP personalizados sinpdfaExtension:schemas, aceptando todavía los metadatospdfaidestándar sin declaraciones de extensión- La validación de archivos incrustados PDF/A-3 requiere ahora tanto
/Fcomo/UFde nivel superior en los diccionarios filespec e ignora las claves de flujo/EFanidadas al comprobar esos nombres
Version 2.12.1
Corregido (Fixed)
ValidatePdfACompliancedecodifica ahora los tokens de nombre PDF escapados antes de comparar JavaScript, LZWDecode, Type1 y otros nombres prohibidos, para informar correctamente de nombres ofuscados pero semánticamente idénticos- Las comprobaciones de imágenes en línea de PDF/A rechazan ahora los valores
/Filtery/Fque usan/LZWDecode, la forma abreviada/LZWo/Crypt, incluidas las formas de array y de nombre escapado - La validación de PDF/A informa ahora de flujos de metadatos con filtros de flujo prohibidos, perfiles ICC de OutputIntent cuyo recuento de componentes
/Nfalta o es incoherente, y especificaciones de archivos incrustados PDF/A-3 con/AFRelationshipausente o no válida
Version 2.12.0
Añadido (Added)
- Las peticiones HTTP TSA establecen ahora timeouts explícitos de 30 segundos por fase (resolución/conexión/envío/recepción) mediante
WinHttpSetTimeouts, evitando que una autoridad lenta o inaccesible bloquee indefinidamente el hilo de firma sin depender de los valores implícitos de WinHttp - Generación de nonce para cada petición de sello de tiempo PAdES B-T / B-LTA cuando el llamador omite
TPadesSignOptions.Nonce: un plegado SHA-256 de contador monótono + reloj de pared +GetTickCount64+ id de proceso sustituye al anterior valor fijo de reserva$100000000, de modo que dos peticiones emitidas en el mismo milisegundo ya no reutilizan el mismo nonce anti-replay PdfInflatelimita ahora la salida descomprimida a 256 MiB para impedir que un flujo comprimido con zlib agote la memoria con una entrada hostil o corrupta (una “zlib bomb”); el límite es holgado para cualquier flujo PDF real
Cambiado (Changed)
- La mezcla de superposiciones de
TPdfView(resaltado de búsqueda, selección de texto, palabra de lectura, selección de pliego) ya no utilizaGetPixel/SetPixelVpor píxel; el rectángulo se mezcla ahora mediante unTBitmapde 32 bpp fuera de pantalla yScanLineen una sola pasada, eliminando miles de cruces del núcleo GDI por pintado y haciendo fluidas las selecciones grandes FPdfAsn1.TDerReader.ReadIntegerrechaza ahora campos INTEGER de más de 8 bytes (y negativos de 8 bytes cuyo bit de signo requierashl >= 64), devolviendo 0 en lugar de calcular un valor erróneo mediante desplazamientos indefinidos en entradas CMS/PAdES ASN.1ParseTimeStampRespdeja de devolver el nonce de la petición comoTPadesTimestamp.Nonce; hasta que se incorpore el recorrido TSTInfo que verifica el nonce devuelto, el campo permanece en 0 para indicar “no verificado”, sin dar una falsa garantía de vigencia de la respuesta
Corregido (Fixed)
PointsToPixelsdevolvía la entrada sin cambios para cada DPI: el divisor eraPointsPerInch(la constante 72) en lugar del literal 72, colapsando la fórmula aResult := Points; cualquier llamador externo que dimensione puntos→píxeles de dispositivo mediante este helper obtiene ahora la fórmula correctaPoints × PixelsPerInch / 72PdfMaxObjNumcontaba mal en documentos con flujos de objetos (ObjStm de PDF 1.5+): los objetos comprimidos dentro de un/ObjStmno llevan marcadorN 0 obj, de modo que el análisis de bytes en bruto los omitía, y los inyectores que reservanMaxObj+1para objetos nuevos colisionaban con miembros ocultos de ObjStm y corrompían silenciosamente el archivo; el análisis expande ahora primero los flujos de objetos, de modo que todos los números de objeto son visiblesInjectPdfAMarkersya no forja una declaración de conformidad PDF/A en un documento cifrado: PDF/A (ISO 19005-1 §7.1) prohíbe el cifrado, y el inyector copiaba antes el origen con los marcadores aunque la validación inmediatamente siguiente lo rechazaría; cuandoHasEncryptestá establecido, el origen pasa ahora intacto, y la ruta normalTPdf.SaveAsPdfAya elimina el cifrado (saRemoveSecurity) antes de la inyección, por lo que esto solo afecta a los llamadores directosPdfReadStreamBytesrechaza ahora un/Lengthsuperior al fichero completo antes de asignar el búfer de resultado, cerrando una vía de asignación prematura ante longitudes indirectas corruptas u hostiles
Version 2.11.0
Añadido (Added)
- El registro
FPDF_FILEHANDLERde PDFium declara ahora sus seis callbacks (Release,GetSize,ReadBlock,WriteBlock,Flush,Truncate) como campos reales en lugar de comentarios, coincidiendo con la disposición de la cabecera C; los callbacks de transferencia de archivos FFI de XFA (FFI_OpenFile/FFI_EmailTo/FFI_UploadTo/FFI_DownloadFromURL) que devuelven o consumenPFPDF_FILEHANDLERsiguen sin implementarse en la capa de llenado de formularios Pascal, pero el tipo es ahora estructuralmente correcto para cualquier futura ruta de envío/carga XFA - La carga y descarga de la biblioteca PDFium (
LoadLibrary/UnloadLibrary) se serializan ahora con una sección crítica global del proceso, de modo que dos hilos de trabajoTPdfFuture<T>(o un hilo de trabajo compitiendo con el principal) no pueden observar ambosPDFiumLibrary=0y enlazar dos veces, ni liberar la DLL mientras otro hilo está en mitad del enlace - La sección
initialization/finalizationllama ahora aUnloadLibraryal descargar la unidad, garantizando queFPDF_DestroyLibraryse ejecute (join de hilos de trabajo, disposición del isolate de V8, desmontaje de fuentes/caché) en lugar de depender del SO para reclamar la DLL
Cambiado (Changed)
TPdf.SetActivesilencia ahora todas las excepciones durante la carga (antes soloEPdfError), de modo que un error de flujo o una violación de acceso durante la configuración de formulario/página dejanActive=Falseen lugar de un componente cargado parcialmente con estado indeterminado- Codificación de caracteres coherente para los argumentos de claves de metadatos de PDFium:
TPdf.GetMetaTextutiliza ahora la misma división FPCAnsiString/ DelphiUTF8EncodequeGetViewerPreferencey las rutas de carga, en lugar de una conversión directaAnsiString(Tag) - Los helpers
BytesToAnsi,AnsiToBytes,WriteBytesyWriteStrfueron eliminados como duplicados:FPdfCompresslos importa ahora desdeFPdfPdfCommon(sus aliasWriteBytesToStream/WriteAnsiToStreamse retiran) y la sobrecarga redundante deBytesToAnsicon tres argumentos enFPdfPdfase elimina;FPdfAsn1conserva su copia local por diseño, para mantener la capa criptográfica libre de la unidad de la capa de conformidad
Corregido (Fixed)
- Fugas de recursos en
TPdf.LoadDocument(archivo, memoria,TBytes,TMemoryStream, flujo personalizado) yTPdf.CreateDocument: siInitializeFormFilloReloadPagelanzaban una excepción tras el éxito deFPDF_LoadDocument/FPDF_CreateNewDocument, el manejador nativoFPDF_DOCUMENTquedaba filtrado porqueFActiveseguía siendo False en ese punto; cada ruta envuelve ahora la configuración posterior a la carga entry/excepty cierra el documento en caso de fallo, dejando el componente limpiamente inactivo - Diagnósticos de carga de DLL de PDFium mejorados:
CheckLoadLibrarydetectaERROR_BAD_EXE_FORMAT(193) e informa de un desajuste de arquitectura de 32/64 bits apuntando a la compilaciónDLLs/Win32oDLLs/Win64correspondiente, en lugar de retransmitir solo el error genérico del SO;CheckGetProcAddressindica ahora que elpdfium.dlldesplegado es más antiguo que el binding cuando falta una exportación requerida, en lugar del mensaje genérico del SO de procedimiento no encontrado
Version 2.10.1
Corregido (Fixed)
- Estandarización del sid del SignerInfo PAdES: el identificador del firmante ahora utiliza la forma
issuerAndSerialNumberdel RFC 5652 §5.3 (issuer Name + serialNumber, ambos extraídos literalmente del DER del certificado del firmante), sustituyendo la anterior forma no estándarsubjectKeyIdentifier+ placeholder SHA-256 del certificado completo que Adobe Acrobat y otros validadores conformes rechazaban. Un nuevo recorrido DER del TbsCertificate (ExtractIssuerAndSerial) lee la SEQUENCE issuer y el INTEGER serial como bytes TLV en bruto — los números de serie suelen superar el rangoInt64, por lo que el TLV en bruto es obligatorio. La formasubjectKeyIdentifierpermanece únicamente como respaldo cuando falla el análisis del DER del certificado
Cambiado (Changed)
TCmsSignerId.SerialNumber: Int64se ha sustituido porSerialDer: TBytes(el TLV serialNumber en bruto). El constructor CMS incrusta el TLV recortado literalmente enIssuerAndSerialNumber, evitando el desbordamiento deInt64en seriales de CA de 20 bytes (límite superior del RFC 5280 §4.1.2.2)
Version 2.10.0
Añadido (Added)
- Validación a largo plazo PAdES B-LT: cuando
TPadesSignOptions.Level >= plB_LT,SignPadesBytesañade una actualización incremental que porta un diccionario/DSScon el certificado del firmante y la cadena intermedia completa (la raíz autofirmada se excluye según el RFC 5652 §10.2.3), más el marcador/Extensions /ESICde nivel 1 (EN 319 142-1 §5.4.2) - Sello de tiempo de archivo PAdES B-LTA: cuando
Level >= plB_LTAyTsaUrlestá definido, se añade un diccionario de firma Document Time-stamp (/SubFilter /ETSI.RFC3161) cuyo/ByteRangecubre todo el archivo; el marcador ESIC se promueve a nivel 2. Esto completa los cuatro niveles de referencia PAdES (B-B, B-T, B-LT, B-LTA) - Recogida de la cadena de certificados:
ResolveWinSignerahora llama aCertGetCertificateChainy rellenaTPadesResolvedSigner.ChainCertDercon los certificados de CA intermedios, de modo que/DSS /Certsde B-LT transporta cada certificado necesario para validar la firma sin búsquedas externas.CertFreeCertificateContextahora está enlazado, cerrando la fuga de un contexto por firma señalada en v2.8.0 - Flujo de trabajo de integración PDF/A:
TPdf.SignPadesWithPdfAconvierte primero el documento a PDF/A (el nivel más alto que emite la biblioteca hoy) y luego aplica la firma PAdES solicitada — el patrón de contenedor de archivo a largo plazo que recomienda la EN 319 142-1 Anexo A.7
Version 2.9.0
Añadido (Added)
- Sello de tiempo de confianza PAdES B-T:
TPadesSignOptionsgana los camposLevel,TsaUrlyNonce. CuandoLevel >= plB_TyTsaUrlestá definido,SignPadesBytesextrae el valor de firma del CMS construido, solicita un sello de tiempo RFC 3161 sobre él e incrusta el TimeStampToken devuelto como atributo sin firmarsignature-time-stampdel SignerInfo — el paso B-T de tiempo de confianza (EN 319 142-1 §6.3 requisito o) FPdfTsa: cliente RFC 3161 multiplataforma —BuildTimeStampReq(versión 1, messageImprint SHA-256 sobre el valor de firma, nonce, certReq=true),ParseTimeStampResp(acepta PKIStatus 0/1, rechaza 2+, extrae el TimeStampToken ContentInfo literalmente) yRequestTimestamp(flujo único de construcción+POST+análisis).PadesTsaAvailablehabilita la función en plataformas sin backend HTTPFPdfTsaWin: backend WinHttp de Windows, enlazado dinámicamente desde winhttp.dll (cero nuevas dependencias en tiempo de compilación; HTTPS negociado por el almacén de certificados de Windows). Refleja el patrón de enlace dinámico deFPdfCryptoWinFPdfCms:ExtractSignatureValuerecorre un CMS construido para recuperar los octetos de firma en bruto (la entrada de hash de la TSA), yAddSignatureTimestampToCmsreconstruye el ContentInfo con un nuevounsignedAttrs [1](0xA1) que porta el atributo de sello de tiempo. El validador de fase 1 reconoce el resultado como una firma B-T
Version 2.8.0
Añadido (Added)
- Pila de firma PAdES B-B: cuatro nuevos bloques de construcción en Pascal puro/multiplataforma (
FPdfSha256,FPdfAsn1,FPdfCms,FPdfCrypto) más un backend CNG de Windows (FPdfCryptoWin) permiten aTPdf.SignPades/SignPadesToStreamproducir una firma PAdES B-B de extremo a extremo. El certificado del firmante se resuelve por huella SHA-1 desde el almacén “MY” del usuario actual; RSA-PSS (recomendado), RSA PKCS#1 v1.5 y ECDSA se admiten víaNCryptSignHash FPdfSha256: SHA-256 FIPS 180-4 autónomo (Init/Update/Final + asistentes de un solo paso). FPC 3.2.2 no incluye ninguna unidad SHA-2, por lo que la biblioteca posee una para mantener cada ruta de código CMS en un único tipoTSHA256Digestsin bifurcaciones RTLFPdfAsn1: codificador DER (TDerWriter) y lector (TDerReader) que cubren SEQUENCE/SET/OID/INTEGER/OCTET STRING/UTCTime/GeneralizedTime/etiquetas contextuales, con la codificación de longitud definida y el manejo de etiquetas IMPLICIT que CMS requiereFPdfCms: constructor CAdES SignedData (BuildSignedData) que emite los atributos firmados content-type, message-digest y signing-certificate-v2 que la línea base PAdES exige, con signing-time y commitment-type-indication opcionales. El resumen de signedAttrs se calcula sobre la forma etiquetada SET (0x31) y se reemite con la etiqueta IMPLICIT [0] (0xA0) según el RFC 5652 §5.4FPdfCrypto+FPdfCryptoWin: abstracción del backend criptográfico conPadesCryptoAvailable/ResolvePadesSigner, y la implementación de Windows enlazando crypt32.dll / ncrypt.dll dinámicamente (ninguna nueva dependencia de DLL en tiempo de compilación). Las firmas ECDSA se recodifican desde la forma IEEE P1363 r¦s de Windows a la forma DERECDSA-Sig-Valueque CMS requiereSignPadesBytes: inyección de firma a nivel de bytes — reserva una ranura hex/Contentsde ancho fijo, calcula el/ByteRangeque cubre, resume el documento, construye e incrusta el CMS y añade la actualización incremental. El validador (v2.7.0) reconoce la salida como una firma PAdES B-B
Version 2.7.0
Añadido (Added)
- Validador estructural PAdES (ETSI EN 319 142-1 V1.2.1): la nueva unidad
FPdfPadesy el métodoTPdf.ValidatePadesinspeccionan los diccionarios de valor de firma accesibles desde/ByteRange, recorren elSignedDataCMS dentro de/Contentslo suficiente para confirmar la forma desprendida CAdES, y detectan los cuatro niveles de referencia (B-B, B-T, B-LT, B-LTA) además de los diccionarios Document Time-stamp (/SubFilter /ETSI.RFC3161) - Conjunto de problemas a nivel de cláusula PAdES: 26 enumerados
ppei*cubren la aceptabilidad del/SubFilter(adbe.pkcs7.sha1yadbe.x509.rsa_sha1marcados como prohibidos), la cobertura de archivo del/ByteRange, la prohibición de/Cert, la forma delSignedDataCMS (firmante único, eContent desprendido, rango de versión), los atributos firmados requeridos (content-type,message-digest,signing-certificate/v2), los resúmenes prohibidos (MD5, SHA-1), la exclusión mutua de/Reasonvscommitment-type-indication(requisito d), el requisito de tiempo de confianza B-T, el/DSS+/Certs+ marcador ESIC nivel 1 de B-LT, y el Document Time-stamp + marcador ESIC nivel 2 de B-LTA - Inyector DSS:
TPdf.SaveAsPadesDss/SaveAsPadesDssToStreamañaden a una copia del documento una actualización incremental que porta un diccionario/DSS(con arreglos de flujo/Certs,/OCSPs,/CRLs) y el marcador/Extensions /ESIC(nivel 1 o 2), preservando los bytes originales — el paso de incrustación de material de validación B-LT/B-LTA (cláusula 5.4.2) - Fase multiplataforma, sin dependencias: el validador y el inyector son Pascal puro y funcionan en cada IDE admitido (Delphi, Lazarus, FPC, C++Builder); no se requiere ningún backend criptográfico para esta versión, y no se introduce ninguna nueva dependencia de DLL
Version 2.6.0
Cambiado (Changed)
- Desduplicación entre estándares: siete funciones auxiliares duplicadas más (PdfEnclosingObjNum, PdfDictRefNum, PdfExpandObjectStreams, PdfTextStr, ExtractLiteralString, ExtractXmpAttr) se han eliminado de las unidades de norma individuales y consolidado en
FPdfPdfCommon, reduciendo la carga de mantenimiento por copiar-pegar en unas 300 líneas - Calidad de PreflightReport: los problemas de content-class de PDF/X y PDF/E que antes caían en la categoría genérica de “marcador faltante” ahora llevan categorías Content/Metadata/Security precisas y recomendaciones específicas de cláusula (~15 enumerados en ambas normas)
- Cobertura de pruebas PDF/E y PDF/R: seis enumerados más con cobertura cero obtuvieron pruebas positivas (
pveiLzwForbidden,pveiJavaScriptForbidden,pveiFormFieldsForbidden,pveiEmbeddedFilesForbidden,pvriBadHeader,pvriProhibitedInfoEntry) - Corrección de build de Lazarus:
Tests.PdfVT(una unidad DUnitX exclusiva de Delphi añadida en v2.5.x) ahora se excluye del proyecto Lazarus para restaurar la compilación
Version 2.5.3
Añadido (Added)
- Completitud del OutputIntent (PDF/X-4 §6.2.4):
pvviOutputIntentSchememarca un OutputIntent cuyo/Sno es/GTS_PDFX;pvviOutputIntentMissingIdentifiermarca un/OutputConditionIdentifierfaltante - Exención de Reference XObject para PDF/VT-2 (§6.2.2):
pvviReferenceXObjectForbiddenya no se activa para un archivoPDF/VT-2, que puede usar legalmente Reference XObjects sobre una base X-5g/5pg - Validación de caracteres de la boundary MIME (RFC 2046 §5.1.1):
vtmviBoundaryInvalidCharmarca una boundary cuyos caracteres caen fuera del conjunto bchars o cuya longitud supera 70
Corregido (Fixed)
InjectPdfVTMarkersahora escribe Info/CreationDatey/ModDatedesde las opciones de guardado, de modo que el archivo producido pasaValidatePdfVTCompliancesin un falsopvviInfoModDateMismatch(el inyector antes reescribía las fechas XMP pero dejaba obsoletas las fechas del diccionario Info)
Version 2.5.2
Añadido (Added)
- Consistencia del Info
/ModDate(§6.3 NOTE 2, base PDF/X-4):pvviInfoModDateMismatchmarca un/ModDatedel diccionario Info que, tras la normalización de fecha PDF a fecha XMP, no es igual axmp:ModifyDate - Conformidad de bloques integrados PDF/VT-2s (Anexo A.2): el validador MIME ahora ejecuta
ValidatePdfVTComplianceen cada parteapplication/pdfintegrada y marca un cuerpo no-PDF/VT víavtmviInlinePdfNotPdfVT
Version 2.5.1
Añadido (Added)
- Validación del fragmentado DParts (ISO 16612-2 §6.5 Tabla 4):
pvviDPartsBadChunkingmarca un arreglo/DPartscuyos sub-arreglos no finales no tienen exactamente 8192 entradas o cuyo último sub-arreglo cae fuera de 1..8192 - Consistencia del RecordLevel entre flujos (Anexo A.2): el validador MIME PDF/VT-2s ahora extrae el
/RecordLevelde cada PDF integrado y marca desacuerdos víavtmviRecordLevelMismatch, complementando la comprobación NodeNameList existente - Indicaciones de objetos gráficos recurrentes (§6.7):
pvviGtsScopeInvalidValuemarca un/GTS_Scopefuera de {SingleUse, Record, File, Stream, Global, Unknown};pvviGtsScopeRecordWithoutRecordLevelmarca/Recordsin un/RecordLevel;pvviGtsXidNotUuidmarca un/GTS_XIDque no es una URI uuid: RFC 4122;pvviGtsEnvMissingmarca un/GTS_Envfaltante cuando/GTS_Scopees Stream o Global (§6.7.4) - Detección de referencias adelantadas MIME (Anexo A.2):
vtmviForwardReferencemarca un PDF integrado que cita un nombre de archivo (vía/EF /F) no introducido por una parte de archivo adjunto anterior en el flujo
Corregido (Fixed)
ExtractNodeNameListFromPdfyExtractRecordLevelFromPdfenFPdfPdfvtMimeresolvieron un error de un-desplazamiento recurrente en el que el desplazamiento en base 1 devuelto porAnsiFindKeyse trataba como un desplazamiento de byte absoluto en el PDF expandido
Version 2.5.0
Añadido (Added)
- Metadatos Document Part (DPM) de PDF/VT (ISO 16612-2 §6.6):
TPdfVTSaveOptionsganóDpmEntriesyDpmTargetpara que un writer pueda adjuntar un diccionario/DPMal nodo DPart sintetizado, con validación de nombres de clave frente a la regla de prefijo de segunda clase del Anexo E y a las reglas NMTOKEN / unicidad / formaGTS_Manageddel §6.6 en el lado del validador - Intercambio por flujo PDF/VT-2s (Anexo A): la nueva unidad
FPdfPdfvtMimeproporcionaBuildPdfVT2sStreamyValidatePdfVT2sStreampara la envoltura MIMEmultipart/mixedque transporta bloques PDF/VT integrados más perfiles ICC adjuntos, con la regla de orden del encabezadoX-PDFVT-Stream-version: 1y la comprobación de consistenciaNodeNameListentre flujos TPdf.ValidatePdfVTahora realiza un recuento con autoridad de acciones JavaScript víaFPDFDoc_GetJavaScriptActionCount, complementando el escaneo de nombre/JavaScripta nivel de bytes
Corregido (Fixed)
- Corrección del
Trappedde PDF/VT sobre la base PDF/X-4: el valor de enumeradoptvUnknownse elimina (PDF/X-4 prohíbe/Unknown),ptvUnspecifiedse normaliza a/Falseal escribir (un/Trappedfaltante también está prohibido), y un nuevo problemapvviTrappedInvalidmarca un valor ausente oUnknown ValidatePdfVTComplianceahora expande los flujos de objetos (PdfExpandObjectStreams) antes de escanear, de modo que un diccionario catalog, OutputIntent o Metadata almacenado dentro de un ObjStm comprimido (PDF 1.5+, típico de los productores PDF/X-4) es accesible para las búsquedas a nivel de bytes
Cambiado (Changed)
- PDF/VT-1 ahora hereda las prohibiciones de contenido PDF/X-4 completas:
pvviAcroFormForbidden(/AcroFormo/XFA),pvviAdditionalActionsForbidden(catalog/AA),pvviMissingTrimBoxypvviReferenceXObjectForbidden(Reference XObject, solo X-5g/5pg) - Desduplicación entre estándares:
BuildDictObj,IccComponentCount, el perfil ICC sRGB incorporado (GetSrgbIccProfile),PdfTextStr,PdfEnclosingObjNum,PdfDictRefNumyPdfExpandObjectStreamsse promovieron de copias locales triplicadas enFPdfPdfa/FPdfPdfx/FPdfPdfvta un único hogar canónico enFPdfPdfCommon; el literal ICC de 3144 bytes ahora existe exactamente una vez en la base de código
Version 2.4.0
Corregido (Fixed)
InjectPdfUaMarkersya no descarta la referencia/Infodel trailer en una base de cross-reference-stream: la función localSourceTrailerInfoRef(que carecía del fallback de xref-stream) ha sido reemplazada por la compartidaPdfSourceTrailerInfoRef(promovida desde la copia de PDF/A que ya contaba con el fallback desde v2.0.0)- La función compartida
PdfReadStreamBytesahora maneja referencias indirectas/Length N G R(importada desde la copia local de PDF/A), por lo que los validadores PDF/VT, PDF/R y PDF/E ya no leen incorrectamente ni omiten los flujos de metadatos XMP generados por herramientas que utilizan Length indirecto (Acrobat, Ghostscript)
Cambiado (Changed)
- Deduplicación entre estándares: las copias locales de
PdfReadTrailerenFPdfPdfayFPdfPdfx, las copias locales deSourceTrailerInfoRefenFPdfPdfayFPdfPdfua, y la copia local dePdfReadStreamBytesenFPdfPdfahan sido eliminadas — las versiones compartidas deFPdfPdfCommonse aplican ahora en todas partes; esto elimina aproximadamente 330 líneas de código duplicado y evita el trabajo de mantenimiento para mantener sincronizadas las copias - Reducción de la deuda de pruebas en PDF/X: siete enums de content-class que antes no tenían cobertura ahora cuentan con pruebas positivas (
pvxiLzwForbidden,pvxiJavaScriptForbidden,pvxiFormFieldsForbidden,pvxiAdditionalActions,pvxiEmbeddedFilesForbidden,pvxiMissingTrimBox,pvxiTrappedNotSet)
Version 2.3.0
Cambiado (Changed)
- Continúa la reducción de la deuda de pruebas en PDF/A: tres enums más sin cobertura ahora cuentan con pruebas positivas;
pvaiForbiddenRenderingIntent(§6.2.9) marca un nombre de rendering-intent no estándar en un content stream;pvaiJpeg2000Violation(§6.2.2) marca una imagen JPXDecode con/NumComponentsfuera de {1,3,4} en el Part 2;pvaiInlineImageLzwForbidden(§6.1.10) marca una imagen incrustada que utiliza el filtro LZW en el Part 2
Version 2.2.0
Cambiado (Changed)
- Pruebas de regresión de flujo de referencias cruzadas: el método existente
Validate_XrefStreamTrailer_DetectsConformanceahora también verifica que se resuelva la referencia/Metadatadel catálogo y se lea la propiedad XMPpdfaid:parten una base de flujo de referencias cruzadas (no solo/Root+/ID). Una nueva pruebaInjectPdfA_XrefStreamBase_RoundTripsprotege la ruta del flujo de referencias cruzadas del inyector agregada en la versión v2.0.0. Dos pruebas estándares cruzadas (PdfE_XrefStreamBase_NotRejectedAsUnparsable,PdfR_XrefStreamBase_NotRejectedAsUnparsable) verifican que los validadores PDF/E y PDF/R ya no rechacen archivos PDF de flujo de referencias cruzadas como no analizables - Cierre de deuda técnica de pruebas en PDF/A:
Validate_MinimalPdf_FlagsRequiredMarkersasegura que un PDF mínimo básico activepvaiMissingPdfAIdentifier,pvaiMissingOutputIntent,pvaiMissingIccProfile,pvaiMissingXmpMetadataypvaiMissingXmpDates— cerrando la brecha de simetría con los validadores PDF/E y PDF/X, que ya contaban con pruebas equivalentes. Dos enumerados más con cobertura cero han obtenido pruebas positivas:pvaiUnembeddedFontypvaiSubsetMissingCidSet
Version 2.1.0
Corregido (Fixed)
- PDF/E quedó fuera inadvertidamente de la corrección del flujo de referencias cruzadas de la versión v2.0.0: tanto
InjectPdfEMarkersyValidatePdfEComplianceseguían llamando aPdfReadTrailersinAcceptXrefStream, por lo que el inyector PDF/E fallaba silenciosamente en salidas PDF 1.5+ (el comportamiento predeterminado deSaveAsCopyde pdfium). Ambos puntos de llamada ahora pasanTrue - La alternativa de flujo de referencias cruzadas compartida de
PdfReadTrailerahora incluye la protección/Type /XRefque las copias locales de PDF/A y PDF/X ya tenían, de modo que un desplazamientostartxrefcorrupto que apunte a un diccionario no relacionado falle limpiamente en lugar de ser interpretado erróneamente como el trailer - El resolutor de referencia indirecta de
/LangenValidatePdfUaCompliance(v2.0.0) no era accesible:PdfFindObjDictsolo busca diccionarios<<, pero un objeto de cadena/Langes(...)o<...>sin diccionario. Se ha reemplazado por un escaneo directo del cuerpo del objeto que localiza el token de cadena
Cambiado (Changed)
- Se han eliminado de
FPdfPdfayFPdfPdfuasiete funciones auxiliares duplicadas inactivas (PdfStructureBytes, PdfHasName, PdfCountName, BuildStreamObj) que eran copias idénticas en bytes de las versiones compartidas enFPdfPdfCommon— ahora las versiones compartidas se aplican en todas partes medianteuses
Version 2.0.0
Corregido (Fixed)
- Fallo silencioso multiestándar: la función auxiliar compartida
PdfReadTrailer(utilizada por los inyectores y validadores de marcadores PDF/UA, PDF/X, PDF/VT y PDF/R) ahora acepta un parámetroAcceptXrefStreamy recurre al diccionario de objetos del flujo de referencias cruzadas cuando no está presente la palabra clavetrailer(PDF 1.5+). Anteriormente, la salida deSaveAsCopyde pdfium (que utiliza un flujo de referencias cruzadas) provocaba que todos los inyectores de marcadores fallaran silenciosamente: los bytes de origen se copiaban sin cambios y la llamada seguía devolviendo éxito. El validador PDF/R-1.0 (cuya base PDF 2.0 siempre es un flujo de referencias cruzadas) era prácticamente inútil. La implementación madura del validador PDF/A se ha adaptado a la función auxiliar compartida para que todos los estándares se beneficien - El escaneo del diccionario de trailer en
InjectPdfUaMarkerseInjectPdfAMarkersahora utiliza la funciónPdfDictEndcon reconocimiento de profundidad en lugar de una simple búsqueda de>>, por lo que un trailer que contenga un diccionario anidado (por ejemplo,/Encrypt << ... >>) ya no se corta antes de una entrada/Infofinal
Cambiado (Changed)
TPdf.ValidatePdfUaahora suprime el indicador general a nivel de bytespvuaiFontNotEmbeddedcuando el modelo de objetos preciso de PdfiumpvuaiPdfiumFontNotEmbeddedya se ha activado, de modo que el informe preliminar ya no incluye dos filas casi duplicadas de "incrustar fuentes" para el mismo defectopvuaiLangInvalidFormat(§7.2) ahora resuelve una referencia indirecta/Lang(N 0 R) a su objeto de cadena y valida el contenido, por lo que una etiqueta de idioma referenciada indirectamente ya no es un punto ciego
Version 1.99.0
Corregido (Fixed)
pvuaiLangInvalidFormat(§7.2) ya no da paso libre a las cadenas/Langcodificadas en hexadecimal: los pares UTF-16BE (con un BOMFE FF) y las cadenas hexadecimales ASCII puras ahora se decodifican y se someten a la misma comprobación gramatical BCP 47 que las cadenas literales(...), de modo que se detecta un/Langhexadecimal mal formado mientras que uno conforme (por ejemplo, un UTF-16BEen-US) ya no corre el riesgo de ser marcado
Cambiado (Changed)
pvuaiFontMissingToUnicode(§7.21.7) ahora exime a/MacExpertEncodingjunto con/WinAnsiEncodingand/MacRomanEncoding, coincidiendo con las cuatro condiciones de exención que enumera la cláusula
Version 1.98.0
Añadido (Added)
pvuaiNeedAppearancesTrue(§7.18.4) marca un AcroForm cuyo indicador/NeedAppearanceses true, por lo que las apariencias de los widgets no se bloquean de forma fiable y la tecnología de asistencia no puede asociarlas con el árbol de estructura. Adaptado del validador de PDF/A y restringido a la presencia de/AcroFormpara reducir el área de escaneo
Cambiado (Changed)
- Regresión del corpus veraPDF: se conectaron el par pass+fail de Reference-XObject de la §7.20 y los pares pass+fail de CharSet/CIDSet de subconjunto de la §7.21.4.2 en
Live_Corpus_ValidatePdfUaMatchesConformance. Las muestras de paso de valor prohibido de ToUnicode de la §7.21.7 y de clip de medio de la §7.18.6.2 también se conectaron como protecciones contra falsos positivos (sus muestras de fallo utilizan diseños de diccionario que el escaneo a nivel de bytes no detecta, por lo que solo se conecta el lado de paso) - La lista de aserciones de ruta de paso del corpus obtuvo 15 nuevas protecciones de cero falsos positivos, por lo que cada comprobación activa de estructura y a nivel de bytes
pvuai*se ejercita ahora contra muestras conformes (anteriormente solo unas 30 de las 60 incidencias activas estaban protegidas). La protección depvuaiLangInvalidFormatse omitió deliberadamente porque el comprobador a nivel de bytes marca de forma conservadora las cadenas/Langcodificadas en hexadecimal que no puede decodificar
Version 1.97.0
Corregido (Fixed)
- Robustecimiento de
ValidatePdfUaStructureElements: el recorrido de la cadena principal deEnclosingTableahora lleva un contador de saltos (limitado por el número de elementos), de modo que un ciclo deParentIndexmal formado en una matriz de elementos de estructura sintética ya no puede colgar al llamador. La asignación de la matriz de identificadores de contenido marcado deValidatePdfUaPageContentTaggingahora está limitada a un millón de entradas, lo que evita una asignación de varios GB en caso de unMarkedContentIDmal formado o malicioso
Cambiado (Changed)
- El comentario de documentación del enumerado
pvuaiOrderedListMissingListNumberingahora describe con precisión lo que hace la comprobación: marca un elementoLcuyo valor deListNumberingestá fuera del conjunto de la Tabla 347 de ISO 32000-1 (un atributo ausente no se marca). El comentario anterior daba a entender que también detectaba listas ordenadas a las que les faltaba el atributo, lo cual no hace la implementación - Las dos muestras de fallo del corpus por discrepancia de WMode
7.21.3.3-t02ahora están conectadas enLive_Corpus_ValidatePdfUaMatchesConformance— desde la versión 1.95.0, el flujo CMap se infla con FlateDecode, por lo que la comparación entre diccionario y contenido ahora se realiza en un lado legible. Se ha eliminado el comentario obsoleto “no conectado”
Version 1.96.0
Añadido (Added)
- Consistencia entre estándares:
TPdf.ValidatePdfUaobtiene dos comprobaciones adaptadas del validador de PDF/A.pvuaiAnnotationFlagsViolation(§7.18.1) marca una anotación no exenta que lleva el indicador Hidden / Invisible / NoView, lo que interrumpe el flujo de lectura de la tecnología de asistencia.pvuaiActionTargetMissing(§7.18.5) marca una acción GoToR / URI / SubmitForm a la que le falta su clave de destino requerida (/F+/D, /URI, /F), lo que deja el enlace inutilizable para la tecnología de asistencia
Corregido (Fixed)
- Fusión del árbol de estructura entre páginas: el bucle de acumulación de
AllElemsenTPdf.ValidatePdfUaahora reubica elParentIndexde cada elemento desde la matriz local de la página a la matriz fusionada. Sin esto, los elementos secundarios de la página 2 conservaban un índice local de la página que apuntaba a la sección de la página 1, corrompiendo silenciosamente cada comprobación dependiente de ParentIndex (estructura de tablas/listas, recuento de elementos secundarios H de la §7.4.4, EnclosingTable) - RoleMap parsing:
PdfReadRoleMapPairsya no finaliza todo el escaneo de claves/valores cuando un valor es una referencia indirecta (N 0 R) o una matriz ([...]) — ambas formas válidas de RoleMap según ISO 32000-1 14.8.5.1. Ahora simplemente omite esa entrada (Continue) en lugar de hacer unBreak, eliminando falsos positivos depvuaiRoleMapUnresolveden tipos asignados después de una entrada indirecta o de matriz
Cambiado (Changed)
FPdfPreflightReport: 18 valores activos deTPdfUaValidationIssueque anteriormente caían en la categoría comodín de “marcador faltante” y recomendación ahora llevan categorías precisas (Structure / Content / Metadata / Security) y recomendaciones específicas de la cláusula. También se corrigió la errata depuaNone / pua1→pucNone / puc1enPDFSpecComplianceMatrix.md
Version 1.95.0
Cambiado (Changed)
- Pase de robustez y recuperación de
TPdf.ValidatePdfUa: la comprobaciónpvuaiCMapWModeMismatchde la §7.21.3.3 y la comprobaciónpvuaiToUnicodeForbiddenValuede la §7.21.7 ahora inflan los flujos de CMap / ToUnicode comprimidos conFlateDecodeantes de escanear (anteriormente solo se evaluaban los flujos no comprimidos, un falso negativo conocido). Los asistentes compartidosPdfInflate/PdfReadAndDecodeStreamse promovieron deFPdfPdfa/FPdfPdfxaFPdfPdfCommonpara que cada unidad de conformidad comparta una sola copia
Añadido (Added)
pvuaiSubsetCharSetEmpty(§7.21.4.2) marca unFontDescriptorde subconjunto Type 1 que lleva una clave/CharSetcuyo valor de cadena está vacío — elpvuaiSubsetMissingCharSetexistente solo detectaba una clave faltante. Un/CIDSetvacío no se marca, ya que una fuente sin CIDs puede llevar legítimamente un mapa de bits vacío
Version 1.94.0
Añadido (Added)
- La auditoría de segunda pasada de
TPdf.ValidatePdfUacerró seis lagunas de ISO 14289-1 surgidas de una revisión cláusula por cláusula y un reescanero de las API nativas de Pdfium ya integradas pero no utilizadas por la ruta de PDF/UA:pvuaiHeadingFormatInvalid(§7.4.3) marca etiquetas de encabezado definidas por el usuario que comienzan con H pero llevan separadores, espacios o números romanos en lugar de dígitos arábigos puros;pvuaiMissingDocumentOutline(§7.17, debería) marca un documento de varias páginas que no lleva ningún esquema de marcadores (los documentos de una sola página están exentos);pvuaiStructElementLangInvalid(§7.2) marca un valor de/Langdel elemento de estructura que no es una etiqueta BCP 47 válida;pvuaiWidgetMissingPrintField(§7.14 / §7.18.4) marca un elemento de estructura Widget al que le falta el propietario del atributo PrintField;pvuaiLinkNotInStructureTree(§7.18.5) marca un documento cuyas anotaciones/Subtype /Linkno están expuestas como elementos de estructura Link; ypvuaiPdfiumAnnotationMissingContentsjunto conpvuaiPdfiumLinkMissingContents(§7.18.1 / §7.18.5) añaden un escaneo preciso de anotaciones del modelo de objetos de Pdfium que exime a las anotaciones ocultas, fuera del crop-box, Popup y Widget, eliminando los falsos positivos de la heurística a nivel de bytes, que no puede leer los indicadores/Fo/Rect
Version 1.93.0
Añadido (Added)
TPdf.ValidatePdfUaahora superpone una pasada del modelo de objetos de Pdfium sobre el inspector a nivel de bytes, reflejando la arquitectura de la ronda 7 de PDF/A: recorre los objetos de texto de cada página a través deFPDFTextObj_GetFont→FPDFFont_GetIsEmbedded(pvuaiPdfiumFontNotEmbedded, §7.21.4) y escanea cada carácter a través deFPDFText_HasUnicodeMapError(pvuaiPdfiumUnicodeMapError, §7.21.7) yFPDFText_GetUnicode(pvuaiPdfiumNotDefGlyph, §7.21.8) — siendo más preciso que las heurísticas a nivel de bytes, que solo se activan cuando no hay ningún programa de fuentes presente o no aparece ningún/ToUnicodeen absoluto. El recorrido realiza un cortocircuito en three niveles: el bucle de página finaliza cuando los tres problemas de la capa Pdfium ya se han establecido, el bucle por objeto finaliza en la primera fuente no incrustada, y el escaneo de caracteres omite la pasada de.notdefcuando ya se alcanzó unUnicodeMapError. PDF/UA era el último validador de estándares PDF que carecía de una capa de modelo de objetos de Pdfium
Version 1.92.0
Añadido (Added)
- Se creó
Tests.PdfR— el primer archivo de prueba para el validador PDF/R-1 (FPdfPdfr), que cubre la validación de encabezados, prohibición de ObjStm, detección de marcadores de trama y una protección de archivo limpio sin falsos positivos. Las seis suites de prueba de estándares PDF ahora tienen archivos de prueba dedicados: PdfA(80), PdfUa(101), PdfX(7), PdfE(5), PdfVT(15), PdfR(4) = 212 pruebas en total
Version 1.91.0
Añadido (Added)
ValidatePdfEyValidatePdfVTobtuvieron comprobaciones a nivel de contenido que anteriormente solo estaban disponibles en los validadores PDF/A, PDF/UA y PDF/X:pveiLzwForbidden,pveiJavaScriptForbidden,pveiFormFieldsForbidden(solo PDF/E),pveiEmbeddedFilesForbidden(solo PDF/E),pveiOpiForbidden,pvviLzwForbidden,pvviJavaScriptForbidden,pvviEmbeddedFilesForbiddenypvviOpiForbidden.TPdf.ValidatePdfEyTPdf.ValidatePdfVTtambién obtienen una capa de modelo de objetos de Pdfium (pveiPdfiumFontNotEmbedded/pvviPdfiumFontNotEmbedded) que recorre los objetos de texto de la página a través deFPDFFont_GetIsEmbedded, realizando un cortocircuito en la primera fuente no incrustada
Version 1.90.0
Añadido (Added)
TPdf.ValidatePdfXahora superpone una pasada del modelo de objetos de Pdfium sobre el inspector a nivel de bytes: recorre los objetos de texto de cada página a través deFPDFTextObj_GetFont→FPDFFont_GetIsEmbeddedy reporta una fuente no incrustada comopvxiPdfiumFontNotEmbedded— siendo más preciso que la heurística a nivel de bytes, que solo se activa cuando no hay ningún programa de fuentes presente. El recorrido realiza un cortocircuito en la primera fuente no incrustada encontrada
Cambiado (Changed)
- Recorrido del árbol de estructura de
TPdf.ValidatePdfUa: la llamada por página aValidatePdfUaPageContentTagging(que construye un mapa de reclamación de identificadores de contenido marcado y realiza una comprobación cruzada de cada objeto de texto o imagen) ahora se omite en las páginas siguientes una vez que ya se ha encontradopvuaiUntaggedContent— los elementos de estructura se siguen recopilando para las comprobaciones entre páginas (identificador único de nota, secuencia de encabezados), pero el costoso paso de etiquetado de contenido por página se detiene antes
Version 1.89.0
Cambiado (Changed)
- Rendimiento de la capa del modelo de objetos de Pdfium de
TPdf.ValidatePdfA: el recorrido de página/objeto ahora realiza un cortocircuito en tres niveles — el bucle de página finaliza cuando ya se han encontrado todos los problemas aplicables de la capa de Pdfium, el bucle por objeto finaliza cuando se establecen ambos problemas por objeto (incrustación de fuente + transparencia), y el escaneo de caracteres de la página de texto omite la pasada de.notdefcuando ya se alcanzó unUnicodeMapError. Las comprobaciones de disponibilidad de APIAssigned()y las marcas de conformidad se almacenan en caché en booleanos locales una vez antes del bucle en lugar de volver a evaluarse en cada página, objeto o carácter. En un documento grande no conforme, el recorrido ahora puede detenerse después de la primera página en lugar de escanear todas las páginas; en un documento conforme, la sobrecarga por página es menor (sin llamadas repetidas aAssigned)
Version 1.88.0
Añadido (Added)
ValidatePdfXobtuvo ocho nuevos valores deTPdfXValidationIssuea nivel de contenido que cubren las restricciones de intercambio de impresión que PDF/X impone más allá de los marcadores de formato de archivo:pvxiLzwForbidden(/LZWDecode),pvxiJavaScriptForbidden(/JavaScript),pvxiFormFieldsForbidden(/AcroForm//XFA),pvxiAdditionalActions(/AA),pvxiEmbeddedFilesForbidden(/EmbeddedFiles//FileAttachment),pvxiOpiForbidden(/OPI//Alternates),pvxiMissingTrimBox(sin/TrimBoxen ninguna página) ypvxiTrappedNotSet(/Trappedausente o/Unknown). Anteriormente, el validador de PDF/X solo comprobaba los marcadores de XMP/OutputIntent; este es su primer paso a nivel de contenido. Se agregaron los asistentes compartidosPdfStructureBytes/PdfHasName/PdfCountNameaFPdfPdfCommonpara que todas las unidades de conformidad puedan utilizarlos
Version 1.87.0
Añadido (Added)
- La validación PDF/UA ahora cubre las reglas de fuentes compuestas del apartado 7.21.3 de la norma ISO 14289-1:
pvuaiCidSystemInfoMismatchmarca las fuentes Type0 cuyo CMap incrustado y el CIDFont descendiente discrepan enRegistry/Orderingo cuyoSupplementdel CIDFont supera el del CMap;pvuaiCMapNotEmbeddedmarca los CMaps referenciados por nombre (comoEncodingoUseCMap) que no son CMaps predefinidos de la Tabla 118 de ISO 32000-1; ypvuaiCMapWModeMismatchmarca los CMaps incrustados cuyoWModeen el diccionario difiere del WMode en el contenido del flujo
Corregido (Fixed)
- La verificación
pvuaiCidFontMissingCidToGidMapdel apartado 7.21.3.2 omitía los diccionarios CIDFontType2 cuyo par clave/valorSubtypeestaba separado por una nueva línea; ahora también marca un valor de nombreCIDToGIDMapdistinto deIdentity
Version 1.86.0
Añadido (Added)
- La validación PDF/UA ahora cubre las reglas de codificación TrueType del apartado 7.21.6 de la norma ISO 14289-1:
pvuaiTrueTypeEncodingInvalidmarca las fuentes TrueType no simbólicas cuyaEncodingestá ausente o no es niMacRomanEncodingniWinAnsiEncoding(directamente o a través deBaseEncoding), ypvuaiSymbolicTrueTypeEncodingmarca las fuentes TrueType simbólicas que llevan un nombre deEncodingno estándar
Version 1.85.1
Cambiado (Changed)
- La verificación de orden de tabulación del apartado 7.18.3 de la norma ISO 14289-1,
pvuaiMissingTabsOrder, ahora se ejecuta página por página: cada página que contenga anotaciones debe declarar/Tabs /Sen su propio diccionario de página, de modo que una página hermana conforme ya no enmascara a una página que no lo declara
Version 1.85.0
Añadido (Added)
- La validación PDF/UA ahora distingue los formularios XFA dinámicos de los estáticos según el apartado 7.15 de la norma ISO 14289-1:
pvuaiXfaDynamicmarca los formularios cuya configuración XFA establecedynamicRenderenrequired
Cambiado (Changed)
- El antiguo indicador candidato para cualquier XFA,
pvuaiXfaPresent, queda retirado y ya no se emite (el XFA estático cumple con el apartado 7.15); el valor de enumeración se conserva por compatibilidad con la API
Version 1.84.0
Añadido (Added)
- La validación PDF/UA ahora detecta contenido real sin etiquetar requerido por el apartado 7.1 de la norma ISO 14289-1:
pvuaiUntaggedContentmarca los objetos de texto e imagen renderizados que no están reclamados por el árbol de estructura de la página (mediante sus IDs de contenido marcado) ni marcados como Artefacto - Nuevos asistentes a nivel de página
GetPageContentMarkInfosyValidatePdfUaPageContentTaggingcon el registroTPdfPageContentMarkInfopara uso directo
Version 1.83.0
Añadido (Added)
- La validación PDF/UA ahora aplica el modelo de encabezados del apartado 7.4.4 de la norma ISO 14289-1:
pvuaiHeadingModelMixedmarca los documentos que mezclan la etiqueta genéricaHcon encabezados numeradosH1..Hn, ypvuaiHeadingMultipleInNodemarca los nodos de estructura que contienen más de un encabezado hijoH
Version 1.82.0
Añadido (Added)
- La validación PDF/UA ahora resuelve el RoleMap requerido por el apartado 7.1 de la norma ISO 14289-1:
pvuaiRoleMapRemapsStandardmarca las entradas del RoleMap que redefinen un tipo de estructura estándar, ypvuaiRoleMapUnresolvedmarca los tipos de estructura no estándar utilizados cuya cadena RoleMap está ausente, tiene referencias colgantes o es cíclica — las cadenas indirectas que alcanzan un tipo estándar se aceptan, y las entradas de RoleMap no utilizadas nunca se juzgan - Nuevos asistentes
PdfUaIsStandardStructType,PdfReadRoleMapPairs(con decodificación de escapes de nombre PDF#hh) yValidatePdfUaRoleMapUsagepara uso directo
Version 1.81.0
Añadido (Added)
- La validación PDF/UA ahora cubre el etiquetado de listas de la norma ISO 32000-1 requerido por el apartado 7.6 de la norma ISO 14289-1:
pvuaiListStructureInvalidmarca los elementos LI que están fuera de un contenedor L y las partes Lbl/LBody que están fuera de un elemento LI, al tiempo que acepta listas anidadas y el uso legítimo de Lbl dentro de los elementos Note y BibEntry
Version 1.80.0
Añadido (Added)
- La validación PDF/UA ahora cubre el etiquetado de tablas de la norma ISO 32000-1 requerido por el apartado 7.5 de la norma ISO 14289-1:
pvuaiTableStructureInvalidmarca las celdas TH/TD fuera de una fila TR y las filas o grupos de filas fuera de su contenedor Table;pvuaiTableHeaderMissingScopemarca las celdas de encabezado cuya relación no es determinable ni mediante un atributo Scope ni mediante una asociación Headers/ID; ypvuaiTableHeadersUndefinedIdmarca las referencias Headers en documentos que no definen ningún ID de elemento de estructura TPdfStructureElementexpone los atributos de tablaScope,HasHeaders,HeadersIds,ColSpanyRowSpan, resueltos durante el recorrido del árbol de estructura
Cambiado (Changed)
- El recorrido del árbol de estructura ahora lee todos los atributos de diseño y de tabla en un único paso sobre los diccionarios de atributos de cada elemento, en lugar de un escaneo por atributo
Version 1.79.1
Añadido (Added)
- Se migró el ejemplo
AnnotationsLaba Lazarus y C++Builder, uniéndose al ejemplo de consola de Delphi existente
Corregido (Fixed)
TPdf.CreateAnnotationpodía generar un error “Cannot set attachment points” en anotaciones de marcado que utilizan puntos cuadráticos (Resaltado, Subrayado, Tachado, Ondulado) porque la nueva anotación aún no tenía un espacio cuadrático para reemplazar; ahora adjunta el primer espacio cuadrático en su lugar
Version 1.79.0
Añadido (Added)
- Nuevo ejemplo de consola Delphi
AnnotationsLab: crea anotaciones de Texto, Resaltado, Cuadrado y Círculo, las guarda en un archivo PDF, luego vuelve a cargar el archivo y enumera la lista de anotaciones de la página
Version 1.78.0
Añadido (Added)
- Nuevo
TPdf.MeasureTextyTPdf.MeasureTextWidth: miden el ancho y la altura renderizados de una cadena para una fuente y tamaño determinados (unidades de usuario de PDF, 1 unidad = 1/72 pulgada) sin agregar contenido a una página, lo que permite la lógica de diseño y ajuste de palabras utilizandoAddText; es proporcionado por la unidad independienteFPdfMeasurecomo un ayudante de clase - Nuevo
TPdf.WrapText: un ajuste de palabras codicioso basado enMeasureTextWidthque divide el texto en espacios y empaqueta palabras en líneas que no exceden un ancho determinado (unidades de usuario de PDF); una palabra sola y larga que sobrepase el límite obtiene su propia línea (sin rupturas dentro de la palabra), devolviendo las líneas envueltas como una matriz
Version 1.77.0
Añadido (Added)
ValidatePdfAha ganado tres nuevos valores deTPdfAValidationIssueque cubren las cláusulas anteriormente calificadas como “NO” o “reader behaviour” (comportamiento del lector) en la auditoría de brechas anterior (ordinales agregados, valores existentes sin cambios):pvaiPdfiumNotDefGlyph(PDF/A-2 6.2.11.8 — un carácter que se resuelve como Unicode 0 sin un error de asignación, el síntoma de tiempo de ejecución de una referencia de glifo.notdef; detectado a través de la capa del modelo de objetos Pdfium),pvaiWordBreakMissing(Nivel A 6.8.3.2 — un flujo de contenido de cadena que muestra más de 20 caracteres sin espacio, lo que probablemente sea una violación de palabras combinadas; heurística general que evita los falsos positivos en CJK), ypvaiLinkActionMissingTarget(6.6.3 — una acción GoToR/URI/SubmitForm a la que le falta su clave de objetivo de visualización para que el lector no pueda presentarla)
Version 1.76.0
Añadido (Added)
ValidatePdfAobtuvo tres nuevos valoresTPdfAValidationIssue(ordinales agregados, valores existentes sin cambios):pvaiNameNotValidUtf8(PDF/A-2/3 6.1.8 — un token/BaseFonto/FontNameque contiene bytes ≥ 0x80 que no forman UTF-8 válido),pvaiInlineImageLzwForbidden(PDF/A-2/3 6.1.10 — una imagen en línea en un flujo de contenido de página utiliza el filtro LZW o Crypt), ypvaiTrueTypeDifferencesForbidden(6.3.7 Cor.2 — una fuente TrueType no simbólica cuyo diccionario Encoding lleva/Differences)
Version 1.75.0
Añadido (Added)
ValidatePdfAobtuvo tres nuevos valores deTPdfAValidationIssue(ordinales agregados, valores existentes sin cambios):pvaiIntegerImplementationLimit(PDF/A-2/3 6.1.13 — un token numérico que excede el límite de un entero con signo de 32 bits de 2,147,483,647),pvaiBlendModeNotWhitelisted(PDF/A-2/3 6.2.10 — un valor/BMfuera del conjunto de modos de mezcla estándar de ISO 32000-1 §11.3.5; complementa alpvaiTransparentColorSpacede PDF/A-1 que solo permite Normal/Compatible), ypvaiHexStringOddDigits(6.1.6 — una cadena hexadecimal<...>con un número impar de dígitos hexadecimales)
Version 1.74.0
Añadido (Added)
ValidatePdfAobtuvo tres nuevos valores deTPdfAValidationIssue(ordinales agregados, valores existentes sin cambios):pvaiPermissionsViolation(6.1.12 — un diccionario/Permsque lleva/DigestLocation,/DigestMethodo/DigestValuejunto a/DocMDP),pvaiTransActionForbidden(PDF/A-2 6.5.1 — una acción de transición Trans, detectada a través del patrón de diccionario de acción/S /Transpara evitar coincidencias falsas con/Transparency), ypvaiPdfiumObjectTransparency(PDF/A-1 6.4 — un objeto de página lleva transparencia real segúnFPDFPageObj_HasTransparency, ampliando la capa del modelo de objetos de Pdfium introducida en v1.73.0 para atrapar efectos de modo de mezcla/máscara suave que el escaneo de nombres a nivel de bytes puede pasar por alto)
Version 1.73.0
Añadido (Added)
TPdf.ValidatePdfAahora superpone una pasada del modelo de objetos de Pdfium sobre el inspector a nivel de bytes: recorre los objetos de texto de cada página a través deFPDFPage_GetObject→FPDFTextObj_GetFont→FPDFFont_GetIsEmbeddedy reporta una fuente renderizada no incrustada comopvaiPdfiumFontNotEmbedded(ISO 19005 6.3.4), y carga cada página de texto para escanearFPDFText_HasUnicodeMapErrory reporta un mapeo Unicode roto comopvaiPdfiumUnicodeMapError(6.3.8). Estas son comprobaciones que el inspector a nivel de bytes no puede hacer — solo ve tokens de nombres, no identificadores de fuentes resueltos o estado de mapeo por carácter — y se fusionan en el resultado a nivel de bytes. La función independiente a nivel de bytesValidatePdfACompliancepermanece sin cambios
Version 1.72.0
Añadido (Added)
ValidatePdfAobtuvo cinco nuevos valores deTPdfAValidationIssue(ordinales agregados, valores existentes sin cambios):pvaiNeedsRenderingPresent(PDF/A-2 6.4.2 — el catálogo no debe llevar/NeedsRendering),pvaiDestOutputProfileRef(PDF/A-3 6.2.3 — un OutputIntent no debe llevar/DestOutputProfileRef),pvaiEmbeddedFileMissingUF(PDF/A-3 6.8 — una especificación de archivo con/EFtambién debe llevar/UF),pvaiXmpPacketBytesAttr(6.7.5 — el encabezado del paquete XMP no debe llevar el atributo obsoletobytes=oencoding=), ypvaiAnnotationToggleNoView(PDF/A-2 6.3.2 — el bit ToggleNoView de/Fde la anotación, valor 512, está prohibido)
Version 1.71.0
Cambiado (Changed)
ValidatePdfUaahora generapvuaiOrderedListMissingListNumbering(ISO 14289-1 7.6): el rastreador del árbol de estructura resuelve el atributo de diseñoListNumberingen cada elementoLmediante la API de atributos de Pdfium y marca cualquier valor fuera del conjunto de la Tabla 347 de ISO 32000-1 (Decimal,UpperRoman,LowerRoman,UpperAlpha,LowerAlpha,None,Circle,Disc,Square). No se marca la ausencia de un atributo, ya que la lista puede no estar ordenada; esto cierra la última brecha residual de ISO 14289-1 registrada al final de la ronda 5
Version 1.70.0
Añadido (Added)
ValidatePdfUaobtuvo cuatro nuevos valores deTPdfUaValidationIssue(ordinales añadidos al final, valores existentes sin cambios):pvuaiSubsetMissingCidSet(ISO 14289-1 7.21.4.2 — unFontDescriptorde subconjunto CID debe declarar/CIDSet),pvuaiToUnicodeForbiddenValue(7.21.7 — un CMap de ToUnicode no debe mapear ningún código aU+FEFFoU+FFFE; los flujos sin comprimir se escanean en busca de las formas de salida<FEFF>/<FFFE>),pvuaiLangInvalidFormat(7.2 —/Langdebe ser una etiqueta válida RFC 1766 / BCP 47; una gramática permisiva aceptaen,en-US,zh-Hans,es-419y marca los valores que claramente no cumplen), ypvuaiOrderedListMissingListNumbering(7.6 — conservado para que la API esté completa; el validador aún no lo genera porque distinguir de forma fiable las listas ordenadas de las no ordenadas necesita el valor del atributoListNumbering, que el rastreador del árbol de estructura no expone)
Version 1.69.0
Añadido (Added)
ValidatePdfUaobtuvo dos nuevos valores deTPdfUaValidationIssue(ordinales añadidos al final, valores existentes sin cambios):pvuaiWidgetOutsideForm(ISO 14289-1 7.18.4 — un elemento de estructura Widget debe estar anidado dentro de un elementoForm; el rastreador del árbol de estructura ahora verifica el tipo de elemento padre directo de cada Widget) ypvuaiSubsetMissingCharSet(7.21.4.2 — unFontDescriptorde subconjunto Tipo 1 debe declarar/CharSet, identificado por el prefijo de seis letras+en el nombre del subconjunto en/FontName)
Version 1.68.0
Añadido (Added)
ValidatePdfUaobtuvo dos nuevos valores deTPdfUaValidationIssue(ordinales añadidos al final, valores existentes sin cambios):pvuaiUriActionIsMap(ISO 14289-1 7.18.5 — un diccionario de acción URI no debe llevar/IsMapcon valortrue, ya que deshabilita el destino de enlace accesible) ypvuaiHeadingSequenceViolation(7.4.2 — los encabezados numerados deben comenzar enH1y una secuencia descendente no debe omitir un nivel intermedio, por ejemplo,H1→H3es una infracción). La comprobación de encabezados es la primera regla PDF/UA a nivel de árbol de estructura en el validador:ValidatePdfUaStructureElementsahora recorre la lista de elementos tipificados y verifica la secuenciaH1…H6(yH7+según 7.4.3) en orden de documento
Version 1.67.0
Añadido (Added)
ValidatePdfUaobtuvo cinco nuevos valores deTPdfUaValidationIssue(ordinales añadidos al final, valores existentes sin cambios):pvuaiLinkMissingContents(ISO 14289-1 7.18.5 — una anotación Link debe llevar una descripción alternativa a través de/Contents),pvuaiAnnotationMissingContents(7.18.1 — cualquier anotación no exenta sin/Contentsdebe tener una descripción alternativa; Popup y Widget están exentas),pvuaiEmbeddedFileMissingName(7.11 — un diccionario de especificación de archivo debe contener/Fy/UF),pvuaiMediaClipMissingAlt(7.18.6.2 — un diccionario de datos de clip de medios debe contener/CTy/Alt), ypvuaiCidFontMissingCidToGidMap(7.21.3.2 — un CIDFont incrustado de Tipo 2 debe contener/CIDToGIDMap)
Version 1.66.0
Añadido (Added)
ValidatePdfUaobtuvo cinco nuevos valores deTPdfUaValidationIssue(ordinales añadidos al final, valores existentes sin cambios):pvuaiRoleMapMissing(ISO 14289-1 7.1 — un documento etiquetado con tipos de estructura no estándar debe llevar un/RoleMap),pvuaiOptionalContentAsKey(7.10 — un diccionario de configuración de contenido opcional no debe llevar la clave de estado automático/AS),pvuaiXfaPresent(7.15 — se marca la presencia de/XFAen AcroForm porque el XFA dinámico está prohibido),pvuaiTrapNetAnnotation(7.18.2 — las anotaciones/TrapNetestán prohibidas), ypvuaiReferenceXObject(7.20 — los XObjects de referencia, identificados por el marcador/Ref, están prohibidos)
Corregido (Fixed)
ValidatePdfUaya no da falsos positivos depvuaiEncryptionPresenten todos los archivos cifrados: PDF/UA permite el cifrado siempre que la clave/Pdel diccionario de cifrado tenga activada la posición del bit 10 (valor 1024), lo que concede acceso a la tecnología de asistencia (7.16). La infracción precisa se notifica ahora mediante el nuevopvuaiEncryptionPBitMissing;pvuaiEncryptionPresentse conserva en la enumeración por compatibilidad de API pero ya no es generado por el validador a nivel de bytes
Version 1.65.0
Añadido (Added)
ValidatePdfAobtuvo cinco nuevos valores deTPdfAValidationIssue(ordinales añadidos al final, valores existentes sin cambios):pvaiCidFontMissingCidToGidMap(ISO 19005-1 6.3.3.2 Cor.2 — un CIDFont incrustado de Tipo 2 debe llevar/CIDToGIDMap),pvaiSubsetMissingCharSet(6.3.5 — unFontDescriptorde subconjunto Tipo 1 debe llevar/CharSet),pvaiSubsetMissingCidSet(6.3.5 — unFontDescriptorde subconjunto CID debe llevar/CIDSet),pvaiWidgetActionForbidden(6.6.1 — una anotación Widget no debe llevar/Ao/AA), ypvaiOptionalContentAsKey(ISO 19005-2 6.9 — un diccionario de configuración de contenido opcional no debe llevar la clave de estado automático/AS, nuevamente relevante porque PDF/A-2 permite contenido opcional)
Version 1.64.0
Añadido (Added)
ValidatePdfAobtuvo ocho nuevos valores deTPdfAValidationIssue(ordinales añadidos al final, valores existentes sin cambios):pvaiHeaderBinaryMarkerMissing(ISO 19005-1 6.1.2 — el encabezado%PDF-x.ydebe ir seguido de un comentario%con al menos cuatro bytes mayores que 127),pvaiExternalStreamRef(6.1.7 — un diccionario de flujo no debe llevar/F,/FFiltero/FDecodeParms),pvaiOutputIntentScheme(6.2.2 — el OutputIntent/Sdebe ser/GTS_PDFA1),pvaiInfoXmpDateMismatch(6.7.3 —CreationDate/ModDatede Info también deben aparecer comoxmp:CreateDate/xmp:ModifyDate),pvaiMarkInfoMissing(6.8.2.2 — el Nivel A requiere/MarkInfocon/Marked true),pvaiAnnotationApDictViolation(6.5.3 Cor.2 — el diccionario/APde anotación debe contener solo/N),pvaiEmbeddedFileMissingAFRelationship(ISO 19005-3 Anexo E.2 — cada especificación de archivo asociada debe llevar/AFRelationship), ypvaiJpeg2000Violation(ISO 19005-2 6.2.8.3 — una imagen JPEG2000 debe declarar 1, 3 o 4 componentes)
Corregido (Fixed)
ValidatePdfAya no da falsos positivos depvaiAnnotationFlagsViolationen documentos que usan un nombre de recurso de fuente de una sola letra, como/Font << /F 5 0 R >>; el escaneo de la bandera/Fahora está condicionado a un contexto de anotación (/Subtypede un tipo de anotación), coincidiendo con el comportamiento documentado (6.5.3)ValidatePdfAahora notifica el requisito de archivo asociado de PDF/A-3 por archivo: un documento se marca solo cuando a un/Type /Filespecincrustado que hace referencia a un flujo incrustado a través de/EFle falta/AFRelationship, en lugar de la comprobación previa de todo el documento de cualquiera o ninguno (ISO 19005-3 Anexo E.2)- Se ha añadido la acción obsoleta
/SetStateal conjunto de acciones prohibidas junto a/SetOCGState, de modo que el nombre de acción de PDF Reference se capture directamente (6.6.1)
Version 1.63.0
Añadido (Added)
- Añadidos
TPdf.MeasureTextyTPdf.MeasureTextWidth: miden el ancho y alto de representación del texto con una fuente y tamaño determinados sin añadir contenido a la página (en unidades de usuario PDF, 1 unidad = 1/72 pulgada), lo que permite calcular disposición y realizar saltos de línea automáticos sobreAddText; proporcionado por la unidad independienteFPdfMeasurecomo class helper
Cambiado (Changed)
- Mejorados
Demo\Delphi\MergePDF,Demo\CBuilder\MergePDFyDemo\Lazarus\MergePDFpara los tres IDE: selección de rango de páginas por archivo, ruta de salida opcional, deduplicación, registro de ejecución, botón de cancelar y resumen de fusión; los marcadores y metadatos se importan desde la primera fuente - Los demos de
CreatePDFpara los tres IDE incluyen ahora una opción «Texto europeo» para escribir texto con acentos en checo, francés, alemán, español, portugués, polaco y turco, con el fin de verificar la selección de fuente y el manejo Unicode (el antiguo ejemploEuropeanTextse ha integrado) - Se eliminaron los ejemplos
ExtractTextPagesyEuropeanText: la funcionalidad de extracción de texto página a página deExtractTextPagesya está cubierta por las opciones de rango de páginas y separador de páginas deExtractText; la representación multilingüe deEuropeanTextse ha integrado enCreatePDF
Version 1.62.2
Corregido (Fixed)
- Se regeneraron los encabezados de C++Builder (
.hpp) para cada versión y plataforma de RAD Studio (Win32/Win64/Win64x); se habían desviado de las fuentes Pascal y dejaban firmas de función obsoletas y unidades faltantes que llegaban a los usuarios de C++Builder a través de la distribución del código fuente
Version 1.62.1
Corregido (Fixed)
- Se restauró la compilación desde código fuente en RAD Studio 12 Athens y anteriores: una asignación de
TArray<Byte>en la ruta de validación de PDF/UA usaba una conversión implícita de matrices exclusiva de Delphi 13 que no compilaba en IDE más antiguos
Version 1.62.0
Añadido (Added)
TPdf.RenderPageThumbnailrenderiza cualquier página por índice en un mapa de bits ajustado a la proporción sin cambiar la página actual del documento, la página cargada ni dispararOnPageChange
Corregido (Fixed)
TPdfThumbnailViewya no controla elPageNumberdel documento anfitrión mientras pinta; antes, cada repintado volvía a cargar páginas, disparabaOnPageChangey descartaba la página de texto, lo que podía alterar unTPdfViewvinculado y provocar bucles de repintado. Ahora las miniaturas se renderizan medianteRenderPageThumbnailsin esos efectos secundarios- La validación de conformidad PDF/X ahora inspecciona documentos con flujos de referencias cruzadas (PDF 1.6, típico de PDF/X-4) y objetos almacenados en flujos de objetos comprimidos, en lugar de informar esos archivos de forma global como no conformes; el marcador
GTS_PDFXVersionse lee tanto en XMP de forma de elemento como de forma de atributo RDF - La validación PDF/R ahora informa
pvriInfoXmpMismatchcuando el diccionario Info y XMP discrepan en Producer o Creator; antes el problema estaba declarado pero nunca se notificaba - Los temporizadores de relleno de formularios ahora se controlan por solicitud, de modo que un documento que ejecuta varios temporizadores a la vez, por ejemplo un intervalo de JavaScript junto al parpadeo del cursor del campo, los conserva todos en lugar de perder todos salvo el más reciente
- El pintado de
TPdfViewy sus métodos públicosRenderPage/RenderTileahora mantienen el bloqueo de renderizado del documento, serializando así frente al renderizado en el hilo de trabajo del mismoTPdf(PDFium no es seguro para varios hilos) - El texto no ASCII escrito en los metadatos de PDF/X, PDF/R y PDF/VT, como los nombres de condición de OutputIntent, Creator y Producer, ahora se codifica como una cadena UTF-16BE según ISO 32000-1 §7.9.2.2 en lugar de UTF-8 en bruto, que los lectores conformes leerían mal
- Los ayudantes de conformidad leen correctamente los flujos de metadatos incrustados cuya
/Lengthes una referencia indirecta, cargan los bytes de origen conReadBufferpara que una lectura corta falle limpiamente, y rechazan un desplazamientostartxrefnegativo en lugar de arriesgar una lectura fuera de rango
Version 1.61.0
Cambiado (Changed)
- Se corrigieron las declaraciones FFI/ABI, lo que puede exigir recompilar código que implementa los callbacks afectados: el callback de relleno de formularios
FFI_OpenFileahora llevacdecl(convención de pila Win32), y el parámetrovaluedeFPDFAnnot_SetStringValueyFPDFAttachment_SetStringValueahora esFPDF_WIDESTRING(UTF-16LE) para coincidir con los encabezados de PDFium - Los callbacks de carga progresiva
FX_FILEAVAIL.IsDataAvailyFX_DOWNLOADHINTS.AddSegmentahora toman desplazamientossize_t, ysize_ttiene ancho de puntero en Free Pascal / Lazarus Win64, donde antes se truncaba a 32 bits, corrigiendo las llamadas API de disponibilidad de datos youtsize_ten FPC Win64
Corregido (Fixed)
- Seguridad de memoria: un use-after-free del temporizador de relleno de formularios al destruir un
TPdfcon un cursor AcroForm activo; un dobleFPDF_CloseDocumenten la ruta de error deImportNPagesToOne; excepciones Pascal que se escapan de los callbacksFPDF_FILEWRITE/FPDF_FILEACCESSa través de la frontera C durante el guardado y la inserción de JPEG; y un desbordamiento entero en la extracción de texto al leer desde un índice inicial hasta el final de la página TPdfFuture<T>ahora entrega de forma fiable su callback de resultado; antes la respuesta casi siempre se descartaba y podía tocar un hilo liberado porque el worker se liberaba a sí mismo antes de que se ejecutara la respuesta en cola- Las salidas de PDF/A, PDF/X, PDF/E, PDF/R, PDF/VT y PDF/UA ahora escriben entradas de referencia cruzada con exactamente 20 bytes, como exige ISO 32000-1 §7.5.4
- La inyección de marcadores de estándares ya no destruye un diccionario cuando la clave eliminada, por ejemplo
/Trapped, era la última entrada, lo que antes se comía el cierre>>y producía un objeto mal formado - Los flujos de perfil ICC de OutputIntent ahora declaran el recuento de componentes
/Nrequerido para PDF/X y PDF/VT, ya presente para PDF/A; los documentos fuente cifrados se descifran antes de inyectar marcadores PDF/X, PDF/E, PDF/R, PDF/VT y PDF/UA, de modo que la salida es válida en lugar de quedar dañada sin avisar - El BOM de xpacket UTF-8 en el XMP generado se emite como bytes exactos, corrigiendo la corrupción en instalaciones de Delphi cuyo código de página ANSI no es Latin-1; los trailers de actualización incremental ahora conservan la referencia
/Infodel documento SaveAscon compresión ya no trunca los flujos cuya/Lengthes una referencia indirecta, y las tablas de referencias cruzadas reconstruidas ahora usan entradas de 20 bytes, números de generación reales y descartan el puntero/Prevobsoleto- La validación de conformidad ahora lee correctamente los marcadores de versión XMP en forma de atributo para PDF/E y PDF/X, de modo que se reconocen los archivos PDF/X-4 serializados como atributos, exige el identificador exacto
PDF/E-1, lee correctamente los flujos de metadatos con/Lengthindirecto y deja de hacer coincidir por error la clave/IDo/StructTreeRootde un elemento de estructura al comprobar el trailer de PDF/UA; unstartxrefmal formado ya no lanza un error de rango TPdfThumbnailView: la última página ya puede alcanzarse con la barra de desplazamiento, la página actual del documento anfitrión se restaura después de pintar las miniaturas y el manejo estándar de mouse-leave vuelve a enviarse- Los mapas de bits de páginas e imágenes en escala de grises ya no se renderizan con una paleta incorrecta;
TPdfViewya no queda con una referencia colgante cuando se libera primero suTPdf - Informes de preflight: HTML se guarda como UTF-8 para coincidir con su charset declarado, y el escape de cadenas JSON produce secuencias
\ucorrectas para caracteres no ASCII en Free Pascal - Compilaciones de trial: el diálogo de recordatorio de trial ahora aparece en lugar de quedar suprimido antes de mostrarse
TPdfStreamAdapterahora rechaza flujos mayores de 4 GiB con un error claro en lugar de truncar silenciosamente la longitud pasada a PDFium
Version 1.60.1
Cambiado (Changed)
- Las demos de AccessibilityReader para Delphi, Lazarus y C++Builder ahora ejecutan la lectura en voz alta sobre
TPdfReadingSession: cada página se ensambla en un único bloque hablado conBuildSpokenTextFromWords, las posiciones de palabras de SAPI alimentanFeedSpokenPosition, y la sesión avanza por las páginas y controla el cursor de palabras de la vista, sustituyendo la orquestación escrita a mano que llevaba cada demo antes - El seguimiento de karaoke a nivel de palabra en las demos ahora también funciona cuando NVDA es el motor de voz:
EstimatePacingmarca el ritmo del cursor de lectura según el tiempo hablado transcurrido, mientras que antes NVDA leía en voz alta sin ningún seguimiento de palabras - Pause y Resume en las demos ahora también funcionan con NVDA:
ResumeRestartsChunkvuelve a hablar la página actual desde el inicio al reanudar, mientras SAPI conserva su pausa y reanudación nativas en el mismo lugar
Version 1.60.0
Añadido (Added)
- Renderizado en vivo para baja visión en
TPdfView: las nuevas opciones de renderizadoreInvertyreNightDuotonerecolorean cada tesela de página renderizada, con inversión total de color o una paleta de duotono nocturno, antes de pintar las capas superpuestas de búsqueda, selección, lectura y cursor de palabras, llevando las transformaciones de color del mapa de bits existente al visor interactivo tanto para diseños de una página como de páginas enfrentadas; al alternar las opciones se repinta de inmediato NightDuotoneInkyNightDuotonePaperconfiguran la paleta nocturna, con valor predeterminado de texto ámbar sobre página negra;reInvertgana cuando se establecen ambas opciones
Version 1.59.0
Añadido (Added)
TPdfReadingSession: un componente de orquestación de lectura en voz alta neutro respecto al motor de voz. Mantiene el cursor de bloque, el cursor de palabra y el estado de reproducción (Play/PlayFrom/Pause/Resume/Stop), avanza por los bloquesTPdfSpokenTextcargados cuando el host informa de que el motor está inactivo medianteTick, traduce los desplazamientos del texto hablado de vuelta a caracteres de página y controla automáticamente el cursor de palabras de unTPdfViewadjunto; el host conecta cualquier motor de voz medianteOnSpeaky los eventos de solicitud de cancelación / pausa / reanudación, así que la biblioteca no enlaza ninguna API de voz por sí mismaFeedSpokenPositionconsume las posiciones de palabras del motor, comoStatus.InputWordPositionde SAPI;EstimatePacingconEstimatedWordsPerMinutemarca el ritmo de motores sin señal de posición;ResumeRestartsChunkvuelve a hablar el bloque actual para motores sin pausa nativaOnChunkChange,OnWordChangeyOnFinishedsolo se disparan ante cambios reales, y una vista adjunta liberada se desacopla automáticamente, de modo que el código anfitrión se mantiene sin parpadeos y a salvo de bloqueos
Version 1.58.0
Añadido (Added)
EstimateSpokenWordIndexestima qué palabra está pronunciando un motor de voz a partir del tiempo transcurrido y de un ritmo de palabras por minuto, dando proporcionalmente más tiempo a las palabras largas, de modo que los motores que no informan de la posición de palabra, como NVDA controller client, también puedan controlar el cursor de lectura a nivel de palabra; la llamada aporta el tiempo transcurrido, así que la rutina no depende del reloj y se puede probar con unit tests
Version 1.57.0
Añadido (Added)
- Ensamblado de texto hablado con mapeo de dos dominios para el seguimiento de la lectura en voz alta:
BuildSpokenTextFromWordsySpokenTextAppendconstruyen la cadena que se entrega a un motor de texto a voz a partir de las cajas de palabras de la página mientras registran una tabla de intervalos, ySpokenToPageChartraduce un desplazamiento hablado informado por el motor, comoStatus.InputWordPositionde SAPI, de vuelta al índice de caracteres de la página, de modo que el seguimiento del resaltado a nivel de palabra siga siendo correcto cuando el texto hablado no es todo el texto de la página, como en regiones omitidas, lectura por unidad o sobrescrituras de pronunciación - Los tipos
TPdfSpokenTextyTPdfSpokenSpantransportan la cadena hablada junto con los intervalos de página de origen a partir de los que se construyó; los desplazamientos sobre separadores insertados se resuelven en la siguiente palabra mapeada y los desplazamientos más allá de los tramos mapeados no informan coincidencia
Version 1.56.9
Añadido (Added)
Demo\Delphi\PreflightReportañade una vista previa del Plan de acción que resume los estándares que no pasan, las prioridades, las siguientes acciones, los códigos de incidencia y las recomendaciones en una lista de remediaciónDemo\Delphi\PreflightReportCliaceptaplanyactionplancomo formato de salida para ejecuciones de un único archivo y por lotes, y escribe la misma lista de remediación en un archivo de texto
Cambiado (Changed)
- Ambos demos Delphi PreflightReport muestran ahora recuentos de estado aprobado / acción / revisión junto al total de estándares y incidencias
Version 1.56.8
Cambiado (Changed)
ViewerInteractionLabincluye ahora controles de salto de página, controles de zoom manual, registro de coordenadas basado en clic conDeviceToPage/PageToDevicey un registro de interacción más claro para comprobaciones de selección, búsqueda, rotación y navegación- Las páginas de readme de
ViewerInteractionLabdocumentan ahora el flujo de interacción añadido en el conjunto de readme de demostraciones localizadas
Version 1.56.7
Añadido (Added)
AccessibilityWorkbenchClirelaciona cada incidencia activada con sus criterios de éxito WCAG 2.1 y el ámbito de cláusulas ISO 14289-1 (PDF/UA-1), y muestra una sección de cobertura de normas en los informesAccessibilityWorkbenchClicalcula una puntuación de accesibilidad de 0 a 100 documentada con una rúbrica de penalización publicada y una banda excelente / bueno / requiere trabajo / pobre, disponible por archivo y como promedio por loteAccessibilityWorkbenchCliaceptafailscore=Npara marcar el análisis como fallido (código de salida 2) cuando cualquier archivo queda por debajo de NAccessibilityWorkbenchCliescribe un log SARIF 2.1.0 cuando el nombre del resumen de lote termina en.sarif, con una regla por tipo de incidencia y etiquetas WCAG 2.1 y PDF/UA para consumo en CI y análisis de códigoAccessibilityWorkbenchCliañade un comandoversionque muestra la versión enlazada de PDFium Delphi Component
Version 1.56.6
Añadido (Added)
IntakeWorkbenchClicalcula un hash forense SHA-256 de cada archivo de entrada (con degradación aunavailableen compiladores sinSystem.Hash) y lo muestra en todos los formatosIntakeWorkbenchCliaceptapasswords=file.txtpara desbloquear temporalmente documentos protegidos por contraseña desde una lista de candidatos, guardando el índice del candidato coincidente sin registrar nunca el texto de la contraseñaIntakeWorkbenchCliaceptacopyto=dirpara dirigir cada archivo auditado a una subcarpeta por nivel de riesgo y convierte así el auditor en un clasificador de recepciónIntakeWorkbenchCliescribe un log SARIF 2.1.0 cuando el nombre del resumen de lote termina en.sarif, con una regla por indicador de riesgo y un resultado por archivo marcado para ingesta en CI y code scanningIntakeWorkbenchCliañade un comandoversionque muestra la versión enlazada de PDFium Delphi Component
Version 1.56.5
Añadido (Added)
IntakeWorkbenchCliahora deriva acciones recomendadas tras la recepción, como accept, request-password, manual-review, quarantine y deduplicate, y expone los recuentos de acciones en los resúmenes por lotesAccessibilityWorkbenchCliahora deriva acciones de remediación recomendadas, como pass-through, remediate-tags, run-ocr, remediate-semantics y manual-review, con recuentos de acciones por lotes que coinciden
Cambiado (Changed)
- Ambos demos CLI de nivel de herramienta muestran ahora la acción recomendada en la salida de consola, texto, HTML, JSON y CSV para que los operadores por lotes puedan encaminar archivos sin depender de posprocesar campos de riesgo o de estado
Version 1.56.4
Corregido (Fixed)
- Leer anotaciones, marcadores o anotaciones de enlaces en un bucle ya no filtra cadenas de texto del elemento anterior: los registros de resultado de
TPdfAnnotation,TBookmarkyTLinkAnnotationse limpian ahora con inicialización consciente de tipos gestionados en lugar de a cero con memoria bruta, de modo que documentos con una gran cantidad de anotaciones textuales ya no inflan memoria en el ciclo de vida de la aplicación - Destruir un
TPdfque había registrado un controladorOnUnsupportedFeatureahora lo desasocia del callback global del proceso de PDFium, de modo que una carga posterior desde otroTPdfsin su propio controlador ya no puede ejecutarse en el componente liberado (use-after-free)
Version 1.56.3
Corregido (Fixed)
AccessibilityWorkbenchCliya no cuenta las páginas en blanco como páginas con orden de lectura heurístico, por lo que los documentos etiquetados con páginas separadoras vacías mantienen su estado de accesibilidad correcto; las páginas sin contenido legible ahora se informan por separado- La detección de encabezados de tabla en
AccessibilityWorkbenchCliya no atribuye a una tabla externa celdasTHpertenecientes a una tabla anidada, y los nombres de campos de formulario y fuentes ahora distinguen mayúsculas y minúsculas para no unir campos distintos - Los inventarios de hosts de URL en
IntakeWorkbenchCliahora eliminan userinfo, consulta y fragmento, de modo que un enlace como[email protected]se asigna al host real y los destinosmailto:también aportan su dominio en lugar de quedarse ocultos IntakeWorkbenchCliescapa el texto entre comillas invertidas en rutas, hosts y nombres de anexos controlados por atacantes en informes Markdown para que el formato no pueda romperse desde dentro de un documento
Cambiado (Changed)
AccessibilityWorkbenchCliinforma los fallos de escaneo de fuentes y campos de formulario como contadores separados, marca fuentes no incrustadas que sí tienen instancias incrustadas y limita listas largas de fuentes con un marcador de truncado explícito- Los resúmenes por lote de
IntakeWorkbenchCliañaden una columna de recuento de anotaciones por adjunto y el censo por página queda limitado a 20000 anotaciones por página con el tope indicado en cada formato
Version 1.56.2
Añadido (Added)
AccessibilityWorkbenchCliahora audita la incrustación de fuentes, los tooltip de campos de formulario, el origen del orden de lectura, los esquemas del documento, la estructura de tablas y listas, el texto alternativo sospechoso y detalles de revisión por página más completos para que los informes por lotes de accessibility identifiquen más objetivos de correcciónIntakeWorkbenchCliahora informa de los límites de escaneo de páginas, acciones launch y remote-go-to, inventarios de host URI, recuentos de anotaciones, funciones de PDFium no admitidas, identificadores de documento duplicados y señales de riesgo ampliadas para la revisión intake automatizada
Cambiado (Changed)
IntakeWorkbenchCliaceptamaxpages=Nen modos de archivo único y por lotes para limitar el escaneo de páginas por documento mientras sigue completando los informes de metadata, attachment, script, XFA, signature y risk
Version 1.56.1
Corregido (Fixed)
- Ahora, al cargar un
pdfium.dllantiguo al que le falta una exportación más reciente, el fallo se produce limpiamente: la ruta de fallo restablece cada punto de entrada de API enlazado, por lo que las comprobacionesAssigned()(por ejemplo enFPDF_GetLastErroroFPDF_GetSecurityHandlerRevision) informan de que la biblioteca no está cargada en lugar de llamar al módulo ya descargado y bloquearse con una infracción de acceso UnloadLibraryahora borra todos los enlaces de API de PDFium, no solo los auxiliares V8 opcionales, por lo que no quedan punteros de función obsoletos después de liberar la DLL
Version 1.56.0
Añadido (Added)
- Cursor de lectura karaoke por palabra en
TPdfView:TrackReadingWordAtasigna el desplazamiento de carácter de la palabra actual de un motor de texto a voz, como SAPIStatus.InputWordPosition, a los cuadros de palabra de la página, resalta la palabra que lo contiene como una superposición independiente sobre el bloque de lectura, la desplaza a la vista y devuelve el índice de palabra para que la palabra hablada se ilumine al avanzar la voz SetReadingWordyClearReadingWordestablecen o borran directamente la palabra resaltada desde unTPdfWordBox; volver a establecer la misma palabra no realiza ninguna operación, de modo que el seguimiento por palabra no hace parpadear la vistaReadingWordColoryReadingWordFollowcontrolan el color del cursor de palabra y si la vista desplaza automáticamente la palabra hablada a la vista
Version 1.55.2
Corregido (Fixed)
- ViewerInteractionLab ahora da más espacio vertical a las filas de la barra de herramientas para que Open PDF, Create Sample, navegación, búsqueda y controles de selección ya no se superpongan con fuentes escaladas
Version 1.55.1
Corregido (Fixed)
- ViewerInteractionLab ahora coloca Prev, Next y Rotate en la segunda fila de la barra de herramientas, evitando la superposición inicial con Open PDF y Create Sample
Version 1.55.0
Añadido (Added)
- Puente de palabra a selección para lectura con selección:
TPdfView.SelectWordBoxySelectWordSpanseleccionan una sola caja de palabra o una secuencia en la misma página desdePageWordBoxesusando sus rangos de caracteres, de modo que la palabra o línea leída también pueda seleccionarse y copiarse WordBoxIndexAtCharIndexasocia un índice de carácter con la caja de palabra que lo contiene y permite el resaltado palabra por palabra mientras avanza el cursor de lectura TTS
Version 1.54.0
Añadido (Added)
- Accesores de relleno de formularios por voz que leen el campo enfocado directamente desde el cursor lógico:
FocusedFormFieldValue,FocusedFormFieldNameyFocusedFormFieldDetailsenTPdfyTPdfViewinforman el valor del campo actual, su nombre legible por humanos, el tooltip/TUcon retroceso a/T, y elTPdfFormFieldInfocompleto, tipo, banderas y opciones, todo lo que una interfaz de voz necesita anunciar al avanzar por un formulario
Corregido (Fixed)
FocusedFormFieldValuelee el campo porFocusedFormFieldIndexen lugar del foco interactivo de pdfium, de modo que un rellenador de formularios guiado por voz obtiene el valor correcto incluso sin cursor visible en pantalla; elFocusedFormFieldTextexistente sigue reflejando el foco de pdfium y no cambia
Version 1.53.0
Añadido (Added)
- Soporte de resaltado a nivel de palabra:
TPdf.PageWordBoxesyTPdfView.PageWordBoxesdividen una página en registrosTPdfWordBox, cada uno con el texto de la palabra, su rango de caracteres y un rectángulo delimitador en coordenadas de página, para que un lector de accesibilidad pueda resaltar cada palabra pronunciada por turno pasando el rectángulo aSetReadingHighlight BuildWordBoxesexpone el paso de tokenización por separado y convierte el texto de la página en cajas de palabras con sus rangos de caracteres
Version 1.52.0
Añadido (Added)
- Los ayudantes de renderizado para baja visión
InvertPdfBitmap,GrayscalePdfBitmapyDuotonePdfBitmapaplican transformaciones de color in situ a un bitmap renderizado de 32 bits, para que un lector de accesibilidad pueda presentar páginas invertidas o en modo oscuro, en escala de grises o con un esquema personalizado de dos colores, por ejemplo un fondo oscuro con texto claro, a usuarios con baja visión - Las transformaciones se ejecutan píxel por píxel y se comportan de la misma manera en VCL y Lazarus/LCL, sin cambiar las dimensiones del bitmap
Version 1.51.0
Añadido (Added)
- Unidades de lectura a nivel de frase para escucha asistida:
TPdf.ReadingUnits,TPdf.DocumentReadingUnitsyTPdfView.ReadingUnitslinealizan el flujo de contenido legible en registrosTPdfReadingUnitordenados y del tamaño de una frase; cada uno transporta el texto que debe pronunciarse junto con su tipo semántico, página, rectángulos de resaltado y etiqueta de idioma, para que una aplicación de lector de pantalla pueda avanzar por una página o por todo el documento una unidad hablada cada vez - Navegación semántica con
NextReadingUnitOfKind, que permite a una interfaz de voz saltar al encabezado, figura, elemento de lista o celda de tabla siguiente o anterior sin recorrer el flujo manualmente BuildReadingUnitsconvierte cualquierTPdfContentFragmentsdirectamente en unidades de lectura: los encabezados y las descripciones de figuras o texto alternativo permanecen completos, mientras que los párrafos se dividen por límites de frase, se conservan los puntos decimales y el cursor de lectura es un índice simple controlado por el llamador
Version 1.50.0
Añadido (Added)
ValidatePdfAahora puede inspeccionar documentos PDF 1.5+ que almacenan el catálogo, el OutputIntent u otros diccionarios dentro de flujos de objetos comprimidos (/Type /ObjStm). Los object stream se descomprimen y se resuelven los objetos que contienen, de modo que tales documentos se validan según sus propios méritos en lugar de notificarse como carentes de sus marcadores PDF/A
Version 1.49.5
Corregido (Fixed)
ValidatePdfAya no notifica como problema la ausencia de una descripciónpdfaExtension:schemas. El esquema del identificador de PDF/A (pdfaid) es bien conocido, por lo que ni veraPDF ni PDF/A-2/-3 exigen una descripción de esquema de extensión para él, y marcar su ausencia provocaba una notificación errónea en todo PDF/A conforme de terceros. Los documentos que la propia biblioteca produce siguen incluyendo la descripción
Version 1.49.4
Corregido (Fixed)
ValidatePdfAahora detecta el nivel de conformidad cuando el identificador de PDF/A se escribe como atributos XML (pdfaid:part="2") en lugar de elementos hijos, de modo que los documentos en forma de atributo ya no se notifican con un nivel desconocido. Esto corrige además una cascada en la que un nivel no detectado hacía que las comprobaciones específicas de cada parte recurrieran a las reglas estrictas de PDF/A-1 y marcaran erróneamente los archivos incrustados y la transparencia que PDF/A-2 y PDF/A-3 permiten
Version 1.49.3
Corregido (Fixed)
ValidatePdfAahora inspecciona los documentos PDF 1.5+ cuyos datos de referencias cruzadas son un cross-reference stream (archivos que no tienen la palabra clavetrailer). El nivel de conformidad, el/IDdel tráiler y los demás marcadores se leen del diccionario del cross-reference stream, de modo que tales documentos se validan según sus propios méritos en lugar de notificarse como totalmente no conformes
Version 1.49.2
Corregido (Fixed)
ValidatePdfAya no notifica un problema espurio de fuente no incrustada en documentos que incrustan todas sus fuentes. La heurística anterior comparaba el número de tokens/FontDescriptorfrente a los programas de fuentes incrustados, pero cada fuente incrustada aporta dos tokens/FontDescriptor(la referencia del diccionario de fuente más el objeto descriptor), por lo que todo archivo con fuentes incrustadas se marcaba erróneamente. La comprobación ahora solo notifica un documento que hace referencia a fuentes pero no incrusta ningún programa de fuente en absoluto, en coherencia con la corrección correspondiente deValidatePdfUa
Version 1.49.1
Corregido (Fixed)
- La salida PDF/A ahora se valida como PDF/A-1b y PDF/A-1a conformes con veraPDF: el flujo del perfil ICC del OutputIntent sRGB incrustado (referenciado por
/DestOutputProfile) declara ahora el recuento de componentes/Nrequerido (3 para el perfil RGB integrado), tal como exige ISO 19005-1 6.2.3.2. Los documentos producidos porSaveAsPdfAfallaban anteriormente la validación estricta de PDF/A-1 porque el flujo del perfil de destino omitía/N; el valor se deriva de la cabecera del perfil ICC, de modo que un perfil CMYK o Gray suministrado por el llamante también recibe el recuento correcto
Version 1.49.0
Corregido (Fixed)
ValidatePdfUaya no notifica una falsa ausencia de identificación XMP en PDF etiquetados conformes: el identificador de PDF/UA (pdfuaid:part),dc:title, las fechas XMP y el/IDdel tráiler se leen ahora de los bytes del documento original en lugar de la copia vuelta a guardar, que omite el flujo XMP/Metadatay, en los archivos con cross-reference-stream, el/IDdel tráiler- Se ha corregido la comprobación de incrustación de fuentes de
ValidatePdfUa, de modo que un documento que incrusta todas sus fuentes ya no se notifica como portador de fuentes sin incrustar; ahora solo se marca un documento que hace referencia a fuentes pero no incrusta ningún programa de fuente en absoluto ValidatePdfUaahora acepta un elemento de estructuraFormulacuyo texto alternativo se suministra medianteActualTexten lugar de una entradaAlt(ISO 14289-1 §7.7), de forma coherente con la regla existente paraFigure
Version 1.48.0
Añadido (Added)
- Selección de texto mediante programación en
TPdfView:SelectTextRange(por página e intervalo de caracteres) ySetSelection(mediante intervalos explícitos por página) seleccionan texto desde el código —por ejemplo, para leer y resaltar un pasaje—; ambos vuelven a pintar y generanOnSelectionChangecuando la selección cambia.SelectionRangeslee la selección actual como intervalos de caracteres por página, ySelectionRectanglesdevuelve sus rectángulos en coordenadas de página para el resaltado personalizado o el desplazamiento hasta la selección
Version 1.47.0
Añadido (Added)
- Navegación entre campos de formulario para el rellenado de formularios mediante voz, tanto en
TPdfcomo enTPdfView:FormFieldTabOrder,FocusedFormFieldIndex,FocusFormField,FocusNextFormField,FocusPreviousFormField,ClearFormFieldFocusyFocusedFormFieldText. Estos desplazan un cursor lógico de campo por los campos de widget de la página en el orden de tabulación (volviendo al principio al llegar a los extremos), de modo que un lector asistivo pueda recorrer el formulario, anunciar cada campo medianteFormFieldInfo[Index].AlternateName(la información sobre herramientas /TU) y rellenarlo medianteFormField[Index] - Evento
TPdfView.OnFormFieldFocusChange, que se genera cuando el cursor de campo se desplaza (llevando consigo el índice del nuevo campo, o -1 cuando se ha borrado)
Version 1.46.0
Añadido (Added)
- Flujo de contenido de lectura asistida para escucha:
TPdf.ReadableContent,TPdf.ReadablePageContent,TPdf.DocumentReadableContentyTPdfView.ReadableContentdevuelven una lista ordenada de elementos semánticosTPdfContentFragment, cada uno con el texto hablado (glifos reales, oActualText/Alt para las figuras), un tipo de fragmento (encabezado con nivel, párrafo, figura, elemento de lista, celda de tabla, enlace, texto sin formato), el idioma, la página en base 1 y un rectángulo de resaltado del bloque junto con uno por cada línea. Los PDF etiquetados se linealizan en el orden lógico de lectura a partir del árbol de estructura; las páginas sin etiquetar recurren al orden de renderizado, de modo que cualquier documento pueda leerse en voz alta - Resaltado de lectura sincronizado en
TPdfView:SetReadingHighlight,ClearReadingHighlighty la propiedad publicadaReadingHighlightColorresaltan el bloque que se está leyendo en cada momento, por encima de las capas de búsqueda y de selección - Nuevos tipos públicos
TPdfContentFragment,TPdfContentFragments,TPdfReadableContent,TPdfContentFragmentKindyTPdfReadingOrderSource, así como el nuevo método auxiliarClassifyStructType
Version 1.45.0
Añadido (Added)
ValidatePdfUaahora también recorre el árbol de estructura etiquetada en tiempo real y notifica tres violaciones de contenido de alta confianza que el análisis a nivel de bytes no puede detectar: un elementoFiguresin entrada Alt ni ActualText (ISO 14289-1, 7.3), un elementoFormulasin atributo Alt (7.7) y un elementoNoteque carece de un identificador único (7.9). Tres nuevos valores deTPdfUaValidationIssueexponen estos casos:pvuaiFigureMissingAlt,pvuaiFormulaMissingAltypvuaiNoteMissingId. El recorrido del árbol se omite en documentos no etiquetados- Nuevo método auxiliar público
ValidatePdfUaStructureElementsque aplica las reglas del árbol de estructura a una lista de elementos plana (tal como la devuelveTPdf.StructureElements), de modo que las comprobaciones pueden ejecutarse o someterse a pruebas unitarias sin necesidad de cargar un documento completo
Version 1.44.5
Corregido (Fixed)
- La comprobación de incrustación de fuentes de
ValidatePdfA(pvaiFontNotEmbedded, ISO 19005-1, 6.3.4) ahora también detecta fuentes simples no incrustadas que carecen de/FontDescriptor, en particular las 14 fuentes estándar Type 1 (Helvetica, Times, Courier, entre otras) para las cuales PDF/A exige la incrustación sin ninguna exención. Anteriormente, una fuente de este tipo pasaba desapercibida; la comprobación ahora también contabiliza los diccionarios de fuentes simples (/Type1,/TrueType,/MMType1) frente a los programas de fuentes incrustados, siguiendo el mismo criterio que la corrección de PDF/UA en 1.44.3
Version 1.44.4
Corregido (Fixed)
ValidatePdfVTahora rechaza árboles DPart mal formados de ISO 16612-2 §6.5 cuando/DPartses un arreglo plano de referencias en lugar del array of arrays requerido, o cuando un leaf DPart repite su página/Startcomo/Endaunque el rango contiene una sola páginaValidatePdfVTahora valida los nombres de/NodeNameListcomo valores XML NMTOKEN después de expandir los escapes#xxde PDF name, de modo que los nombres de nivel de jerarquía no válidos se reportan mediantepvviMissingDPartRooten lugar de aceptarse como una estructura DPart utilizable
Version 1.44.3
Corregido (Fixed)
- La comprobación de incrustación de fuentes de
ValidatePdfUa(pvuaiFontNotEmbedded, ISO 14289-1, 7.21.4) ahora también detecta fuentes simples no incrustadas que carecen de/FontDescriptor, en particular las 14 fuentes estándar Type 1 (Helvetica, Times, Courier, entre otras) para las cuales PDF/UA no concede ninguna exención de incrustación. Anteriormente, una fuente de este tipo pasaba desapercibida y un documento que la usara podía declararse conforme; la comprobación ahora también contabiliza los diccionarios de fuentes simples (/Type1,/TrueType,/MMType1) frente a los programas de fuentes incrustados
Version 1.44.2
Corregido (Fixed)
ValidatePdfVTahora deja un marcadorpdfvtid:GTS_PDFVTVersionpresente pero no reconocido comopvcUnknownen lugar de degradarlo apvcNone. Esto mantiene distinguibles cadenas inválidas a nivel de archivo comoPDF/VT-2sfrente a documentos que no llevan ningún marcador PDF/VT; PDF/VT-2s se identifica por el encabezado del flujo MIME en ISO 16612-2 Annex A, no por el marcador XMP de un archivo PDF- La comprobación de
/DPartRootahora valida con más rigor la semántica del árbol de ISO 16612-2 §6.5:/DPartRootNodey/NodeNameListdeben describir la profundidad real de DPart, los enlaces padre de DPart deben formar un árbol,/Starty/DPartsson mutuamente excluyentes, y el/DPartde cada página debe apuntar al DPart hoja que la cubre en el mismo orden depth-first que el árbol de páginas
Version 1.44.1
Corregido (Fixed)
SaveAsPdfVTahora escribe una Document Part Hierarchy mínima de ISO 16612-2 §6.5 cuando el PDF de origen no tiene un/DPartRootutilizable. El árbol generado enlaza cada página mediante/DPart, conserva una jerarquía válida existente y deja los metadatos de destinatario/DPM más ricos al flujo de trabajo llamadorValidatePdfVTahora valida la estructura DPart utilizable, lee valores XMP de PDF/VT tanto desde atributos RDF como desde texto de elementos, y exige la combinación exacta entre PDF/VT y la base PDF/X: PDF/VT-1 requiere PDF/X-4, mientras que PDF/VT-2 requiere PDF/X-4p, PDF/X-5g o PDF/X-5pgTPdfVTSaveOptions.Conformance = pvc2ya no escribe marcadores PDF/VT-2 de archivo único inválidos. El escritor de archivo único normaliza la salida a PDF/VT-1 porque PDF/VT-2 requiere semántica de conjunto de archivos
Version 1.44.0
Añadido (Added)
ValidatePdfUaahora también notifica infracciones de PDF/UA detectables en el contenido, además de los marcadores del formato de archivo: un programa de fuente que no está incrustado (ISO 14289-1, 7.21.4), una fuente que carece de un CMap/ToUnicodecuando no hay ninguna codificación de fuente simple exenta (7.21.7), y un documento que contiene anotaciones pero no declara ningún orden de tabulación de página/Tabs /S(7.18.3)- Tres nuevos valores de
TPdfUaValidationIssue—pvuaiFontNotEmbedded,pvuaiFontMissingToUnicodeypvuaiMissingTabsOrder— son expuestos porValidatePdfUay en el informe de comprobación previa. Son heurísticas aproximadas concebidas como indicaciones de comprobación previa y no como una verificación completa de ISO 14289-1
Version 1.43.1
Corregido (Fixed)
SaveAsPdfUaahora aplica las entradas de catálogo obligatorias según ISO 14289-1, 7.1 —/ViewerPreferences/DisplayDocTitle truey/MarkInfo/Marked true/Suspects false— incluso cuando el documento fuente ya proporciona esos diccionarios con valores ausentes o contradictorios. Anteriormente, los marcadores se inyectaban únicamente cuando los diccionarios estaban completamente ausentes, por lo que un documento fuente que, por ejemplo, tuviese un/ViewerPreferencessinDisplayDocTitleo un/MarkInfocon/Marked falseproducía un archivo no conforme- Las claves existentes en un diccionario
/ViewerPreferenceso/MarkInfopreexistente se conservan, y un diccionario proporcionado como referencia indirecta se resuelve antes de aplicar las claves obligatorias
Version 1.43.0
Añadido (Added)
ValidatePdfAahora aplica las reglas de PDF/A-2 / PDF/A-3 para los archivos incrustados y asociados y para el texto de nivel U. Los archivos incrustados siguen rechazándose en PDF/A-1; en PDF/A-3 se señala un archivo incrustado que carezca de la clave/AFRelationshiprequerida (ISO 19005-3 Anexo E), mientras que los adjuntos PDF/A-2 se permiten (su propia conformidad no se verifica de forma recursiva). Un nuevo problemapvaiUnicodeMappingMissinginforma de un documento PDF/A-2u o PDF/A-3u cuyas fuentes no incluyen ninguna asignación/ToUnicode(ISO 19005-2 6.2.11.7). La transparencia y el contenido opcional solo siguen señalándose en PDF/A-1
Version 1.42.0
Añadido (Added)
- PDF/A-2 (ISO 19005-2) y PDF/A-3 (ISO 19005-3) ahora se admiten en los tres niveles de conformidad — a, b y u — mediante
SaveAsPdfA,ValidatePdfAy la propiedadPdfAConformance. La enumeraciónTPdfAConformanceincorporapac2a,pac2u,pac3aypac3u(PDF/A-1 no tiene nivel u). El guardado escribe los valorespdfaid:part(2 o 3) ypdfaid:conformance(A, B o U) correspondientes, conservando el subtipo de OutputIntentGTS_PDFA1que ISO 19005-2 mantiene por compatibilidad. Una solicitud de nivel A se sigue degradando al nivel B correspondiente (para cualquier parte) cuando el documento carece de la estructura etiquetada que ese nivel exige
Version 1.41.0
Añadido (Added)
ValidatePdfAahora detecta infracciones de PDF/A a nivel de contenido que la inyección de marcadores no puede reparar, además de los marcadores estructurales que ya informaba: JavaScript y otras acciones prohibidas, acciones adicionales (/AA), archivos incrustados,LZWDecode, transparencia (soft masks y transparency groups), contenido opcional (/OCProperties), subtipos de anotación prohibidos (FileAttachment, Sound, Movie, 3D, Screen),/NeedAppearances truey/XFAde AcroForm, fuentes cuyos descriptores carecen de un programa de fuente incrustado, y una declaración de nivel A realizada sin la estructura etiquetada que exige ISO 19005-1 6.8. Las comprobaciones de transparencia, contenido opcional y archivos incrustados solo se aplican a PDF/A-1 (estas funciones están permitidas en PDF/A-2 y PDF/A-3). Nuevos valores deTPdfAValidationIssueexponen cada caso; los valores existentes no cambian
Version 1.40.3
Corregido (Fixed)
SaveAsPdfAahora elimina cualquier cifrado del documento de origen antes de producir la salida PDF/A. ISO 19005-1 6.1.3 prohíbe la clave/Encryptdel trailer, pero la ruta de guardado conservaba anteriormente el gestor de seguridad del origen, por lo que guardar un documento cifrado como PDF/A producía un archivo cifrado y no conforme. El guardado PDF/A ahora descifra primero el documento. Los documentos sin cifrar no se ven afectados
Version 1.40.2
Corregido (Fixed)
- Se impidió que
SaveAsPdfAemitiera una falsa declaración de conformidad PDF/A nivel A. Cuando se solicita el nivel A (pac1a) pero el documento de origen carece de los marcadores de estructura etiquetada que exige ISO 19005-1 6.8 — un/StructTreeRooten el catálogo y un diccionario/MarkInfocon/Marked true— el archivo guardado ahora se identifica como el nivel B correspondiente (pdfaid:conformance=B) en lugar de afirmar el nivel A. La salida PDF/A-1b puramente visual no se ve afectada
Version 1.40.1
Corregido (Fixed)
- Se reforzó la validación de cumplimiento de la versión de PDF para que la acción
SetOCGState(set-optional-content-group-state) se reconozca como una función de PDF 1.5. Guardar en un destino PDF 1.2, 1.3 o 1.4 que contenga una acciónSetOCGStateahora se rechaza para cumplir con ISO 32000-1 (Table 198); anteriormente, dicha acción podía pasar a la salida de versión inferior. La acciónSetStatede PDF 1.2, distinta y obsoleta, sigue aceptándose a partir de PDF 1.2
Version 1.40.0
Añadido (Added)
- Se enlazó la API
FPDFPageObj_AddExistingMark()de PDFium, que adjunta una marca de contenido existente a un objeto de página. Cuando objetos de página consecutivos comparten la misma marca, el PDF guardado los fusiona en una única marca que los abarca a todos; los objetos no consecutivos reciben copias independientes - Se enlazó la API
FPDFTextObj_SetFontSize()de PDFium para cambiar el tamaño en puntos de un objeto de texto existente, complementando el enlace ya disponible deFPDFTextObj_GetFontSize()
Cambiado (Changed)
- Se actualizaron las DLL de tiempo de ejecución de PDFium incluidas (Win32 y Win64, compilaciones estándar y V8) a la instantánea de PDFium del 2026-06-02
Version 1.39.53
Cambiado (Changed)
- Se cambiaron las demostraciones Delphi
PDFViewer,SplitViewyMultiPageViewerpara abrir documentos en modoZoom to Pagede forma predeterminada - La renderización inicial ahora ajusta la página completa a la superficie del visor antes de que el usuario elija un nivel de zoom manual
- Se actualizaron
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos de versión del instalador para informar 1.39.53
Version 1.39.52
Cambiado (Changed)
- Se mejoró
Demo\Lazarus\CreatePDFpara que el ejemplo introductorio genere ahora un PDF de dos páginas con vector paths, table content, embedded image, text annotation, rotated text y un document-building walkthrough más claro - Se añadieron páginas
README.htmlmás pulidas para todas las carpetas de demos de Delphi, C++Builder y Lazarus, reemplazando el último README de demo solo en texto por una guía legible en el navegador - Se actualizaron
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos de versión del instalador a 1.39.52
Version 1.39.51
- Se mejoraron los resúmenes por lotes de
Demo\Delphi\PreflightReportClicon totales de estado estándar para resultados Pass, Action required y Review en los estándares seleccionados - Las filas por fichero ahora incluyen recuentos de action-required y review en los resúmenes TXT / HTML / JSON / CSV, lo que facilita revisar artefactos de CI sin abrir cada informe generado
- Se actualizaron
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos de versión del instalador a 1.39.51
Version 1.39.50
- Se mejoró el modo de lote por directorio de
Demo\Delphi\PreflightReportCli:batchdir=folderahora recopila las rutas PDF descubiertas, las ordena y luego genera informes en un orden estable - Los escaneos recursivos de directorios ahora producen un orden de informes y filas de resumen reproducible, mientras que el procesamiento explícito de
batch=list.txtsigue conservando el orden del fichero de lista - Se actualizaron
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos de versión del instalador a 1.39.50
Version 1.39.49
- Se mejoraron los resúmenes por lotes de
Demo\Delphi\PreflightReportClipara registrar run settings: tipo de origen, ruta de origen, estado recursivo, directorio de salida, formato del informe, estándares seleccionados y modofailon= - Los resúmenes JSON ahora incluyen un objeto
run, los resúmenes TXT y HTML muestran una sección de run settings, y las filas CSV repiten las mismas columnas de auditoría para hojas de cálculo y CI pipelines - Se actualizaron
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos de versión del instalador a 1.39.49
Version 1.39.48
- Se mejoró batch output naming de
Demo\Delphi\PreflightReportClipara que duplicate input file names que comparten unoutdir=no sobrescriban sus generated reports entre sí - Batch runs ahora agregan sufijos
-2,-3y posteriores cuando un generated report path ya fue asignado en la misma ejecución, y summaries registran el collision-safe report path final - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.48
Version 1.39.47
- Se mejoraron los batch summaries de
Demo\Delphi\PreflightReportClipara que las salidas TXT y JSON incluyan ahora aggregate totals de total files, processed files, failed files, issues y coincidenciasfailon= - CSV summaries permanecen como una row table pura para consumers existentes, mientras HTML summaries siguen mostrando las mismas aggregate metrics en el dashboard header
- Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.47
Version 1.39.46
- Se mejoró
Demo\Delphi\PreflightReportCliconsummary=batch.html/.htmpara que batch runs puedan emitir un browser-readable dashboard junto a los TXT / CSV / JSON manifests - HTML summaries muestran metricas de total, processed, failed, issue y coincidencia
failon=, y luego listan cada input con report links, status, counts y error text - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.46
Version 1.39.45
- Se mejoró
Demo\Delphi\PreflightReportCliconbatchdir=folderyrecursivepara que los scripts puedan escanear PDF folders directamente sin escribir primero un list file - Directory batch mode reutiliza el comportamiento de
outdir=,summary=,standards=yfailon=de list-based batch mode; non-recursive escanea solo la folder seleccionada yrecursiveincluye subfolders - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.45
Version 1.39.44
- Se mejoró
Demo\Delphi\PreflightReportCliconsummary=batch.csv|json|txtpara que batch runs puedan emitir un machine-readable manifest junto a los per-file reports - Batch summaries incluyen cada input path, report path, status, standard count, passed count, issue count, estado de coincidencia
failon=y error text para CI jobs y scripts externos - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.44
Version 1.39.43
- Se mejoró
Demo\Delphi\PreflightReportCliconbatch=list.txtyoutdir=reportspara que los scripts generen preflight reports para una lista de ficheros PDF en una sola ejecución - Batch mode omite líneas vacías y líneas de comentario
#, deriva cada report name.preflight.<ext>desde el PDF de entrada, continúa tras errores por fichero y resume processed y failed files antes de volver - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.43
Version 1.39.42
- Se mejoró
Demo\Delphi\PreflightReportCliconfailon=none|issues|action|reviewpara que CI jobs puedan convertir preflight results generados en exit codes deterministas - La CLI ahora devuelve exit code 2 cuando una regla
failon=seleccionada coincide después de generar el report file y el optional attached-report PDF, mientras que runtime errors siguen devolviendo exit code 1 - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.42
Version 1.39.41
- Se mejoró
Demo\Delphi\PreflightReportCliconattach=output.pdfpara que un preflight report generado pueda incrustarse como document-level attachment en una nueva PDF copy - La CLI conserva en disco el TXT / HTML / Markdown / JSON / CSV report file generado y rechaza adjuntarlo de vuelta al input PDF path original, reduciendo el riesgo de sobrescritura accidental
- Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.41
Version 1.39.40
- Se agregó
Demo\Delphi\PreflightReportCli, un Delphi console companion para generarFPdfPreflightReportde forma scriptable sin abrir un viewer - La CLI admite creación de sample sin argumentos, además de input / output arguments, optional password, formatos de salida
text/html/md/json/csv, ystandards=filtering para PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R y PDF/VT - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.40
Version 1.39.39
- Se mejoró
FPdfPreflightReportconTPdfPreflightReport.ToMarkdownySaveMarkdownToFilepara exportar preflight reports como Markdown adecuado para issue tracker - Se actualizaron los ejemplos
PreflightReportde Delphi, C++Builder y Lazarus con Markdown preview switching y acciones Save MD junto al workflow TXT / HTML / JSON / CSV existente - Se actualizaron
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos de versión del instalador para informar 1.39.39
Version 1.39.38
- Se mejoraron los ejemplos
SecurityAuditde Delphi, C++Builder y Lazarus con exportación de informes de auditoría JSON junto al flujo existente TXT save / copy - El informe JSON contiene
format,generatedAt,summary,findingCounty filas estructuradasfindingscon campos severity, area y detail - Se actualizaron
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos de versión del instalador para informar 1.39.38
Version 1.39.37
- Se mejoró
FPdfPreflightReportconTPdfPreflightReport.ToCsvySaveCsvToFilepara que preflight reports puedan exportarse como spreadsheet-friendly CSV - Se actualizaron los samples Delphi, C++Builder y Lazarus
PreflightReportcon CSV preview switching y Save CSV actions junto al workflow existente TXT / HTML / JSON - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.37
Version 1.39.36
- Se mejoró
FPdfPreflightReportconTPdfPreflightReport.IssueCategoryCountsy los tipos reutilizablesTPdfPreflightIssueCategoryCountyTPdfPreflightIssueCategoryCountspara agrupar marker-level issues por category - Se actualizaron
TPdfPreflightReport.ToText,ToHtmlyToJsonpara que la salida generada de PreflightReport incluya issue-category count summaries junto con per-standard rows y detailed issue recommendations - Se actualizó
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.36
Version 1.39.35
- Se renombró el sample ampliado
PrintDialogaPrintPreferencesen Delphi, C++Builder y Lazarus, de modo que el demo name ahora coincide con su workflow de PDF author print preferences, N-up printing, odd / even filtering, grayscale, cell border y duplex mapping - Se actualizó
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.35
Version 1.39.34
- Se mejoró
Demo\Delphi\PrintPDFcon carga de PDF mediante arrastrar y soltar, y se documentó el workflow existente deDemo\CBuilder\PrintPDFjunto con los ejemplos PrintPDF de Delphi y Lazarus - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.34
Version 1.39.33
- Se agregó
Demo\CBuilder\SplitView, completando SplitView sample matrix en Delphi, C++Builder y Lazarus - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.33
Version 1.39.32
- Se agregó
Demo\Lazarus\SplitView, llevando side-by-side PDF comparison a Lazarus con two- or three-pane layouts, active-view navigation, synchronized commands, zoom presets y rotation - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.32
Version 1.39.31
- Se agregó
Demo\Lazarus\PrintPDF, llevando el standard PDF print workflow a Lazarus con preview navigation, page ranges, copies, collate mode, progress y cancellation - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.31
Version 1.39.30
- Se agregó
Demo\Lazarus\FontProperties, completando la matriz del ejemplo FontProperties en Delphi, C++Builder y Lazarus - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.30
Version 1.39.29
- Se agregó
Demo\CBuilder\FontProperties, llevando la inspección de metadatos indexados de caracteres y fuentes a C++Builder junto al ejemplo de Delphi - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.29
Version 1.39.28
- Se agregó
Demo\Delphi\ExtractTextPages, completando la matriz del ejemplo de extracción de texto por página en Delphi, C++Builder y Lazarus - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.28
Version 1.39.27
- Se agregó
Demo\Lazarus\PrintDialog, completando el PrintDialog sample matrix en Delphi, C++Builder y Lazarus - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.27
Version 1.39.26
- Se agregó
Demo\CBuilder\PrintDialog, llevando el N-up printing y PDF author print preferences workflow a C++Builder junto con el sample Delphi - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.26
Version 1.39.25
- Se agregó
Demo\CBuilder\ViewerInteractionLab, completando el ViewerInteractionLab sample matrix en Delphi, C++Builder y Lazarus - Se actualizaron library build workflow y Win64 C++Builder package outputs para que los
TPdfViewviewer interaction methods enlacen correctamente en Win64 demos - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.25
Version 1.39.24
- Se agregó
Demo\Lazarus\ViewerInteractionLab, llevando el focused viewer interaction workflow a Lazarus junto con el sample Delphi - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.24
Version 1.39.23
- Se agregó
Demo\Lazarus\SearchAndSelect, completando el SearchAndSelect sample matrix en Delphi, C++Builder y Lazarus - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.23
Version 1.39.22
- Se agregaron
Demo\CBuilder\ContentExtractionLabyDemo\Lazarus\ContentExtractionLab, llevando el multi-category content extraction workflow a todos los demo IDE compatibles - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.22
Version 1.39.21
- Se mejoraron
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReportyDemo\CBuilder\PreflightReportcon un preview format selector para revisar text o JSON output antes de guardar informes - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.21
Version 1.39.20
- Se agregó exportación JSON a
FPdfPreflightReportmedianteTPdfPreflightReport.ToJsonySaveJsonToFile, con summary legible por máquina, per-standard status / priority, next action y issue detail - Se actualizaron
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReportyDemo\CBuilder\PreflightReportcon acciones Save JSON junto a la exportación TXT / HTML - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.20
Version 1.39.19
- Se mejoró
FPdfPreflightReportconTPdfPreflightStatus, issue categories, per-standard priority y next-action guidance en los informes TXT / HTML - Se actualizaron
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReportyDemo\CBuilder\PreflightReportpara mostrar status, priority, issue count y next action en la summary grid - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.19
Version 1.39.18
- Se añadió
Demo\Lazarus\SecurityAudit, completando la matriz de ejemplos Delphi, C++Builder y Lazarus para el workflow de auditoría PDF risk-surface de solo lectura - El ejemplo de Lazarus enumera permissions, attachments, JavaScript actions, URI / Launch link annotations, web links, signatures, XFA state, V8 / XFA helper availability y unsupported-feature callbacks, y luego guarda o copia la finding list como TXT report
- Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.18
Version 1.39.17
- Se añadió
Demo\CBuilder\SecurityAudit, llevando el workflow de auditoría PDF risk-surface de solo lectura a C++Builder junto al ejemplo Delphi existente - El ejemplo de C++Builder enumera permissions, attachments, JavaScript actions, URI / Launch link annotations, web links, signatures, XFA state, V8 / XFA helper availability y unsupported-feature callbacks, y luego guarda o copia la finding list como TXT report
- Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.17
Version 1.39.16
- Se añadió
Demo\CBuilder\SearchAndSelect, llevando el workflow independiente SearchAndSelect viewer a C++Builder junto al ejemplo Delphi existente - El ejemplo de C++Builder crea o abre PDFs, lista matches de todas las páginas con page / character-index previews, admite Previous / Next y double-click navigation, y resalta los matches de la página actual con
HighlightSearchText - También expone
AllowUserTextSelection,SelectedText,SelectAll,CopySelectionToClipboard,ClearSelection,OnSelectionChangey opciones spreadDisplayMode; los metadatos de versión ahora informan 1.39.16
Version 1.39.15
- Se agregó
Demo\CBuilder\WatermarkStamp, completando la demo matrix de Delphi, Lazarus y C++Builder para workflows reutilizables de Form XObject watermark y stamp - El ejemplo de C++Builder crea PDF de target y stamp, reutiliza la stamp page mediante
CreateXObjectFromPage, aplica transforms conTPdfMatrix, y guarda centered watermarks, corner stamps y page number labels - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.15
Version 1.39.14
- Se agregó
Demo\Lazarus\WatermarkStamp, llevando el workflow reutilizable de Form XObject watermark y stamp a Lazarus - El ejemplo de Lazarus crea PDF de target y stamp, reutiliza la stamp page mediante
CreateXObjectFromPage, aplica transforms conTPdfMatrix, y guarda centered watermarks, corner stamps y page number labels - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.14
Version 1.39.13
- Se agregó
Demo\CBuilder\PreflightReport, completando la matriz de demos Delphi, Lazarus y C++Builder para el workflow reutilizable deFPdfPreflightReport - El ejemplo de C++Builder usa
FPdfPreflightReport.hpppara generar standard summaries, TXT report previews, TXT / HTML report files y el comportamiento Open Last Report - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.13
Version 1.39.12
- Se agregó
Demo\Lazarus\PreflightReport, llevando a Lazarus el workflow de preflight report para PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R y PDF/VT - El ejemplo de Lazarus puede abrir o crear un PDF, seleccionar target standards, previsualizar summary rows y TXT report output, guardar TXT / HTML reports y abrir el report guardado más recientemente
- Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.12
Version 1.39.11
- Se mejoró
Demo\Delphi\SearchAndSelectcon una lista de resultados de búsqueda en todas las páginas que registra page number, character index y preview text - Se agregó Previous / Next match navigation y double-click result jumping, conservando el comportamiento de
HighlightSearchTexten la página actual - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.11
Version 1.39.10
- Se mejoró
Demo\Delphi\SecurityAuditcon acciones Save Report y Copy Report que exportan el summary actual y las finding rows como TXT audit report - El demo ahora limpia el report export state cuando se reinicia el audit panel, manteniendo los reports copiados o guardados alineados con los findings visibles
- Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.10
Version 1.39.9
- Se mejoró
Demo\Delphi\ContentExtractionLabcon source-PDF save, report copy-to-clipboard y acciones all / none category selection - El demo ahora invalida el report actual cuando cambia category selection, para que las TXT / JSON exports reflejen el extraction scope visible
- Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.9
Version 1.39.8
- Se agregó
Demo\Delphi\ContentExtractionLab, un workflow sample unificado de content extraction para document metadata, page text, page objects, images, attachments, links, annotations, bookmarks y font / character metrics - El ejemplo puede abrir un PDF existente o crear un synthetic PDF con contenido de text, image, attachment y annotation, y luego generar summary rows y reportes TXT / JSON detallados
- Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.8
Version 1.39.7
- Se añadió
Lib\FPdfPreflightReport.pas, un helper reutilizable de informes que envuelveValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfRyValidatePdfVTen un objetoTPdfPreflightReport - Se añadió
Demo\Delphi\PreflightReport, un ejemplo de workflow que abre o crea un PDF, selecciona standards de destino, previsualiza summary rows e issue recommendations, y guarda informes TXT o HTML - Los informes generados describen explícitamente el límite de marker-level validation integrado para que las aplicaciones puedan combinarlo con content-level preflight tools dedicadas cuando sea necesario
- Se actualizaron
TPdf.AboutInfo, Lazarus package metadata, package project lists e installer version metadata para informar 1.39.7
Version 1.39.6
- Se añadió
Demo\Delphi\SearchAndSelect, una muestra viewer workflow enfocada en search highlighting, text selection, selected-text preview, copy, clear y spread display modes - La muestra demuestra
HighlightSearchText, opciones de búsqueda match-case / whole-word,AllowUserTextSelection,SelectedText,SelectAll,CopySelectionToClipboardyClearSelectionsin añadir nueva API de biblioteca - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.6
Version 1.39.5
- Se amplió
Demo\Delphi\ViewerInteractionLabcomo una muestra de viewer UX de estilo SearchAndSelect conHighlightSearchText, opciones match-case / whole-word, vista previa del texto seleccionado y los controles existentes de selección / portapapeles - Se amplió
Demo\Delphi\PrintDialogpara inspeccionar PDF author print preferences:PrintCopies,PrintPageRanges,PrintScaling,PrintPaperHandlingy el duplex mapping visible deSetPdfPrintPaperHandlingDevMode - Se añadió
Demo\Delphi\SecurityAudit, una muestra de risk-surface de solo lectura que enumera permissions, attachments, document JavaScript, URI / Launch links, web links, signatures, XFA state y V8 / XFA helper availability - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.5
Version 1.39.4
- Se agregaron
Demo\CBuilder\ImageToPDFyDemo\Lazarus\ImageToPDF, completando la matriz de ejemplos ImageToPDF en Delphi, C++Builder y Lazarus - Los nuevos ejemplos demuestran selección de múltiples imágenes, vista previa de la imagen seleccionada, una página PDF por imagen, tamaño de página A4 portrait / landscape, escalado centrado de imagen, progreso por imagen y apertura del PDF generado tras guardar
- Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.4
Version 1.39.3
- Se agregó
Demo\CBuilder\BatchExport, llevando el flujo de exportación multifichero de PDF a JPG a C++Builder junto con las muestras Delphi y Lazarus existentes - La muestra demuestra
LoadCustomDocument,IPdfCancellationTokenSource, entradaTFileStreamen streaming, progreso por fichero y por página, manejo de cancelación, entradas de DPI / quality / password y apertura de la carpeta de salida al finalizar - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.3
Version 1.39.2
- Se agregó
Demo\Delphi\WatermarkStamp, un ejemplo ejecutable de flujo Form XObject que crea un PDF de destino y un stamp PDF reutilizable, y después aplica marcas de agua centradas, sellos en la esquina superior derecha y etiquetas de número de página en todas las páginas - El ejemplo demuestra
CreateXObjectFromPage,InsertFormObjectFromXObject,TPdfMatrixyFPDFPageObj_SetMatrixsin agregar nueva API de biblioteca - Se actualizó
Docs\en-us\Examples.htmlpara usar el patrón actualTPdfMatrix.Handleal pasar matrices aFPDFPageObj_SetMatrix - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.2
Version 1.39.1
- Se añadió
Demo\Delphi\ViewerInteractionLab, un ejemplo centrado enTPdfViewpara modos de visualización, modos de ajuste, colores de página, rotación, selección de texto por el usuario, acciones del portapapeles y retroalimentación de coordenadasDeviceToPage - Se añadieron
Demo\CBuilder\StandardsLabyDemo\Lazarus\StandardsLabpara que los usuarios de Lazarus puedan ejecutar el flujo de validación y salida de marcadores para PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R y PDF/VT - Se listaron las unidades de estándares en
Lib\37.0\PDFiumPas.dprojyLib\FPC\PDFiumLaz.lpk, y se corrigió la compilación del demo DelphiSplitVieweliminando una importación duplicada deWinapi.ShellAPI - Se corrigieron bloqueadores de compilación por lotes en los demos Delphi
BatchExport,PDFViewer,MultiPageViewerySplitViewsin cambiar su comportamiento en tiempo de ejecución - Se corrigió la compatibilidad de compilación por lotes de los demos C++Builder en
PDFVieweryMultiPageViewersustituyendonullptrporNULLpara el modo de proyecto actual - Se actualizaron
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos de versión del instalador para informar 1.39.1
Version 1.39.0
- Se agregó
Demo\Delphi\StandardsLab, un ejemplo ejecutable de flujo de trabajo de estándares que carga o crea un PDF, ejecutaValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfRyValidatePdfVT, y muestra conformance detectada, estado de aprobación y recuentos de issue en una sola cuadrícula - Los botones de guardado de StandardsLab llaman a
SaveAsPdfA,SaveAsPdfUa,SaveAsPdfE,SaveAsPdfX,SaveAsPdfRySaveAsPdfVT, haciendo visible la salida de marker de estándares PDF sin escribir un arnés personalizado - Se actualizaron
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos de versión del instalador para informar 1.39.0
Version 1.38.0
- Las superposiciones de búsqueda y selección de texto de
TPdfViewahora usan alpha blending real en lugar de pintura con mask lógica, preservando el contenido de la página bajo los resaltados - Se añadió
SetPdfPrintPaperHandlingDevModepara mapearTPrintPaperHandlinga los valores WindowsDEVMODE.dmDuplex:DMDUP_SIMPLEX,DMDUP_HORIZONTALyDMDUP_VERTICAL TPdfView.SmoothScrollahora anima los comandos line/page de la scrollbar en timer-driven segments; el thumb tracking sigue siendo inmediato- Actualizados
TPdf.AboutInfoy los metadatos de versión del instalador a 1.38.0
Version 1.37.0
TPdfahora tiene un bloqueo de render por instancia que serializaRenderPage,RenderTile,RenderPageProgressive, recarga de página y descarga de documento. El render desde worker con un componente compartido ya es viable; la aplicación sigue coordinando mutaciones y ciclo de vida- Corregido el envoltorio zero-copy de bitmap para rechazar DIB
TBitmapbottom-up y usar un buffer propio de PDFium con copia final, eliminando fallos de stride / access violation en las pruebas VCL de render - Ajustado el comportamiento de selección de
TPdfView:AllowUserTextSelectionsolo bloquea entrada de usuario, las APIs de selección por código siguen pintando, ySelectAllsigue el spread visible real para que la portada no seleccione la página 2. Pruebas Delphi, Lazarus y C++Builder ampliadas - Actualizados
TPdf.AboutInfoy los metadatos de versión del instalador a 1.37.0
Version 1.36.0
- Se activó la selección de texto para el usuario final en
TPdfView— la propiedadAllowUserTextSelection, reservada en v1.17.0, ahora impulsa una canalización completa de selección por arrastre. Hacer clic izquierdo sobre un carácter de texto entra en modo de selección, con hit-test automático; hacer clic izquierdo sobre un área vacía sigue desplazando la vista como antes. El widget de relleno de formularios mantiene la prioridad, así que hacer clic en un campo de formulario sigue enfocando el campo en lugar de iniciar una selección - El doble clic selecciona la palabra, el triple clic selecciona la línea,
Ctrl+Aselecciona la página actual, o ambas páginas en modos de visualización extendidos, yCtrl+Ccopia la selección al portapapeles de Windows comoCF_UNICODETEXT Shift+LeftyShift+Rightamplían la selección un carácter cada vez, incluso saltando a la página adyacente en modo extendido;Shift+HomeyShift+Endla amplían hasta el borde visual de la línea usando la altura del cuadro del carácter semilla como tolerancia para agrupar la línea, de modo que las líneas con tamaños de fuente mezclados sigan agrupadas correctamente- Al pasar sobre texto, el cursor cambia a
crIBeam; al salir del texto, vuelve el cursor predeterminado. Mientras una selección por arrastre está en curso, arrastrar hacia una zona muerta de 20 píxeles en cualquier borde del visor desplaza la página automáticamente, con tics de 50 ms y 16 px por tic, limitado por los mismos bordes que usa la ruta de paneo, para que la selección pueda extenderse más allá del viewport actual sin soltar antes el ratón - La selección entre páginas funciona en modos de visualización extendidos,
dmTwoPageContinuousydmTwoPageContinuousWithCover: un arrastre iniciado en la página izquierda y terminado en la derecha selecciona el rango contiguo que abarca ambas.SelectedTextune los fragmentos por página con CR/LF para que el texto reconstruido se lea como contenido normal de varias líneas - Nueva propiedad publicada
SelectionColor, con valor predeterminadoclHighlight, el color de selección del sistema Windows, independiente deHighlightColor, que colorea en amarillo los resultados de búsqueda. Los resaltados de búsqueda y una selección por arrastre activa pueden mostrarse al mismo tiempo sin conflicto de color - Nuevo evento publicado
OnSelectionChangeque se dispara cada vez que los rangos materializados de la selección cambian de verdad y nunca al reaplicar exactamente lo mismo, para que las aplicaciones anfitrionas puedan conectarlo directamente a texto de barra de estado o al estado habilitado de botones sin necesidad de debounce - Nueva API pública en
TPdfView:HasSelection,SelectionCharCount,SelectedText,ClearSelection,SelectAll,CopySelectionToClipboard. Son puntos de entrada a nivel de código y siempre funcionan independientemente deAllowUserTextSelection— la bandera solo controla la entrada del usuario, como el ratón, Ctrl+C, Ctrl+A y Shift+arrows, de modo que los hosts tipo kiosco puedan desactivar la selección impulsada por el usuario y seguir ofreciendo botones de barra de herramientas como Select All o Copy que usan la misma API - Se adjunta automáticamente un menú emergente predeterminado de clic derecho con
Copyy复制cuando el host no ha asignado su propioPopupMenu— el flujo estándar de seleccionar texto, clic derecho y copiar funciona desde el primer momento. El texto se elige entre inglés y chino medianteSysLocale.PriLangID; los hosts que necesiten localización completa, o un menú más rico, solo tienen que asignar su propioPopupMenuy el predeterminado se suprime - La selección se borra automáticamente en las transiciones de
SetPdf,SetPageNumber,SetActive(False)yDisplayMode, conOnSelectionChangedisparándose exactamente una vez cuando la selección anterior no estaba vacía. El subsistema de relleno de formularios mantiene la prioridad — mientras se está editando un campo de formulario, todos los atajos de teclado de selección se aplazan para que el campo recibaCtrl+C,Ctrl+AyShift+arrowspara su propia selección - Se ampliaron las suites de regresión de Delphi y Lazarus a 202 casos cada una, y la de C++Builder a 159 casos, cubriendo valores predeterminados, round-trip, comportamiento de la API pública, borrado por cambio de estado, arrastre con ratón sobre texto o sobre zonas vacías, clic frente a arrastre, cambio a cursor IBeam, doble clic en palabra, triple clic en línea, atajos de teclado, conexión del menú emergente predeterminado, aplazamiento, texto del menú y selección entre páginas extendidas, incluida una comprobación de round-trip del portapapeles con CR/LF
Version 1.35.0
- Se añadió soporte para la inyección de marcadores PDF/VT, ISO 16612-2:2010: TPdf.SaveAsPdfVT promueve el documento actual a un archivo conforme con PDF/VT-1 o PDF/VT-2, el subconjunto PDF para impresión variable y transaccional. PDF/VT se construye sobre PDF/X-4 — ISO 16612-2 §6.2.1 exige que todo archivo PDF/VT-1 también cumpla con PDF/X-4 — así que el inyector escribe el conjunto completo de marcadores PDF/X-4, XMP
pdfxid:GTS_PDFXVersion = "PDF/X-4", Info/GTS_PDFXVersion (PDF/X-4)y/Trapped, y el catálogo/OutputIntentsque referencia un diccionario OutputIntent con perfil ICC incrustado, junto con las propiedades específicas de PDF/VT - La inyección específica de PDF/VT cubre XMP
pdfvtid:GTS_PDFVTVersion(= "PDF/VT-1" o "PDF/VT-2" según §6.3 Table 2) ypdfvtid:GTS_PDFVTModDate(sincronizado conxmp:ModifyDatesegún §6.3 NOTE 1), además de una descripción pdfaExtension:schemas que declara los espacios de nombres pdfxid y pdfvtid (URI NPEShttp://www.npes.org/pdfx/ns/id/yhttp://www.npes.org/pdfvt/ns/id/). El tráiler incluye un array/ID - Se añadió TPdf.SaveAsPdfVTToStream para salida PDF/VT en memoria, y un atajo de opciones predeterminadas
TPdf.SaveAsPdfVT(FileName)que produce PDF/VT-1 con el OutputIntent sRGB IEC61966-2.1 incluido, 3144 bytes y el mismo perfil que SaveAsPdfA y SaveAsPdfX, además de/Trapped /False - Se añadió TPdf.ValidatePdfVT: comprueba un PDF abierto para detectar marcadores de conformidad PDF/VT, XMP
pdfvtid:GTS_PDFVTVersionyGTS_PDFVTModDate, igualdad entrepdfvtid:GTS_PDFVTModDateyxmp:ModifyDate, presencia del identificador subyacentepdfxid:GTS_PDFXVersion, presencia de/DPartRooten el catálogo según §6.5,/OutputIntentscon/DestOutputProfile, el tráiler /ID, estado de cifrado y presencia dexmp:CreateDate/ModifyDate, y devuelve TPdfVTValidationResult con el nivel de conformidad detectado y el conjunto de incidencias encontradas - Se añadió la propiedad TPdf.PdfVTConformance: devuelve el nivel de conformidad del documento actualmente abierto, pvc1, pvc2, pvcNone o pvcUnknown, sin necesidad de llamar explícitamente a ValidatePdfVT
- Nuevos tipos exportados en la nueva unidad FPdfPdfvt: TPdfVTConformance, pvcUnknown, None, 1 y 2, TPdfVTTrappedState, ptvUnspecified, True, False y Unknown, TPdfVTValidationResult, TPdfVTValidationIssue y TPdfVTSaveOptions
- La jerarquía Document Part, el árbol
DPartRootyDPartsegún §6.5, es una estructura de nivel de aplicación que depende del flujo de impresión de datos variables y del mapeo de destinatarios o rangos de páginas. SaveAsPdfVT NO sintetiza un árbol DPart — ValidatePdfVT expone la ausencia de/DPartRootcomopvviMissingDPartRootpara que quien llama pueda pasar los archivos PDF/VT por una etapa independiente de construcción de DPart. Los requisitos de contenido de PDF/X-4, incrustación de fuentes, transparencia, color gestionado por ICC y prohibiciones de OPI, JavaScript o Reference XObject, siguen siendo responsabilidad del autor del documento y de la canalización de renderizado de PDFium - Se actualizó la cadena TPdf.AboutInfo para informar la versión actual del producto
Version 1.34.0
- Se añade la inyección de marcadores PDF/R-1 (ISO 23504-1:2020): TPdf.SaveAsPdfR convierte el documento actual en un fichero conforme con PDF/R-1, el subconjunto de transporte de imágenes ráster usado para documentos escaneados. La inyección cubre los requisitos de formato aplicables mediante posprocesamiento — el comentario único de identificación de versión
%PDF-raster-1.0entre el diccionario del tráiler y la palabra clave startxref (§5), el catálogo reducido a la lista permitida de §6.3 (solo Version / ViewerPreferences / PageLayout / PageMode / AcroForm / Metadata), el Document Information Dictionary reducido a la lista permitida de §6.4.3 (solo Creator / Producer / CreationDate / ModDate), un flujo XMP /Metadata del catálogo con las cuatro entradas de §6.4.4 Table 1 (xmp:CreatorTool / pdf:Producer / xmp:CreateDate / xmp:ModifyDate) y un array /ID en el tráiler - Se añadió TPdf.SaveAsPdfRToStream para salida PDF/R en memoria, y un atajo de opciones predeterminadas
TPdf.SaveAsPdfR(FileName)para el caso habitual - Se añadió TPdf.ValidatePdfR: comprueba un PDF abierto para detectar marcadores de conformidad PDF/R-1, el comentario de pie
%PDF-raster-x.y, la versión del encabezado, la ausencia de /Type /ObjStm, el cumplimiento de la lista blanca del catálogo, el cumplimiento de la lista blanca del diccionario Info, la presencia del flujo de metadatos XMP y el tráiler /ID, y devuelve TPdfRValidationResult con el nivel de conformidad detectado y el conjunto de incidencias encontradas - Se añadió la propiedad TPdf.PdfRConformance: devuelve el nivel de conformidad del documento actualmente abierto, prc1, prcNone o prcUnknown, sin necesidad de llamar explícitamente a ValidatePdfR
- Nuevos tipos exportados en la nueva unidad FPdfPdfr: TPdfRConformance, TPdfRValidationResult, TPdfRValidationIssue y TPdfRSaveOptions.
TPdfRSaveOptions.Defaultestablece StripInfoOptionalEntries y StripCatalogOptionalEntries en True, de modo que el inyector produce por defecto un catálogo y un diccionario Info compatibles con §6.3 y §6.4.3; quien llama puede ponerlos en False para conservar entradas del origen, aunque entonces la salida no cumplirá esas cláusulas de PDF/R y los demás marcadores seguirán adjuntos - Los requisitos a nivel de contenido siguen siendo responsabilidad del PDF de origen: la estructura de Contents por página según §6.5.1, la forma de MediaBox
[0 0 w h]según §6.5.3, las restricciones de filtros según §6.2.2, solo FlateDecode, CCITTFaxDecode bitonal y DCTDecode gris de 8 bits o RGB, la ausencia de object streams según §6.2.4 y la disposición en tiras según §6.6. Nada de esto puede imponerse por posprocesamiento — PDF/R es estructuralmente un subconjunto mucho más estricto que los demás estándares PDF/x y exige generar correctamente los bytes de origen. ValidatePdfR muestra los problemas de formato que esta unidad puede detectar; conviene combinarlo con un validador PDF/R del TWAIN Working Group para una comprobación completa a nivel de contenido - Se actualizó la cadena TPdf.AboutInfo para informar la versión actual del producto
Version 1.33.0
- Se añadió soporte para la inyección de marcadores PDF/X, familia ISO 15930: TPdf.SaveAsPdfX promueve el documento actual a un archivo conforme con PDF/X-1a:2001, PDF/X-3:2002 o PDF/X-4 mediante el posprocesamiento del PDF base con una actualización incremental. La inyección cubre los requisitos de nivel de formato que pueden adjuntarse por posprocesamiento — un flujo de metadatos XMP que transporta
pdfxid:GTS_PDFXVersionypdfxid:GTS_PDFXConformancepara PDF/X-1a y PDF/X-3, junto con la descripción pdfaExtension:schemas correspondiente, un Document Information Dictionary reescrito con/GTS_PDFXVersion,/GTS_PDFXConformancey/Trapped, un catálogo actualizado con/OutputIntents [N 0 R]que referencia un diccionario OutputIntent con/S /GTS_PDFXy un perfil ICC incrustado, y una matriz de tráiler/ID - Se añadió TPdf.SaveAsPdfXToStream para salida PDF/X en memoria, y un atajo de opciones predeterminadas
TPdf.SaveAsPdfX(FileName)que produce PDF/X-4 con el OutputIntent sRGB IEC61966-2.1 incorporado, 3144 bytes e idéntico al perfil usado por SaveAsPdfA - Se añadió TPdf.ValidatePdfX: comprueba un PDF abierto para detectar marcadores de conformidad PDF/X, el identificador pdfxid de XMP y su igualdad con el valor del diccionario Info, la descripción del esquema de extensión pdfxid, la matriz /OutputIntents con /DestOutputProfile, la presencia del Title, la matriz de tráiler /ID, el estado de cifrado y la presencia de xmp:CreateDate y xmp:ModifyDate, y devuelve TPdfXValidationResult con el nivel detectado y el conjunto de incidencias encontradas
- Se añadió la propiedad TPdf.PdfXConformance: devuelve el nivel de conformidad del documento actualmente abierto, pxc1a, pxc3, pxc4, pxcNone o pxcUnknown, sin necesidad de llamar explícitamente a ValidatePdfX. La cadena de versión XMP se analiza para distinguir entre los tres niveles de conformidad
- Nuevos tipos exportados en la nueva unidad FPdfPdfx: TPdfXConformance, pxcUnknown, None, 1a, 3 y 4, TPdfXTrappedState, ptUnspecified, True, False y Unknown, TPdfXValidationResult, TPdfXValidationIssue y TPdfXSaveOptions.
TPdfXSaveOptions.Defaultapunta a PDF/X-4 con OutputIntent sRGB y/Trapped /False; quien llama puede sustituirConformance, aportar un bloqueIccProfileDataCMYK para flujos de impresión comercial o cambiarOutputCondition,OutputConditionIdentifieryRegistryNamepara apuntar a una entrada concreta de un registro de caracterización ICC, por ejemplo FOGRA39 o GRACoL2006_Coated1v2 - Los requisitos a nivel de contenido, como todas las fuentes incrustadas, ausencia de JavaScript, ausencia de anotaciones visibles, prohibición de OPI, reglas de transparencia para PDF/X-1a y PDF/X-3 y otros, siguen siendo responsabilidad del autor del documento y de la canalización de renderizado de PDFium. Conviene combinar ValidatePdfX con una herramienta de preflight como callas pdfaPilot o Ghent PDF Workgroup Output Suite para una verificación completa de conformidad
- Se actualizó la cadena TPdf.AboutInfo para informar la versión actual del producto
Version 1.32.0
- Se añade la inyección de marcadores PDF/E-1 (ISO 24517-1:2008): TPdf.SaveAsPdfE convierte el documento actual en un fichero conforme con PDF/E-1 mediante una actualización incremental del PDF base. La inyección cubre los requisitos de formato aplicables mediante posprocesamiento — un flujo de metadatos XMP con
pdfe:ISO_PDFEVersion = "PDF/E-1"y la descripción pdfaExtension:schemas correspondiente, un Document Information Dictionary reescrito con la entrada obligatoria/ISO_PDFEVersion (PDF/E-1)exigida por §5, los bloques de correspondencia Info-XMP heredados de ISO 19005-1 §6.7 a través de §13.1 (dc:title / dc:creator / dc:description / pdf:Producer / pdf:Keywords / xmp:CreateDate / xmp:ModifyDate / xmp:MetadataDate / xmp:CreatorTool) y un array/IDen el tráiler exigido por §6.2 - Añadido TPdf.SaveAsPdfEToStream para salida PDF/E en memoria y atajo
TPdf.SaveAsPdfE(FileName)para el caso común - Se añade TPdf.ValidatePdfE: comprueba los marcadores de conformidad PDF/E-1 en un PDF abierto (presencia de XMP pdfe:ISO_PDFEVersion y coincidencia con el valor del diccionario Info, descripción del esquema de extensión pdfe, entrada /ISO_PDFEVersion del diccionario Info, /ID del tráiler y presencia de xmp:CreateDate / xmp:ModifyDate) y devuelve un resultado estructurado con el nivel de conformidad detectado y las incidencias encontradas
- Se añade la propiedad TPdf.PdfEConformance: devuelve el nivel de conformidad del documento abierto (pec1, pecNone o pecUnknown) sin llamar explícitamente a ValidatePdfE
- Nuevos tipos exportados en la nueva unidad FPdfPdfe: TPdfEConformance, TPdfEValidationResult, TPdfEValidationIssue, TPdfESaveOptions
- La reescritura del diccionario Info es la primera del flujo de posprocesamiento PDF/x de PDFium Delphi Component — reescribe el objeto Info existente con el mismo número de objeto (manteniendo válidas la subsección xref y la referencia /Info del tráiler) y crea un diccionario Info nuevo cuando el tráiler del origen no tiene /Info. PDFium emite un diccionario Info en todas las salidas SaveAs, por lo que lo habitual es la reescritura
- Los requisitos de contenido (incrustación de fuentes, ToUnicode CMaps, XObjects / claves ExtGState / formularios XFA prohibidos, etc.) siguen siendo responsabilidad del autor — SaveAsPdfE añade los marcadores de formato, pero no altera el contenido de página ni elimina funciones prohibidas
- Cadena TPdf.AboutInfo actualizada para reportar la versión actual del producto
Version 1.31.0
- Añadido soporte para inyección de marcadores PDF/UA-1 (ISO 14289-1:2014): TPdf.SaveAsPdfUa convierte el documento actual en un fichero conforme con PDF/UA-1 mediante posprocesamiento del PDF base con una actualización incremental. La inyección cubre los requisitos de nivel formato de fichero aplicables por posprocesamiento — flujo de metadatos XMP con
pdfuaid:part = 1y la correspondiente descripción pdfaExtension:schemas,dc:titleobligatorio, catalog/MarkInfo << /Marked true /Suspects false >>y/ViewerPreferences << /DisplayDocTitle true >>(solo si la fuente no los tiene), catalog/Lang(cuando el llamador suministra una etiqueta BCP 47) y arreglo/IDen el trailer - Añadido TPdf.SaveAsPdfUaToStream para salida PDF/UA en memoria, y un atajo de opciones por defecto
TPdf.SaveAsPdfUa(FileName)para el caso común - Añadido TPdf.ValidatePdfUa: comprueba en un PDF abierto los marcadores de conformidad PDF/UA-1 (existencia de StructTreeRoot, /Lang, /MarkInfo /Marked true con /Suspects = false, /ViewerPreferences /DisplayDocTitle true, identificador XMP pdfuaid:part, presencia de dc:title, /ID del trailer, estado de cifrado) y devuelve un resultado estructurado con el nivel de conformidad detectado y el conjunto de problemas encontrados
- Añadida propiedad TPdf.PdfUaConformance: devuelve el nivel de conformidad del documento abierto (puc1, pucNone o pucUnknown) sin necesidad de llamar a ValidatePdfUa explícitamente
- Nuevos tipos exportados en la nueva unidad FPdfPdfua: TPdfUaConformance, TPdfUaValidationResult, TPdfUaValidationIssue, TPdfUaSaveOptions
- Los campos vacíos de TPdfUaSaveOptions (Title / Author / Subject / Keywords / Creator / Producer / CreationDate / ModDate / DocumentId / InstanceId / Language) se rellenan automáticamente desde FPDF_GetMetaText / FPDF_GetFileIdentifier / FPDFCatalog_GetLanguage
- Los requisitos de nivel contenido (completitud del etiquetado StructTreeRoot, texto Alt de Figure, CMaps ToUnicode, incrustación de fuentes, etc.) siguen siendo responsabilidad del autor del documento — SaveAsPdfUa solo agrega marcadores de formato. ValidatePdfUa reporta la ausencia de StructTreeRoot como
pvuaiMissingStructTreeRoot - Cadena TPdf.AboutInfo actualizada para reportar la versión actual del producto
Version 1.30.0
- La salida PDF/A-1b ahora cumple los requisitos de equivalencia entre Document Information Dictionary y XMP de ISO 19005-1 (con Cor.1:2007): cada entrada del Info dictionary que PDFium escribe en el PDF base se refleja en el paquete XMP, incluyendo Title (dc:title), Author (dc:creator), Subject (dc:description según Cor.1), Keywords (pdf:Keywords), Creator (xmp:CreatorTool), Producer (pdf:Producer), CreationDate (xmp:CreateDate) y ModDate (xmp:ModifyDate). También se emite xmp:MetadataDate
- El trailer de un documento PDF/A ahora siempre contiene el arreglo /ID (requisito obligatorio de ISO 19005-1 6.1.3). Cuando TPdf.SaveAsPdfA procesa un documento cuyo origen ya tiene file identifier, se reutilizan los IDs de 16 bytes permanent y changing; en caso contrario, se deriva un ID de 16 bytes determinista a partir de los bytes de origen
- El XMP inyectado ahora incrusta la descripción de extension schema pdfaid exigida por ISO 19005-1 6.7.8 (reemplazado por Cor.1): pdfaid es una extension schema relativa a XMP Specification 2004, por lo que todos los ficheros conformes deben declarar sus property names, value types y categories en el contenedor pdfaExtension:schemas
- TPdfASaveOptions añade cinco campos opcionales nuevos: Producer, CreationDate, ModDate (cadenas de fecha PDF en formato “D:YYYYMMDDHHmmSSOHH'mm'”), DocumentId e InstanceId (cadenas de 16 bytes para el arreglo /ID del trailer). TPdf.SaveAsPdfA / SaveAsPdfAToStream rellenan automáticamente los campos vacíos mediante FPDF_GetMetaText y FPDF_GetFileIdentifier, por lo que el código existente sigue funcionando sin cambios
- TPdf.ValidatePdfA / TPdf.PdfAConformance ahora informan tres incidencias adicionales: pvaiMissingTrailerId (sin /ID en el trailer), pvaiMissingXmpDates (faltan xmp:CreateDate o xmp:ModifyDate) y pvaiMissingExtensionSchema (sin descripción de la extension schema pdfaid)
- Los caracteres no ASCII de Title, Author, Subject, Keywords, Creator y Producer se codifican ahora como UTF-8 en el paquete XMP (XMP Specification requiere UTF-8), preservando los metadatos multilingües al pasar por SaveAsPdfA
- Cadena TPdf.AboutInfo actualizada para reportar la versión actual del producto
Version 1.29.0
- Se actualizaron las DLLs de PDFium incluidas (Win32 y Win64, en compilaciones estándar y con V8) a la instantánea de PDFium del 2026-05-22, incorporando correcciones a las rutas de bloqueo de FPDFText_SetText / FPDFText_SetCharcodes y diversos endurecimientos internos del proyecto PDFium
- Se expuso el nuevo indicador de guardado FPDF_SUBSET_NEW_FONTS de PDFium en FPdfPageOps.pas, permitiendo a quienes llaman a FPDF_SaveAsCopy solicitar la subdivisión automática de los ficheros de fuentes incrustadas para los nuevos objetos de texto. Las constantes existentes FPDF_INCREMENTAL, FPDF_NO_INCREMENTAL y FPDF_REMOVE_SECURITY ahora se definen con la forma de desplazamiento de bits de PDFium (el valor numérico heredado 3 se conserva como FPDF_REMOVE_SECURITY_DEPRECATED para compatibilidad binaria)
- Se añadió la enumeración FPDF_FONT_BACKEND_TYPE (FREETYPE / FONTATIONS) y el campo correspondiente m_FontLibraryType en FPDF_LIBRARY_CONFIG dentro de FPdfView.pas, de modo que las aplicaciones que inicialicen PDFium con el renderizador Skia puedan elegir el backend de fuentes al inicio
- Se actualizó la firma de TFPDFPage_InsertObject para que coincida con la exportación C de PDFium: la función ahora devuelve FPDF_BOOL (TRUE en caso de éxito, FALSE si page_object es NULL o la transferencia de propiedad falla) en lugar de void. Las llamadas existentes de PDFium Delphi Component siguen compilando sin cambios, ya que Delphi / FPC permiten ignorar el valor de retorno de una función
- Se corrigió la cadena TPdf.AboutInfo para que informe la versión actual del producto (permaneció obsoleta en v1.27.0 desde la versión 1.28.0, que solo incluía cambios de documentación)
Version 1.28.0
- Se amplía sustancialmente la documentación integrada en toda la referencia API: cada propiedad, método, evento y función global incluye ahora una Description de 3 párrafos, una lista Remarks, un Example Delphi de varias líneas y un bloque See Also más completo — cubriendo más de 200 páginas antes escuetas, incluidos todos los contadores TPdf, getters de metadatos, accesores de fuentes y caracteres, propiedades de página, registros indexados, métodos de documento y toda la superficie de estado / visualización / eventos de TPdfView
- Se ajusta el layout de ayuda a la base visual de losLab: se igualan los tamaños h1/h2, se consolidan los estilos de la cuadrícula de navegación API en el StyleSheet compartido y se eliminan las sustituciones CSS inline por página de Navigation.html
- La documentación ahora se distribuye con un script auxiliar (Docs\Build-Expand-Entries.ps1) que regenera el enriquecimiento de las páginas de entrada desde una única tabla de datos, facilitando el mantenimiento repetible
Version 1.27.0
- Se añadió soporte para creación de PDF/A-1b: TPdf.SaveAsPdfA guarda cualquier documento abierto como un fichero conforme a PDF/A-1b mediante un post-procesado del PDF base con una actualización incremental que inyecta un flujo de metadatos XMP, un OutputIntent ICC sRGB y un catálogo de documento actualizado — todo sin requerir APIs adicionales en la DLL. Funciona en cualquier plataforma soportada por PDFium Delphi Component
- Se añadió TPdf.SaveAsPdfAToStream para salida PDF/A en memoria
- Se añadió TPdf.ValidatePdfA: comprueba si un PDF abierto cumple PDF/A (marcadores XMP pdfaid, OutputIntent con perfil ICC embebido, cifrado) y devuelve un resultado estructurado con el nivel de conformidad detectado y un conjunto de issues específicos encontrados
- Se añadió la propiedad TPdf.PdfAConformance: devuelve el nivel de conformidad del documento abierto actualmente (pac1b, pac1a, pac2b, pac3b, pacNone o pacUnknown) sin necesidad de llamar a ValidatePdfA explícitamente
- Nuevos tipos exportados: TPdfAConformance, TPdfAValidationResult, TPdfAValidationIssue, TPdfASaveOptions (en la nueva unidad FPdfPdfa.pas)
- SaveAsPdfA admite un perfil ICC personalizado a través de TPdfASaveOptions.IccProfileData; si se deja vacío, se utiliza automáticamente el perfil integrado sRGB IEC61966-2.1 (HP/Microsoft, 3144 bytes)
- Se sustituyó la referencia HTML monolítica por un sistema de ayuda web reestructurado: 302 páginas individuales de entrada de la API (una por cada propiedad, método, evento y función global) que cubren TPdf y TPdfView, cada una con una descripción completa, una tabla de parámetros, un ejemplo de código Delphi y enlaces See Also
- Se añadió Navigation.html: un índice integral de navegación de la API en una sola página, organizado en seis secciones (propiedades/métodos/eventos de TPdf, propiedades/métodos/eventos de TPdfView, funciones globales) con una cuadrícula flexible de 5 columnas para una búsqueda rápida
- Se reconstruyeron TPdf.html y TPdfView.html como páginas compactas de visión general de componentes que conservan las secciones de referencia de tipos (Types, Constants, Global Variables) y enlazan a las páginas individuales de cada miembro
- Se añadió búsqueda de texto completo basada en Search.js con coincidencia incremental en el cliente sobre las 312 páginas indexadas
- Se actualizaron todas las barras de navegación del sitio para apuntar a Navigation.html
Version 1.26.0
- Se añadió Demo/Lazarus/BatchExport, la versión LCL de la demo Delphi BatchExport de v1.14.0. Mismo conjunto de funcionalidades: exportación PDF -> JPG de múltiples ficheros con progreso global por fichero, progreso actual por página, entradas de DPI / calidad / contraseña y un lote cancelable cooperativamente respaldado por IPdfCancellationToken. La carpeta de salida se abre en el explorador de ficheros de la plataforma cuando la extracción finaliza con éxito
Version 1.25.0
- Se añadió la reutilización de páginas mediante Form XObject a TPdf, habilitando flujos de marca de agua, superposición de plantillas y “estampar una página sobre muchas”: CreateXObjectFromPage genera un handle reutilizable a partir de cualquier página de otro documento; InsertFormObjectFromXObject inserta UNA copia de la página envuelta en la página actual. Devuelve el FPDF_PAGEOBJECT insertado para que el llamador pueda posicionarlo / escalarlo / rotarlo con FPDFPageObj_SetMatrix y los helpers TPdfMatrix de v1.9.0
- La nueva clase Pascal TPdfXObject envuelve el handle FPDF_XOBJECT de PDFium y lo cierra automáticamente en su destructor, eliminando la ceremonia manual de FPDF_CloseXObject
- Se ampliaron las suites de regresión de Delphi y Lazarus a 147 casos cada una, y la suite de C++Builder a 123 casos, cubriendo los contratos de creación de handles e inserción de objetos de página
Version 1.24.0
- Se añadió TPdf.RenderPageProgressive — una variante cancelable de RenderPage que conduce el bucle de renderizado progresivo de PDFium y sondea un IPdfCancellationToken de v1.7.0 entre iteraciones, de modo que los renderizados largos en alta DPI pueden abortarse a mitad de página en lugar de bloquear al llamador hasta la finalización
- Devuelve un valor TPdfProgressiveStatus: prsDone, prsCancelled o prsFailed. Pase AToken = nil para renderizar hasta el final sin pausarse nunca (sin posibilidad de prsCancelled)
- Utiliza la misma vía rápida zero-copy introducida en v1.21.0 — PDFium renderiza directamente en el DIB del TBitmap de destino. El mismo fallback heredado se aplica cuando el DIB no puede ser envuelto
- Se ampliaron las suites de regresión de Delphi y Lazarus a 145 casos cada una, y la suite de C++Builder a 121 casos, cubriendo nil-token (se completa), token pre-cancelado (prsCancelled) y equivalencia de píxeles con RenderPage síncrono sobre un token vivo
Version 1.23.0
- Se añadieron seis nuevos métodos a TPdfView que exponen a las aplicaciones la selección de texto en widgets de formulario y Undo/Redo de PDFium: GetSelectedFormText devuelve el texto actualmente seleccionado dentro del widget de formulario enfocado; SelectAllFormText selecciona todos los caracteres; FormUndo / FormRedo / FormCanUndo / FormCanRedo controlan el historial de edición del widget enfocado. Las APIs subyacentes de PDFium ya estaban enlazadas, pero no tenían un punto de entrada de alto nivel. Los seis hacen un corto-circuito seguro cuando el visor está inactivo o el documento no tiene un widget AcroForm enfocado
- Se ampliaron las suites de regresión de Delphi y Lazarus a 142 casos cada una, y la suite de C++Builder a 119 casos, cubriendo el contrato “sin formulario, sin foco” para cada nuevo método
Version 1.22.0
- Se añadieron wrappers de composición de páginas a TPdf: ImportPagesByIndex toma un array de índices base cero para copiar páginas específicas desde un documento de origen; ImportNPagesToOne devuelve un TPdf nuevo cuyas páginas son composiciones N-up de este documento; MovePages reordena páginas in situ. Las APIs subyacentes de PDFium ya estaban enlazadas, pero no tenían un punto de entrada amigable para Pascal
- ImportPagesByIndex acepta un array vacío para importar todas las páginas de origen (equivalente a pasar nil a nivel de C ABI)
- Se ampliaron las suites de regresión de Delphi y Lazarus a 136 casos cada una, y la suite de C++Builder a 115 casos, cubriendo importación de subconjuntos, importación de documento completo, reordenamiento de páginas y composición N-up
Version 1.21.0
- Se mejoró el rendimiento del renderizado cambiando TPdf.RenderPage / TPdf.RenderTile (y los helpers correspondientes de TPdfView) a una vía de salida zero-copy. PDFium ahora escribe directamente en el buffer DIB del TBitmap de destino en lugar de en un buffer interno que luego se copiaba fila por fila, ahorrando una copia de memoria de ancho x alto x 4 bytes por renderizado. La mejora es más notable a alta DPI (paneles de miniaturas, exportación con calidad de impresión, exportación por lotes)
- La vía heredada por línea de escaneo se conserva como fallback de seguridad para el caso improbable en el que el DIB de destino no pueda ser envuelto (dimensiones extremas, stride inusual, OOM). El comportamiento es idéntico byte a byte entre ambas vías; solo es más lento en el fallback
- Se ampliaron las suites de regresión de Delphi y Lazarus a 132 casos cada una, y la suite de C++Builder a 112 casos, cubriendo la promoción de pf32bit en el bitmap del llamador, round-trip de dimensiones y una prueba de cordura de stride en bitmap grande
Version 1.20.0
- Se añadió resaltado de resultados de búsqueda a TPdfView: HighlightSearchText(Text, MatchCase, MatchWholeWord) escanea la página actual del visor y devuelve el número de coincidencias encontradas, pintando una máscara HighlightColor sobre cada coincidencia en cada redibujado. ClearHighlight elimina los resaltados; cambiar el visor a otra página los borra automáticamente, ya que las coincidencias son específicas de cada página
- HighlightColor toma por defecto clYellow y está publicado para que las aplicaciones puedan tematizar el resaltado para que coincida con su paleta de UI
- Se ampliaron las suites de regresión de Delphi y Lazarus a 129 casos cada una, y la suite de C++Builder a 109 casos, cubriendo color por defecto, round-trip de color, “coincidencias reales de palabras del fixture” contra la cadena de sample.pdf y el contrato “palabra inexistente devuelve cero coincidencias”
Version 1.19.0
- Se añadió la propiedad FitMode a TPdfView con cuatro valores: pfmNone (zoom manual), pfmActualSize (100%), pfmFitPage (la página entera cabe en el viewport) y pfmFitWidth (el ancho de la página coincide con el ancho del viewport). El modo de ajuste activo se re-aplica automáticamente al Resize y cuando cambia la página actual, de modo que los documentos largos con tamaños de página mixtos siguen perfectamente encuadrados
- Establecer Zoom directamente cancela el modo de ajuste activo (FitMode vuelve a pfmNone), siguiendo la convención estándar de los visores PDF donde escribir un valor de zoom abandona Fit Page / Fit Width
- El valor por defecto es pfmNone, de modo que las aplicaciones existentes conservan su comportamiento de zoom explícito
- Se ampliaron las suites de regresión de Delphi y Lazarus a 124 casos cada una, y la suite de C++Builder a 106 casos, cubriendo valor por defecto, round-trip de modo, fit-page produciendo un zoom real sobre un documento cargado y la cancelación del modo de ajuste por zoom manual
Version 1.18.0
- Se añadió la propiedad PageColor a TPdfView, desacoplando el fondo de la página PDF renderizada del Color del control circundante. El valor por defecto es clWhite, de modo que las páginas PDF ahora se renderizan en blanco papel independientemente del tema de la aplicación anfitriona. Los visores en modo oscuro pueden mantener el área de desplazamiento oscura mientras dejan la página PDF real en blanco (o en el color que elija la aplicación)
- Cambio de comportamiento: las aplicaciones que solían establecer TPdfView.Color para recolorear la página PDF deben usar PageColor en su lugar. La experiencia por defecto mejora para el caso común (páginas blancas sobre fondos de control con tema) sin cambios en el código
- Se ampliaron las suites de regresión de Delphi y Lazarus a 120 casos cada una, y la suite de C++Builder a 103 casos, cubriendo valor por defecto y round-trip de color
Version 1.17.0
- Se añadieron interruptores de bloqueo de entrada de usuario a TPdfView para que las aplicaciones que integran el visor en kioscos, paneles de previsualización o contextos de solo lectura puedan desactivar gestos de navegación sin necesidad de subclasificar: AllowUserPageChange controla los nuevos atajos de teclado PgUp / PgDn / Ctrl+Home / Ctrl+End; ChangePageOnMouseScrolling controla los nuevos saltos de página con rueda arriba/abajo; AllowUserTextSelection está reservado para la futura vía de selección de texto por arrastre de ratón. Las tres tienen valor por defecto True para que las aplicaciones existentes se actualicen sin cambio de comportamiento
- La navegación de página por rueda del ratón omite Ctrl+wheel para que las aplicaciones puedan mantener Ctrl+wheel reservado para el zoom
- Se ampliaron las suites de regresión de Delphi y Lazarus a 118 casos cada una, y la suite de C++Builder a 101 casos, cubriendo valores por defecto y round-trip de los interruptores
Version 1.16.2
- Se amplió la cobertura de regresión de TPdfView para clics en enlaces de anotaciones cuando la página del visor difiere de la página del TPdf asociado, usando una vía real de clic de ratón sin interfaz en Delphi, Lazarus y C++Builder
- Las suites de Delphi y Lazarus ahora ejecutan 114 casos cada una, y C++Builder ahora ejecuta 99 casos
Version 1.16.1
- Se corrigió el manejo de clics en enlaces de TPdfView para que las acciones automáticas de anotación y enlaces web usen la página actualmente mostrada por el visor, incluso cuando el componente TPdf asociado está parado en otra página
- Se reforzó TPdfThumbnailView contra referencias colgantes a Pdf cuando se destruye el componente TPdf vinculado
- Se añadió cobertura de regresión sobre el tiempo de vida de la referencia a la miniatura; las suites de Delphi y Lazarus ahora ejecutan 113 casos cada una, y C++Builder ahora ejecuta 98 casos
- Se sincronizaron el README, la documentación de pruebas, el contenido de búsqueda/índice de la HTML Help y las salidas generadas del paquete C++ con las actualizaciones de integración de v1.7.0 a v1.16.0
Version 1.16.0
- Se añadió una nueva demo PrintDialog en Delphi (Demo/Delphi/PrintDialog) centrada en impresión N-up (1 / 2 / 4 / 9 páginas por hoja) con filtrado de páginas pares / impares, renderizado en escala de grises y bordes de celda opcionales de 1 píxel. Es un compañero pequeño y deliberado de la demo PrintPDF existente, que ya cubre previsualización, ficheros recientes, zoom y escalado
Version 1.15.0
- Se añadió un nuevo componente TPdfThumbnailView (unidad FPdfThumbnail) que renderiza una miniatura de página por fila en un panel lateral desplazable con resaltado al pasar el ratón y al seleccionar, además de navegación por clic. Diseñado para colocarse junto a un TPdfView para que los usuarios finales puedan navegar un documento largo por página
- El componente está registrado en la pestaña de la paleta losLab junto con TPdf y TPdfView; propiedades clave: Pdf, CurrentPageIndex, ThumbnailWidth, ThumbnailHeight, TextColor, HoverColor, SelectionColor, BorderColor y el evento OnPageClick
- Se ampliaron las suites de regresión de Delphi y Lazarus a 112 casos cada una, y la suite de C++Builder a 97 casos, cubriendo valores por defecto, round-trip del tamaño de miniatura, clamping de valores extremos, round-trip de color y asignación de manejadores de eventos
Version 1.14.0
- Se añadió una nueva demo BatchExport en Delphi (Demo/Delphi/BatchExport) que muestra cómo convertir muchos ficheros PDF a JPG en una sola pasada usando TPdf.LoadCustomDocument para carga en streaming, IPdfCancellationToken para cancelación cooperativa, y barras de progreso global por fichero + actual por página. La demo usa una instancia de TPdf por fichero (PDFium en sí no es thread-safe) y abre la carpeta de salida en el Explorador cuando la extracción finaliza con éxito
Version 1.13.0
- Se añadió un overlay de UI para renderizado asíncrono a TPdfView mediante tres nuevas propiedades: AsyncRendering, LoadingText y LoadingColor. Cuando AsyncRendering es True, la vía de pintado de una sola página dibuja un pequeño indicador “Loading...” sobre la página renderizada para que las aplicaciones que usan su propio worker para renderizados largos compartan una representación visual coherente
- Los valores por defecto preservan el comportamiento existente: AsyncRendering es False, de modo que las aplicaciones que no opten no verán ningún cambio visual
- La documentación aclara que PDFium en sí no es thread-safe — trasladar realmente el renderizado a un worker requiere que el llamador mantenga un TPdf por worker; la próxima demo de exportación por lotes muestra ese patrón
- Se ampliaron las suites de regresión de Delphi y Lazarus a 106 casos cada una, y la suite de C++Builder a 93 casos, cubriendo valores por defecto y el round-trip de las tres propiedades
Version 1.12.0
- Se añadió manejo de enlaces por clic a TPdfView. La nueva propiedad LinkOptions controla el comportamiento automático para los cuatro tipos de acciones de enlace PDF: goto (salto de página), URI (ShellExecute), launch (ShellExecute) y GotoR embebido (reservado). Los valores por defecto habilitan loAutoGoto y loAutoOpenURI; loAutoLaunch y loAutoEmbeddedGoto permanecen desactivados para que un clic accidental no pueda ejecutar un programa arbitrario
- Se añadieron los eventos OnAnnotationLinkClick y OnWebLinkClick que se disparan antes de cualquier acción automática y permiten a las aplicaciones inspeccionar el enlace, marcarlo como Handled o redirigirlo (por ejemplo, a un aviso de seguridad)
- La detección de clic en enlace solo se ejecuta cuando el gesto es un clic en lugar de un arrastre, usando un anclaje fresco de MouseDown, de modo que los gestos de paneo siguen fluyendo por la vía de desplazamiento existente sin cambios
- Se ampliaron las suites de regresión de Delphi y Lazarus a 102 casos cada una, y la suite de C++Builder a 91 casos, cubriendo LinkOptions por defecto, round-trip de conjunto y asignación de manejadores de eventos
Version 1.11.0
- Se añadió pulido visual a TPdfView: las propiedades PageShadowSize, PageShadowColor y PageBorderColor pintan una sombra opcional bajo el rectángulo de la página y un borde de un píxel a su alrededor. Los valores por defecto preservan el aspecto plano previo (PageShadowSize = 0; el borde se dibuja en el clBlack por defecto pero se funde con el fondo blanco por defecto hasta que el llamador cambie los colores)
- Se añadió una propiedad SmoothScroll como flag opt-in para una futura animación de desplazamiento incremental; la propiedad hoy hace round-trip y está cableada para que las aplicaciones puedan persistir la preferencia, mientras que el lado del renderizado sigue usando el comportamiento de desplazamiento inmediato existente
- Se ampliaron las suites de regresión de Delphi y Lazarus a 98 casos cada una, y la suite de C++Builder a 89 casos, cubriendo valores por defecto, round-trip de propiedades y el clamp del tamaño de sombra negativo
Version 1.10.0
- Se añadió inserción directa de imágenes mediante las nuevas sobrecargas TPdf.AddImage y TPdfView.AddImage que toman bien una ruta de fichero o un TBitmap, además del AddPicture existente basado en TPicture. AddImage(FileName) reconoce cualquier formato registrado con las unidades gráficas de VCL o LCL (BMP, PNG vía la unidad PngImage, JPG, etc.) y pasa por la misma tubería que AddPicture, por lo que el comportamiento es idéntico
- AddImage(TBitmap) omite el intermediario TPicture, lo que simplifica los llamadores que ya disponen de un TBitmap procedente de renderizado o de trabajo de generación por lotes
- Se ampliaron las suites de regresión de Delphi y Lazarus a 92 casos cada una, y la suite de C++Builder a 84 casos, cubriendo inserción de bitmap, límites del objeto de página, rechazo de bitmap nil y carga de fichero BMP
Version 1.9.0
- Se añadió soporte de matriz de transformación de alto nivel mediante la nueva clase TPdfMatrix en la unidad FPdfMatrix. TPdfMatrix envuelve el FS_MATRIX de PDFium con una API OO para Translate, Scale, Rotate, HorizontalFlip, VerticalFlip, CentralFlip, Skew y Multiply, adecuada para componer transformaciones antes de pasarlas a FPDFPageObj_SetMatrix y APIs similares de PDFium
- TPdfMatrix.Multiply hace correctamente un snapshot de los seis elementos de la matriz antes de calcular los nuevos valores de fila, corrigiendo un problema latente en el que las implementaciones alternativas en Pascal sobrescribían elementos anteriores durante la misma llamada y producían resultados incorrectos para cualquier composición más allá de la pura traslación
- Se ampliaron las suites de regresión de Delphi y Lazarus a 88 casos cada una, y la suite de C++Builder a 81 casos, cubriendo identidad, reset, translate / scale / flip, orden de composición post-multiplicativa y el caso de regresión de Multiply
Version 1.8.0
- Se añadió carga de stream bajo demanda mediante el nuevo método TPdf.LoadCustomDocument(AStream, AOwnsStream) y la clase auxiliar TPdfStreamAdapter, respaldados por FPDF_LoadCustomDocument de PDFium. PDFium ahora lee bloques desde el TStream proporcionado únicamente cuando los necesita, de modo que los PDF muy grandes o remotos ya no requieren una copia previa en memoria
- Se añadió propiedad opcional del stream: pasar AOwnsStream = True entrega el tiempo de vida del TStream a TPdf, que lo libera cuando se ejecuta UnloadDocument
- Se ampliaron las suites de regresión de Delphi y Lazarus a 79 casos cada una, y la suite de C++Builder a 75 casos, cubriendo carga en streaming vía TFileStream, limpieza de owned-stream y el contrato “el stream de propiedad externa sobrevive al unload”
Version 1.7.0
- Se añadieron primitivas de cancelación asíncrona cooperativa en la nueva unidad FPdfAsync, exponiendo IPdfCancellationToken / IPdfCancellationTokenSource y un singleton reutilizable PdfNoCancellationToken para que los flujos de renderizado y exportación de larga duración puedan soportar semántica limpia de cancelación desde la UI
- Se añadió un helper ligero TPdfFuture<T> que ejecuta un worker en un hilo de fondo y publica el sobre TPdfFutureResult<T> de vuelta al hilo principal, distinguiendo los casos de éxito, cancelación y fallo
- Se ampliaron las suites de regresión de Delphi y Lazarus a 76 casos cada una, y la suite de C++Builder a 73 casos, con cobertura compartida del estado de cancelación, cancelación idempotente, fan-out de callbacks y registro post-cancelación
Version 1.6.10
- Se añadió acceso de alto nivel TPdf.PrintPageRanges a la preferencia del visor PDF para rango de páginas de impresión, devolviendo rangos de página de base uno para el código de la aplicación
- Se añadieron TPdf.SetFormFieldFlags / SetFormFieldFlagsAt y los helpers TPdfView correspondientes para que las aplicaciones puedan actualizar los flags de campo de AcroForm mediante la API pública, incluyendo cobertura para los flags de password y multi-select
- Se reforzó la cobertura del ABI de las bindings de PDFium para FPDF_DWORD de tamaño Windows, callbacks FPDF_FILEACCESS y campos de slot del embedder V8
Version 1.6.9
- Se añadieron bindings de renderizado Skia de bajo nivel para las APIs recientemente exportadas FPDF_RenderPageSkia y FPDF_FFLDrawSkia en las DLLs PDFium estándar y V8 incluidas
- Se ampliaron las verificaciones de cobertura de bindings públicas, de modo que la carga de la DLL estándar y V8 ahora verifica los puntos de entrada de renderizado Skia junto con las comprobaciones de capacidades V8/XFA existentes
Version 1.6.8
- Se añadieron TPdf.SetTextPositions y TPdfSingleArray para establecer posiciones por carácter en objetos de texto existentes mediante la API FPDFText_SetPositions recientemente exportada
- Se promovió FPDFText_SetPositions a binding requerido para las DLLs PDFium incluidas actualmente, mientras se confirma que los puntos de entrada de renderizado Skia siguen no disponibles porque las DLLs aún no los exportan
- Se ampliaron las suites de regresión de Delphi, C++Builder y Lazarus a 65 casos cada una con cobertura de posiciones de texto
Version 1.6.7
- Se añadió acceso de alto nivel TPdf a las acciones JavaScript del name-tree del documento, devolviendo los nombres de acción y los scripts mediante JavaScriptAction y JavaScriptActions
- Se añadió TPdf.FileIdentifier para leer los IDs de trailer permanente y cambiante como TBytes binarios sin el byte terminador de PDFium
- Se añadieron TPdf.PageBox, GetPageBox y SetPageBox para MediaBox, CropBox, BleedBox, TrimBox y ArtBox en la página actual
- Se confirmó que las DLLs PDFium incluidas actualmente dejan únicamente los puntos de entrada de renderizado Skia no disponibles en runtime porque esos exports no están presentes
- Se ampliaron las suites de regresión de Delphi, C++Builder y Lazarus a 64 casos cada una con cobertura de JavaScript de documento, ID de trailer y page-box
Version 1.6.6
- Se añadió soporte en runtime para la DLL PDFium habilitada con V8 incluida. Establecer EnableV8Engine antes de cargar ahora selecciona pdfium.v8.dll del árbol DLLs\Win32 o DLLs\Win64 y expone bindings exclusivos de V8/XFA cuando la DLL cargada los proporciona
- Se añadieron V8FeaturesAvailable, XfaBStrHelpersAvailable, GetRecommendedV8Flags y bindings opcionales de bajo nivel para FPDF_BStr_*, FPDF_GetRecommendedV8Flags y FPDF_GetArrayBufferAllocatorSharedInstance
- Se hizo opcional FPDFText_SetPositions para que PDFium Delphi Component siga cargando con DLLs PDFium que no exporten ese setter experimental de posición de texto
- Se ampliaron las suites de regresión de Delphi, C++Builder y Lazarus a 61 casos cada una con cobertura de capacidades de la DLL estándar y la DLL V8