Notas de la versión de PDFium Delphi Component
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 online de revocación de OpenSSL conservan el estado CRL anterior, su motivo, error nativo y certificado afectado cuando no hay evidencia ni responder OCSP disponible, manteniendo diagnósticos correctos de CRL vencidas
Version 3.137.0
Agregado (Added)
- Las compilaciones nativas Free Pascal/LCL admiten Linux Qt6 y macOS Cocoa con resolución de fuentes de la plataforma, almacenamiento temporal privado, carga de documentos, edición, formularios, guardado y renderizado
- La firma con macOS Keychain admite una ruta de Keychain limitada a la consulta y exportación offline acotada de la cadena de certificados, con firma nativa Free Pascal y Delphi y transportes de sellado de tiempo
- El renderizado paralelo informa la ruta real del módulo de cada worker, su dirección de inicialización y el resultado de descarga, y rechaza los loaders nativos que reutilizan una imagen PDFium existente
Corregido (Fixed)
- Los bindings Unix de PDFium conservan los anchos LP64 de unsigned-long en callbacks y búferes, incluidas las lecturas de flujos personalizados que superan 4 GiB
- El renderizado LCL nativo respeta el orden de bytes y la disposición de canales del bitmap, conservando los colores en la salida Cocoa y el renderizado a un contexto de dispositivo
- El renderizado de bitmaps, mosaicos y páginas progresivas conserva el alpha de fondo transparente para clNone y clDefault, independientemente de la consulta nativa de transparencia de la página
- La firma identifica correctamente los algoritmos de clave pública de los certificados, incluidas las claves EC; la verificación CMS de macOS conserva resultados independientes para la firma externa y el sello de tiempo e informa explícitamente cuando no admite la verificación RSA-PSS
- La validación PAdES de sellos de tiempo exige un EKU id-kp-timeStamping crítico y exclusivo; OpenSSL evalúa cadenas TSA básicas sin aplicarles incorrectamente un propósito de certificado S/MIME
- Las confirmaciones atómicas de archivos Unix conservan la nueva línea base incremental cuando falla el flush del directorio después del reemplazo, exponiendo la excepción de salida confirmada y el resultado de durabilidad incompleta
Cambiado (Changed)
- Los futures Delphi POSIX aceptan la prioridad de hilo predeterminada y rechazan las solicitudes de prioridad no admitidas antes de iniciar un worker
Version 3.136.0
Agregado (Added)
- Las transformaciones ICC opcionales LittleCMS y la conversión de color de documentos usan los componentes originales de texto, vectores e imágenes de 8-bit o 16-bit, conservan los colores spot seleccionados e informan explícitamente el contenido no admitido
- La redacción compleja conserva el contenido compatible de 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 redacción rechaza texto de reemplazo Tagged, XFA, capas de contenido opcional, recorte de texto y estados de pintura que no se pueden verificar, incluidos los operadores divididos entre flujos de contenido, evitando exportar semántica no admitida de contenido sensible
Version 3.135.0
Agregado (Added)
- La comparación de anotaciones y widgets AcroForm informa cambios de propiedades independientemente de los píxeles de la página, con nombres estables, mapeos explícitos de páginas, informes de ambigüedad y límites de superposición antes y después
- Las celdas de tabla admiten estilos de texto mixtos e imágenes con texto alternativo, continuación opcional entre páginas de celdas que abarcan varias filas, subtotales y etiquetas de continuación, conservando las relaciones Tagged PDF
Corregido (Fixed)
- La generación de composición etiquetada inicializa la biblioteca nativa antes de comprobar capacidades, por lo que puede ser la primera operación de un componente de documento nuevo
- Varios reemplazos en un mismo objeto de texto se ajustan una sola vez contra sus límites originales, respetando la escala horizontal mínima global y evitando ediciones intermedias innecesarias
Version 3.134.0
Agregado (Added)
- La combinación de navegación conserva destinos con nombre y enlaces internos de página al seleccionar, reordenar y repetir páginas, con políticas explícitas de colisiones y verificación transaccional
- El reemplazo de texto con estilo agrega 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 del firmante predeterminado fuera de Windows
- La verificación OpenSSL agrega evidencia OCSP autenticada offline y online acotada, identidades de certificados que fallan y diagnósticos opcionales para cada firmante CMS
- El verificador Security.framework de FPC macOS informa resultados independientes de criptografía, confianza de la cadena y revocación, con anclas explícitas de confianza y evidencia OCSP suministrada
Corregido (Fixed)
- La extracción de URI de anotaciones Link proporciona el búfer nativo completo, incluido su terminador, para devolver correctamente los destinos válidos
Version 3.133.0
Agregado (Added)
- La combinación transaccional de AcroForm admite páginas seleccionadas, rechazo de campos, cambio de nombres, namespaces y campos compartidos compatibles de texto o 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 de procesamiento finitos
Corregido (Fixed)
- FormField lee valores heredados del padre y confirma las ediciones de texto de forma consistente entre widgets compartidos, con persistencia al guardar y reabrir y comprobaciones de solo lectura
- La regeneración de apariencias de widgets de texto heredados restaura los valores del padre sin dejar un valor que los oculte en el widget, y una asignación exitosa de campo invalida las cachés de páginas compartidas
Version 3.132.0
Agregado (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 la jerarquía de marcadores, los estilos, las acciones URI y los destinos reasignados al importar páginas seleccionadas, repetidas y reordenadas
- El proveedor opcional Tesseract OCR admite diagnósticos explícitos de dependencias, geometría de palabras Unicode, cancelación y presupuestos de reconocimiento, con verificación de guardado y reapertura de la capa buscable
Seguridad (Security)
- La política RSA-PSS evalúa los parámetros completos de la firma y de la clave pública restringida, y rechaza DER mal formado y restricciones incompatibles de hash, máscara, sal o trailer
Corregido (Fixed)
- La verificación del guardado de marcadores ya no rechaza los elementos hoja por diferencias de estado expandido que solo corresponden a ramas
Version 3.131.0
Agregado (Added)
- WatermarkStamp ahora acepta PDF de destino y de sello, un intervalo de páginas de destino y salida solo con números de página, con colocación proporcional para páginas de tamaños distintos
- MergePDF ahora muestra una vista previa de las páginas seleccionadas de cada entrada y de su intervalo de destino antes de combinar, y permite una sola entrada para extraer páginas
Corregido (Fixed)
- MergePDF valida todos los orígenes 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 archivos de origen y plantilla y guarda de forma confiable los números de página incluso cuando ambas superposiciones de sello están deshabilitadas
Cambiado (Changed)
- Cada directorio de demos nativos se concentra en 22 flujos completos; SecurityAudit y XfdfLab se trasladaron a Miscellaneous, con rutas de proyectos y navegación corregidas
Eliminado (Removed)
- Se eliminó el recorrido fijo AnnotationsLab; la creación, inspección e intercambio de anotaciones siguen cubiertos por los ejemplos XFDF, extracción de contenido y las pruebas de API
Version 3.130.0
Cambiado (Changed)
- Se reorganizó cada directorio de demos nativos en torno a 24 flujos de trabajo completos, con nueve temas de API enfocados bajo Miscellaneous y una guía aparte para elegir el primer demo
- Los ejemplos enfocados de anotaciones, accesibilidad, fuentes, navegación, exportación de texto, renderizado de páginas a imágenes, preferencias de impresión, interacción y XFA siguen disponibles con su propio código fuente y sus entradas incluidas
Eliminado (Removed)
- Se eliminaron los proyectos minimalistas CJKTextLab y RTLTextLab; la creación de contenido Unicode sigue disponible en CreatePDF, y las APIs de texto con shaping permanecen documentadas en la referencia de API
Corregido (Fixed)
- Se corrigió el recorrido por las APIs de accesibilidad de C++Builder, que fallaba al exportar su script de voz
- Se corrigió el ejemplo de anotaciones de C++Builder, que usaba offsets de arreglo incorrectos para las coordenadas de resaltado
Version 3.129.0
Cambiado (Changed)
- Todos los demos nativos ahora son autocontenidos: la lógica de muestra se movió a los proyectos que la usan, los PDF del showcase se incluyeron con los proyectos de visualización y extracción correspondientes, y se eliminó el directorio Demo/Shared
- Los recorridos de características offline, las vistas previas activas, los formularios editables, los reportes ya poblados, los adjuntos, la navegación, las preferencias de impresión y la inspección de XFA estático siguen disponibles al copiar los proyectos por separado
- FontProperties ahora abre con las métricas reales de fuentes y caracteres ya en pantalla, y analiza de inmediato el primer objeto de texto después de abrir otro documento
Corregido (Fixed)
- La barra de experiencia de PDFViewer quedó con la misma ubicación y el mismo fondo en todas las variantes nativas, y FontProperties libera su asociación con el visor antes del cierre
Version 3.128.0
Agregado (Added)
- Se agregó un demo showcase offline de seis páginas con texto real, gráficos vectoriales, imágenes embebidas, una tabla, campos AcroForm, marcadores, links, anotaciones y archivos adjuntos
- Se agregaron experiencias de visualización en 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 ahora abre una vista previa activa de dos páginas con metadatos editables y opciones de contenido, objetos reales de imagen y anotación, y una página Unicode opcional antes de guardar
- Los ejemplos enfocados de visualización, búsqueda, extracción, formularios y navegación ahora abren flujos de trabajo ya poblados; los ejemplos de adjuntos, preferencias de impresión y XFA estático incluyen datos reales específicos de cada función
Corregido (Fixed)
- Se corrigió el manejo del ciclo de vida y del foco del visor durante el arranque, el reemplazo de documentos, la regeneración de la vista previa y el cierre
- Se corrigió el editor de valores de FormFill de Lazarus que permanecía deshabilitado tras seleccionar el primer campo al arrancar
- Se corrigió la vinculación de documentos de SearchAndSelect y los reportes de extracción que omitían campos de formulario en páginas posteriores o consultaban encabezados de archivo no disponibles para las muestras generadas en memoria
Version 3.127.0
Cambiado (Changed)
- Los demos MultiPageViewer usan las APIs integradas de selección de texto y portapapeles del visor, manteniendo la selección consistente entre los distintos layouts de página y eliminando el modo de selección por doble clic que funcionaba por separado
- La guía de ejemplos mapea los 35 temas de demos a sus flujos de trabajo distintos, y los ejemplos de consola de accesibilidad, intake y preflight de Delphi y Lazarus comparten sus implementaciones en Pascal
Agregado (Added)
- XfdfLab puede guardar el PDF después de 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 MultiPageViewer de C++Builder y Lazarus se abren sin propiedades de formulario no soportadas, y todos los demos MultiPageViewer desconectan su documento antes de cerrar
- El workbench de accesibilidad de Lazarus genera miniaturas JPEG de las páginas para su reporte de revisión en HTML
- Los demos ExtractImages crean una muestra de dos páginas con objetos de imagen embebidos reales, de modo que el flujo de extracción predeterminado produce cuatro imágenes
- El ejemplo de consola de ida y vuelta de XFDF preserva 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 de XFA completo funciona con la configuración predeterminada de selección de texto, reemplaza el texto seleccionado durante la entrada por teclado, respeta los campos de solo lectura y los eventos de formulario deshabilitados, y refresca los handles de página mostrados después de cambios de layout dinámicos
- Las bibliotecas V8 de Windows rechazan atributos XDP malformados, atributos duplicados, uso inválido de namespaces y declaraciones XML inconsistentes 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 refieren al mismo grafo de objetos, evitando que ediciones posteriores de la página se acepten como actualizaciones permitidas de formulario o 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 ahora actualiza
TPdf.PageCountyOnXfaPageCountChangedcon el conteo total real de páginas después de agregar o eliminar páginas, manteniendo la navegación del host en sincronía con el layout del formulario - Las bibliotecas V8 de Windows actualizadas refrescan la geometría de los widgets de entrada después de cambios de layout dinámicos de XFA, manteniendo el texto y las áreas de hit de entrada alineadas cuando los campos se mueven a otra página
Version 3.126.0
Agregado (Added)
- Las bibliotecas V8 de Win32 y Win64 actualizadas preservan los comentarios XML y las processing instructions fuera de los datasets vivos y los paquetes de formulario al guardar documentos XFA de flujo único soportados, incluyendo entradas UTF-8 y UTF-16
Corregido (Fixed)
- El guardado de XFA de flujo único rechaza codificaciones UTF-8 o UTF-16 inválidas, tags incompletos, referencias a entidades inválidas y processing instructions malformadas en lugar de reescribir en silencio esas entradas; las construcciones no soportadas en paquetes de datos vivos, declaraciones DTD y XMLDSig siguen siendo fallas de guardado explícitas
- El copiado, cortado y pegado de formularios del visor reintentan brevemente cuando otro thread o aplicación mantiene el portapapeles de Windows, permitiendo que una contención pasajera se despeje; un corte fallido aún preserva el texto original del campo
Version 3.125.3
Corregido (Fixed)
- Las bibliotecas
pdfium.dllordinarias de Win32 y Win64 actualizadas ahora reportan falla cuando falla la escritura final del PDF en buffer, igualando la reparación enviada antes en las bibliotecas V8
Version 3.125.2
Corregido (Fixed)
- Las bibliotecas V8 de Windows actualizadas preservan el texto XFA editado a través del guardado y la reapertura, incluyendo valores vacíos, espacios en blanco originales, saltos de línea y caracteres Unicode suplementarios, tanto para arreglos de paquetes como para documentos XDP de flujo único soportados
- Los errores de exportación de paquetes XFA y las fallas finales del escritor con buffer ahora reportan falla de guardado en las bibliotecas 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 bibliotecas V8 actualizadas preservan la plataforma V8 y el isolate suministrados explícitamente por la aplicación host a través de la inicialización y la destrucción de PDFium
- Una ruta explícita en
LibraryNameahora selecciona exactamente ese runtime en cualquiera de los modos de motor, incluyendoEnableV8Engine=True; una ruta explícita ausente falla en lugar de cargar otra biblioteca incluida
Version 3.125.1
Corregido (Fixed)
ValidatePdfFilesParallelya no corrompe el motor PDFium compartido: los worker threads abrían e inspeccionaban documentos de forma concurrente, lo que hacía que algunos documentos fallaran con errores de carga o access violations y podía crashear el proceso o romper operaciones PDF posteriores; la parte PDFium de cada documento ahora se procesa una a la vez mientras que la evaluación de reglas sigue ejecutándose en paralelo- Un documento que no se puede abrir durante la validación por lotes ahora reporta el error de carga real en lugar del mensaje posterior "no active PDF document"
Version 3.125.0
Agregado (Added)
PdfLibraryConfigurationSupportErrorinforma si unTPdfLibraryConfigurationse puede usar con un build de PDFium con capacidades de Skia y Fontations determinadas
Corregido (Fixed)
- Solicitar
prpSkiaen un build de PDFium sin Skia, opfbpFontationsen un build sin Fontations, ahora hace que la carga de la biblioteca lanceEPdfErroren lugar de topar con un chequeo nativo que detenía el proceso o dejaba PDFium a medio inicializar; la configuración queda sin sellar para que la aplicación pueda elegir otras opciones y volver a cargar
Version 3.124.0
Cambiado (Changed)
- La validación PAdES ahora aplica los signature suites de ETSI TS 119 312 a las firmas RSA en lugar de aceptar cualquier algoritmo RSA:
AlgorithmPolicyStatusespcsInvalidpara digests MD2, MD4 y MD5, ypcsIndeterminatepara SHA-1 y digests de 112 bits como SHA-224, que ya no se aceptan para la validación actual; las firmas SHA-1 conservan su resultado global de integridad y se marcan para revisión en lugar de rechazarse - Una firma RSA cuyo
digestAlgorithmdifiere del digest fijado por su algoritmo de firma (por ejemplo sha256WithRSAEncryption sobre un digest SHA-1) ahora se reporta comoppeiSignatureAlgorithmMismatchy falla la integridad, igual que los algoritmos de firma RSA sobre una clave de firmante no RSA - Las firmas RSA cuyo certificado de firmante no se puede encontrar ahora reportan
pcsIndeterminate, coincidiendo con el comportamiento existente de ECDSA; los digests no reconocidos y los OID RSA que no son de firma reportanpcsUnsupported - Las firmas RSA PKCS #1 v1.5 con digests SHA3 y el identificador legacy OIW sha1WithRSASignature ahora se reconocen como RSA
Version 3.123.0
Agregado (Added)
PdfNativeRendererTypeinforma qué renderer selecciona unTPdfRendererPreferencepara un build de PDFium dado, conprpDefaultresolviendo a Skia en runtimes con Skia habilitado y a AGG en caso contrario
Corregido (Fixed)
- Habilitar
BrotliEnabledoIsolatePerDocumentenConfigurePdfLibraryya no cambia el renderizado de Skia a AGG cuando la preferencia de renderer se deja enprpDefault; los runtimes incluidos con Skia habilitado ahora conservan su renderer predeterminado, de modo que la salida de página ya no cambia con estas opciones no relacionadas
Version 3.122.2
Corregido (Fixed)
- Los builds de Free Pascal y Lazarus ahora pasan los nombres de archivo y las contraseñas a PDFium como UTF-8 en todas las rutas de carga (archivo, memoria, stream personalizado y carga progresiva), de modo que los documentos en carpetas con nombres en chino, japonés u otros caracteres 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)
LastLoadReportahora se reemplaza en cada carga fallida: unActive:= Truefallido, que deja el componente inactivo sin lanzar excepción, y las llamadas fallidas aLoadDocumentoLoadCustomDocumenta secas reportanplsFailedcon el texto del error, de modo que el código por lotes que reutiliza unTPdfya no ve el archivo anterior reportado como cargado- La página de ayuda de
Activeahora describe el comportamiento real ante fallas (sin excepción, el componente queda inactivo, detalles enLastLoadReport) y queFileNamesolo se puede cambiar mientras el componente está inactivo
Version 3.122.0
Agregado (Added)
EPdfAssocFilesErrorenFPdfAssocFilesinforma por quéInjectAssociateFilesno pudo inyectar: sin trailer ni catálogo legible en el origen, o unTargetPagenegativo o que nombra una página que no existe; el stream de destino queda sin modificar
Cambiado (Changed)
SaveAsWithAssociateFilesySaveAsWithAssociateFilesToStreamahora lanzanEPdfErrorcuandoTAssocFilesOptions.TargetPageestá fuera de0..PageCount; esos valores antes se adjuntaban al catálogo del documento, al contrario de lo documentado
Corregido (Fixed)
SaveAsWithAssociateFilesySaveAsWithAssociateFilesToStreamahora devuelvenFalsecuando el documento guardado no se puede parsear para la inyección, en lugar de escribirlo sin cambios y devolverTruesin los archivos solicitadosSaveAsWithAssociateFilesya no trunca un archivo de destino existente antes de que la salida se haya producido; 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) ahora se adjuntan a la página en esa posición dentro del orden de páginas del documento; antes los archivos podían caer en una página distinta cuando los objetos de página se almacenaban en el archivo en un orden diferente al mostrado, por ejemplo después de reordenar o insertar páginas
Version 3.121.3
Corregido (Fixed)
- Los archivos asociados guardados con
SaveAsWithAssociateFilesahora conservan intactos los nombres y descripciones de archivo en chino, japonés y otros caracteres 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 crudos (Free Pascal) - El nombre de archivo legacy
/Fahora siempre es ASCII imprimible portable, con los caracteres no ASCII reemplazados 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 producen diccionarios de archivos incrustados malformados ni impiden la validación PDF/A-3
Version 3.121.1
Corregido (Fixed)
- Leer una anotación y escribir de vuelta los cambios ya no crea flujos de apariencia rollover y down vacíos cuando esos flujos están ausentes, preservando los requisitos de apariencia de anotaciones de PDF/A
Version 3.121.0
Agregado (Added)
- La verificación CMS de OpenSSL puede recuperar certificados intermedios AIA por HTTP(S) y CRL cuando
OnlineRetrievalestá habilitado, con un tiempo de espera compartido y límites de solicitudes y de tamaño de respuesta; los certificados descargados permanecen como no confiables hasta que la cadena de confianza configurada los valide - La recuperación en línea usa WinHTTP en Windows y libcurl cuando está disponible en FPC Unix, preserva 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 clásica de referencias cruzadas asigna su tabla de salida una sola vez y llena las ranuras de objetos directamente, evitando el trabajo cuadrático con números de objeto dispersos grandes, al tiempo que conserva los límites de recursos del parser y las generaciones de objetos más recientes
- La salida PDF/X-1a exige un perfil de impresora ICC v2 CMYK estructuralmente válido en lugar de incrustar en silencio el perfil RGB predeterminado; los perfiles inválidos fallan antes de que un archivo de destino existente se abra para reemplazo
- 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 inválidos; las etiquetas de condición de salida predeterminadas siguen el perfil suministrado mientras que las etiquetas explícitas del llamador se preservan
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 generaban un error de asignación y se reportaban como fallidos; ahora cada documento obtiene su propia instancia en las ediciones Delphi, Lazarus y C++Builder
- El documento de ejemplo del demo de marca 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 de XFA y XFDF reportan la apertura fallida de un documento como un mensaje en lugar de una excepción no manejada, el demo de adjuntos puede iniciar un documento nuevo con otro ya cargado, y el visor de Lazarus libera el bitmap que guarda
- El demo de impresión de Delphi ahora aplica 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, omite las páginas que fallan al renderizar y restaura la vista previa después de imprimir
- Los demos interactivos cuyo cargador se traga las fallas 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 parsea decimales sin depender de la configuración regional del sistema
- La prueba de timestamp de PAdES ahora sí verifica que el validador alcanza el nivel B-T después de la inyección del timestamp de firma, con un documento de prueba con ByteRange autoconsistente
- Las pruebas de cobertura de API y de PDF/A ya no tratan cualquier falla de carga como un salto por entorno cuando pdfium.dll está cargado, y una nueva prueba de regresión cubre el descifrado de documentos cuyos valores de cadena son serializados como literal strings por generadores de PDF de terceros
Version 3.120.3
Corregido (Fixed)
EncryptDocumentBytesya no descarta todos los objetos de la revisión base cuando el PDF de origen se guardó de forma incremental: la cadena de referencias cruzadas clásica ahora se recorre a través de/Prevdesde la más nueva con prioridad para las entradas recientes, se rechaza la fuente cuando ya está cifrada, la palabra clavestreamdebe cerrar un diccionario antes de tratarse como datos de flujo, y la extensión del objeto final se acota por el xref de origen en lugar del primerendobjdentro de sus bytes- Los documentos cifrados cuyos valores de cadena se serializan como literal strings, producidos por generadores de PDF 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 con el mismo número que el flujo del perfil ICC incrustado cuando el trailer de 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 los espacios en blanco circundantes, de modo que un XMP en forma de elemento con relleno legítimo ya no reporta una discrepancia falsa de Info - La validación PDF/UA reconoce el XMP
pdfuaid:parten forma de atributo, expande los object streams antes de sus escaneos de bytes como los demás validadores de estándares, comprueba el bit de cifrado/Ptambién en documentos cross-reference-stream 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 recolecta y reescribe todos los objetos de página dos veces cuando la fuente trae una jerarquía DPart rota que falló la validación después de que la lista de páginas ya se hubiera llenado
- Firmar en nivel PAdES B-T o superior sin
TsaUrlahora genera una excepción en lugar de producir en silencio una firma B-B, y el sello de tiempo de documento B-LTA deriva su propio nonce en lugar de reenviar el de quien llama - La inyección de sello de tiempo de firma CMS rechaza la entrada multi-firmante en lugar de descartar en silencio cada SignerInfo después del primero, la versión de SignedData pasa a 3 con un sid de subjectKeyIdentifier,
certReq FALSEse omite de las solicitudes de timestamp según DER, y una falla de transporte WinHTTP a mitad del cuerpo se reporta como error de transporte en lugar de un 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 una 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 en la página antes de registrar el objeto para 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 solitario permitido por ISO 32000-1 7.3.8.1
Cambiado (Changed)
- La build del paquete Win64x de C++Builder de la versión de prueba elimina un
PDFiumPas.libCOFF obsoleto dejado por una build completa anterior para que los dos sabores de librería de importación no puedan enviarse juntos, el instalador FULL excluye los archivos de desarrollo solo locales (packagefiles.xml, documentos de estado) de su regla general, y las builds de demos posteriores a la instalación fijan la raíz del IDE mediante la variablePDFiumPas_BDS_ROOTque los scripts de build 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 puntos de código exactos tanto del documento vivo como después de un guardado: los espacios ya no vuelven como U+00A0 y los guiones ya no como U+00AD con la build actual de PDFium - Las fuentes del sistema se incrustan como fuentes CID con el punto de código como clave, con un CID por carácter Unicode y un
CIDToGIDMapexplícito, de modo que un glifo compartido por varios caracteres (espacio y espacio sin ruptura, guion y guion opcional, Omega y signo de ohm) conserva cada uno fielmente en cualquier visor; las fuentes sin subtabla cmap Unicode conservan la ruta de incrustación anterior
Version 3.120.1
Corregido (Fixed)
- Los documentos guardados con fuentes subset ya no corrompen su texto extraído al recargarlos: el CMap ToUnicode que serializa pdfium podía mapear un CID a dos puntos de código distintos (espacios como U+00A0, guiones como U+00AD), y cada guardado completo ahora repara esos mapeos contradictorios en sitio dejando la estructura del CMap idéntica byte a byte, de modo que el lector PDFium, MuPDF y qpdf extraen todos los caracteres originales
- Los guardados incrementales, las actualizaciones sparse y los documentos cross-reference-stream nunca se reescriben por la reparación y pasan sin cambios; los archivos sin un mapeo contradictorio se copian byte a byte
- El fixture de prueba
sample.pdfversionado se regeneró a través de la ruta de guardado reparada, y las pruebas de política de carga ahora localizan las entradas xref dinámicamente en lugar de fijar offsets del fixture en el código
Version 3.120.0
Agregado (Added)
- Los marcadores reportan su estilo de texto de esquema:
TBookmark.Stylelleva las marcas de cursiva y negrita leídas a través del nuevo binding deFPDFBookmark_GetStyle, yBookmarkStyleFeaturesAvailableindica si el pdfium.dll cargado lo exporta - Los adjuntos exponen su relación de archivo asociado de PDF 2.0:
AttachmentRelationship[], el campoRelationshipdeTPdfAttachmentMetadatay deTPdfAnnotationAttachmentleen el nombre/AFRelationshipa través del nuevo binding deFPDFAttachment_GetAFRelationship, protegido porAttachmentRelationshipFeaturesAvailable GetObjectRenderedStrokePatternrasteriza el patrón de mosaico con el que se traza un objeto de camino en un bitmap propiedad de quien llama a través del nuevo binding deFPDFPageObj_GetRenderedStrokePattern;StrokePatternRenderingFeaturesAvailableinforma sobre la exportaciónTPdfLibraryConfiguration.IsolatePerDocumentse mapea a la marcam_IsolatePerDocumentdeFPDF_LIBRARY_CONFIGversión 7 para que las builds con V8 puedan dar a cada documento su propio isolate;ConfigurePdfLibraryrechaza la marca junto con unV8Isolateexplícito
Cambiado (Changed)
- Los 476 exports públicos de los encabezados PDFium actuales están vinculados; los tres nuevos puntos de entrada cargan de forma tolerante, de modo que las implementaciones con un pdfium.dll más antiguo siguen funcionando y las funciones correspondientes reportan resultados vacíos o
nil
Version 3.119.1
Corregido (Fixed)
- La validación de confianza sin conexión de Windows también restringe la recuperación de revocación a datos en caché, lo que evita solicitudes de red implícitas de CRL u OCSP cuando la recuperación en línea está deshabilitada
- Las fallas de revocación de Windows preservan el error independiente de confianza de cadena y exponen las razones de revocación y los diagnósticos nativos en los resultados PAdES y los informes de evidencia
Version 3.119.0
Agregado (Added)
- La validación de confianza PAdES y los informes de evidencia exponen razones de revocación y errores nativos separados para las firmas del documento y los timestamps, incluidos campos JSON y columnas CSV agregadas al final
Version 3.118.0
Agregado (Added)
- Los resultados de verificación CMS exponen
RevocationReasonyRevocationError, con diagnósticos OpenSSL para CRL locales vencidas, no disponibles e inválidas
Corregido (Fixed)
- OpenSSL reporta los certificados explícitamente revocados como inválidos cuando la confianza de cadena tiene éxito y la verificación CRL local confirma la revocación, conservando resultados separados de firma y confianza
Version 3.117.1
Corregido (Fixed)
- Los guardados con versión explícita aceptan formularios multipágina válidos con cross-reference streams comprimidos con predictor en lugar de reportar incorrectamente una sección de referencias cruzadas malformada
Version 3.117.0
Agregado (Added)
- La detección de tablas lee bordes y sombreados dibujados como rectángulos rellenos: un cuadro relleno con un grosor no mayor que el nuevo
MaxRulingThicknessse convierte en una línea 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 líneas y filas de título combinadas en lugar de fragmentos de espacios en blanco.DetectFilledRulingsdesactiva este comportamiento - Las coordenadas de las líneas 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 canal pequeño - Las líneas 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 comienza 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 líneas 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 reportan 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 líneas; la detección por espacios en blanco conserva su mínimo de dos filas, y el presupuesto predeterminado 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 por 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 de Lazarus y los metadatos de versión del instalador reportan 3.117.0
Version 3.116.4
Agregado (Added)
- TableExtractionLab agrega procesamiento por lotes de carpetas:
Batch folderejecutaExtractDocumentTablessobre cada PDF de una carpeta seleccionada, reporta los conteos 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 un solo documento como en la por lotes, y las filas del lote reportan 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 las fallas de carga silenciosas que aparecían como errores de componente inactivo a media ejecución de la carpeta
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete de Lazarus y los metadatos de versión del instalador reportan 3.116.4
Version 3.116.3
Cambiado (Changed)
- La muestra TableExtractionLab en las tres cadenas de herramientas ahora escribe su documento de muestra generado en
TableExtractionSample.pdfjunto al ejecutable del demo en lugar de conservarlo solo en memoria; cuando la carpeta no se puede escribir, el laboratorio vuelve al comportamiento anterior en memoria y lo reporta en la línea de estado TPdf.AboutInfo, los metadatos del paquete de Lazarus y los metadatos del instalador reportan 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 traen los compiladores más nuevos; 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 solo literal, y la fusión de datasets XFA asignaba entreTBytesy un campo de array dinámico simple, algo que los compiladores anteriores a XE7 rechazan. Los compiladores antiguos ahora enlazanGetTickCount64desde 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 por elemento
Cambiado (Changed)
TPdf.AboutInfo, los metadatos del paquete de Lazarus y los metadatos del instalador reportan 3.116.2
Version 3.116.1
Agregado (Added)
Demo\Delphi\TableExtractionLab,Demo\CBuilder\TableExtractionLabyDemo\Lazarus\TableExtractionLabconvierten la detección de tablas en un solo flujo de trabajo. El laboratorio construye un documento de muestra con una tabla con líneas que tiene celdas de encabezado combinadas, una tabla alineada por espacios en blanco sin líneas y una tabla larga que se corta en un límite de página, y luego ejecutaExtractTablesoExtractDocumentTablesy lista filas, columnas, celdas combinadas, banderas de encabezado, modo de detección, confianza y grupos de continuación- El laboratorio exporta la tabla seleccionada con
TPdfTable.ToCsvyTPdfTable.ToJson, ajustaDetectRuledTables,DetectWhitespaceTables,DetectContinuationsyMinConfidencedesde el panel de opciones, y copia el reporte completo al portapapeles TPdf.AboutInfo, los metadatos del paquete de Lazarus y los metadatos de versión del instalador reportan 3.116.1
Version 3.114.21
Corregido (Fixed)
- La validación PDF/A reportaba 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 banderas de anotación que §6.5.3 exige en toda anotación. La comprobación ahora mira solo dentro de los diccionarios de objetos stream
Version 3.114.20
Corregido (Fixed)
- Las firmas RSASSA-PSS llevaban parámetros de algoritmo malformados 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 suelto, que un parser lee como el inicio de otro campo, y el campo trailer se escribía aunque su valor es igual al valor por defecto que DER obliga a omitir. Un verificador o fallaba al parsear los parámetros o retrocedí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 ahora se rechaza 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 portó 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 iniciar. 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 ahora incluyen el archivo de formulario y la directiva que lo incrusta
Version 3.114.17
Corregido (Fixed)
- Dos recursos nativos se manejaban mal cuando una operación fallaba a mitad de camino. Una renderización de miniatura que fallaba liberaba el mapa de bits de destino antes de cerrar el render nativo, y cuando el render estaba dibujando directo sobre 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 mapeo 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 salía del final por completo. El Euro en0xA0también faltaba y volvía como un espacio de no separación. Los nombres y valores de campo del FDF importado ahora se decodifican 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 después trabaja directo 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 conteo ahora se acota 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 revisaba 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 ahora se saltan y se cuentan como omitidos
Version 3.114.13
Corregido (Fixed)
- Agregar 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 pedazo que cortaba empezaba bastante antes de la estructura pedida. La longitud del encabezado ahora se deriva 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, entonces calculaba un digest distinto y reportaba como inválida una firma PAdES correcta. Las firmas que esta biblioteca produce ahora se verifican en esas pilas; la validación por 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 después de 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 ahora se codifican correctamente
Version 3.114.10
Corregido (Fixed)
- La validación PDF/A nunca reportaba 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 revisiones 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 ahora se reconoce independientemente de cómo 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 directo 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 ahí.
GetPageActionURIahora decodifica los bytes igual que ya lo hacía la ruta de acción a nivel de documento
Version 3.114.8
Seguridad (Security)
- En destinos 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 entonces 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 ahora vienen de/dev/urandom, y un pool del kernel no disponible lanza una excepción en lugar de retroceder, tal como ya hacía unCryptGenRandomno disponible en Windows
Version 3.114.7
Corregido (Fixed)
- Un object stream malformado podía hacer que los puntos de entrada de compresión y reparación leyieran más allá del final del búfer decodificado. Los desplazamientos de miembros que declara un stream ahora se revisan por rango y en orden ascendente tan pronto se analiza el encabezado, un conteo de miembros declarado mayor de lo que el encabezado puede contener se rechaza antes de reservar 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 levantadas de un content stream ahora llevan 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 les daba longitud uno a los glifos que comparten un cluster, como los signos diacríticos y los componentes de ligadura. El
ClusterLengthde cada glifo ahora abarca desde el inicio de su cluster hasta el siguiente cluster en orden lógico, en cualquier dirección, de modo que el mapeo de carácter a glifo del texto árabe y hebreo coincide con lo que reporta 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, mientras que 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 junto a su destino en la pila, y los valores de las opciones dependían de lo que tuviera la mitad alta del registro. Ambos ahora usan el ancho dellongde la plataforma, de modo queFPdfTsaFpces confiable en destinos LP64
Version 3.114.3
Corregido (Fixed)
- El backend PKCS#11 copiaba los bytes crudos de la etiqueta de un objeto de token directo a una cadena, lo que en Delphi aterriza bytes UTF-8 sobre unidades de código UTF-16. Un certificado seleccionado mediante
TPdfPkcs11Options.CertificateLabelnunca podía coincidir, yEnumerateCertificatesreportaba unLabelTextcon caracteres corruptos. Las etiquetas ahora se decodifican como el UTF-8 que define el estándar, y el PIN que se le entrega aC_Loginse codifica como UTF-8 en lugar de estrecharse por la codepage del host, de modo que un PIN no ASCII llega intacto al token
Version 3.114.2
Corregido (Fixed)
- El firmador del Keychain de macOS le preguntaba a
SecKeyIsAlgorithmSupportedpor la operación equivocada al decidir si una clave acepta RSASSA-PSS: la consulta nombraba la operación de descifrado en vez de la de firma, de modo que la respuesta siempre era no y cada firma RSA caía silenciosamente a PKCS#1 v1.5. Una clave que soporta PSS ahora firma 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 oración árabe o hebrea que contiene un inciso con un corchete anidado ahora se compone como el lector espera
Version 3.114.0
Agregado (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 pasadas separadas, de modo que una firma correcta bajo una cadena que no llega a una ancla de confianza se reporta como firma válida con confianza inválida y no como firma rota
ConfigureSslTrustAnchorsagrega 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 revisada solo cuando hay una CRL realmente presente, porque OpenSSL por sí mismo no recupera ninguna; sin CRL suministradas el resultado dice unsupported en lugar de dejar pasar una cadena sin revisarSslAvailable,SslMissingSymbols,SslLibraryPath,SslLibraryVersionySslAbiLayoutreportan qué se enlazó y qué no, yConfigureSslLibraryPathapunta el backend a una biblioteca específica cuando los valores por defecto de la plataforma no encuentran ninguna
Version 3.113.0
Agregado (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 ahora cubre ambas mitades del soporte de macOS tal comoFPdfCryptoWinlo hace para Windows- La comprobación de revocación se respeta: cuando se solicita, una política de revocación se suma a la básica de X.509, y desactivar la recuperación en línea restringe la evaluación a las respuestas almacenadas 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 reporta el backend de Windows
KeychainVerificationAvailableinforma el soporte de verificación por separado de la firma, ya que ambas necesitan símbolos distintos del framework y una puede estar presente sin la otra
Version 3.112.0
Agregado (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 se produce conSecKeyCreateSignature, 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í lo requeriría un backend de token PKCS#11- El firmador 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 retrocede a PKCS#1 v1.5 y el AlgorithmIdentifier emitido lo indica en lugar de afirmar PSS
KeychainMissingSymbolsenumera cualquier símbolo de framework que no se pudo resolver, de modo que un despliegue que reporte el backend como no disponible puede distinguir un framework ausente de un nombre que este binding obtuvo de forma incorrecta
Version 3.111.0
Agregado (Added)
ConfigurePadesCmsVerifierinstala el backend de verificación CMS que usa el validador de PAdES, de modo que la verificación de firmas y sellos de tiempo ya no está atada a Windows.IPdfCmsVerifierdeclara las dos operaciones que un backend responde - detached para una firma PDF, attached para un token de sello de tiempo - yPadesCmsVerificationAvailableinforma si hay algún backend presente
Cambiado (Changed)
- Los records 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 en Windows no cambia: sin ningún 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 unsupported en lugar de quedar sin comprobar
Version 3.110.0
Agregado (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 suministrado por el host 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 FPdfSha1agrega SHA-1 con un solo propósito: coincidir un certificado por la huella digital queTPadesSignerOptionsporta. 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 digest de firma y la pila PAdES sigue firmando con SHA-256 en todo el flujo
Cambiado (Changed)
- Las funciones auxiliares 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 cruda se movieron del backend de Windows a
FPdfCms, donde todos los backends de firma pueden alcanzarlas
Version 3.109.0
Cambiado (Changed)
- El cargador de la biblioteca nativa ya no es exclusivo de Windows.
LibraryNameadopta por defectopdfium.dll,libpdfium.soolibpdfium.dylibsegún el destino, la compilación con V8 se busca bajo el nombre correspondiente, y la carga y el enlace de símbolos pasan por el cargador portable en Free Pascal. El comportamiento en Windows no cambia, incluida la disposición de despliegue Win32 y Win64 y el diagnóstico de discrepancia de arquitectura - Los directorios de despliegue en otros destinos siguen la escritura
<cpu>-<os>que las unidades compiladas ya usan, de modo queDLLs/x86_64-linux/libpdfium.soqueda junto aLib/FPC/x86_64-linux. El respaldo al directorio del sistema permanece exclusivo de Windows; en otros lugares la ruta de búsqueda del cargador lo cubre
Version 3.108.0
Agregado (Added)
TPdfHarfBuzzTextShaperda forma a texto bidireccional y de escrituras complejas en destinos Free Pascal que no tienen Uniscribe. Resuelve los niveles de incrustación conFPdfBidi, segmenta los tramos por escritura, da forma a cada tramo con libharfbuzz y coloca los tramos en orden visual. Se instala conConfigureTextShaper; libharfbuzz se resuelve en tiempo de ejecución yHarfBuzzAvailableinforma con honestidad cuando falta- El shaper no enumera fuentes. Uniscribe lee el binario de la fuente desde un contexto de dispositivo, lo cual no tiene equivalente portable, de modo que el host pasa un
TPdfFontDataResolverque mapea un nombre de fuente a los bytes del archivo de fuente y mantiene esa política donde corresponde
Version 3.107.0
Agregado (Added)
FPdfBidiimplementa el Algoritmo Bidireccional de Unicode (UAX #9) en Pascal puro:PdfResolveBidiLevelsdevuelve un nivel de incrustación por unidad de código UTF-16,PdfBidiVisualOrderaplica el reordenamiento L2, yPdfBidiClassOfexpone el Bidi_Class de un punto de código. Las reglas P2-P3, X1-X10, W1-W7, N0-N2, I1-I2 y L1-L2 están cubiertas, incluidos los iniciadores de aislamiento y los pares de corchetes BD16- La unidad es neutral respecto al compilador y la plataforma, que es justo lo que permite componer texto bidireccional donde Uniscribe no está disponible. Un motor de shaping resuelve los glifos de un tramo cuya dirección ya se conoce, de modo que esta es la pieza que debe decidir primero la dirección
Version 3.106.0
Agregado (Added)
ConfigureTextShaperinstala el backend de shaping de texto por el que se enruta toda la biblioteca, conActiveTextShaper,ActiveTextShaperNameyClearTextShaperjunto a él. TantoShapePdfTextcomoTPdf.AddShapedTextusan ahora el shaper instalado en lugar de crear uno de Uniscribe directamente, de modo que un host puede suministrar su propio motor y una prueba puede suministrar uno determinista
Cambiado (Changed)
FPdfTextShapingcompila en destinos distintos de Windows: el backend de Uniscribe es ahora el predeterminado de la plataforma en lugar de la única implementación, y queda confinado a la compilación en Windows. Donde no hay backend disponible, los puntos de entrada de shaping lo informan en lugar de dejar de compilar
Version 3.105.1
Seguridad (Security)
- Una respuesta de sello de tiempo ahora está acotada a 4 MB en ambos transportes. Una TSA que siguiera enviando podía antes 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
Agregado (Added)
- El sellado de tiempo RFC 3161 funciona en destinos Free Pascal distintos de Windows: el nuevo backend de libcurl envía el TimeStampReq y lee el TimeStampResp, de modo que
PadesTsaAvailablereporta True y PAdES B-T, B-LT y B-LTA pueden obtener tokens ahí. libcurl se resuelve en tiempo de ejecución y no es una dependencia de compilación; cuando falta, el backend informa no disponible exactamente como lo hace el de WinHttp. Windows sigue usando WinHttp y no se ve afectado - Firmar en esos destinos todavía necesita material de clave que la biblioteca no posee: suminístrelo mediante
ConfigurePadesSignerProvidercon unIPadesSignerProvider(oIPdfPkcs11SignerProviderpara claves respaldadas por token), ya queFPdfCryptoWines exclusivo de Windows
Version 3.104.1
Agregado (Added)
- El ejemplo de laboratorio de inspección XFA ya está disponible también para Lazarus, de modo que las sondas de capacidades XFA, el listado de paquetes, la exportación de paquetes y el respaldo
OnXfaRuntimeMissingse pueden ejercitar desde la compilación LCL
Version 3.104.0
Cambiado (Changed)
- La biblioteca compila sin diagnósticos evitables en Free Pascal 3.2: la medición interna de tiempo 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 se tipa explícitamente para que ya no dispare una comprobación de rango en tiempo de compilación, y las direcciones de scanline se comparan como apuntadores sin signo cuando se revisa si un bitmap tiene disposición top-down
Version 3.103.1
Corregido (Fixed)
- Los metadatos del documento que se llevan a XMP conservan sus caracteres no ASCII en Free Pascal: los títulos, autores, temas, palabras clave y nombres de creador que llegan a
SaveAsPdfA,SaveAsPdfUa,SaveAsPdfE,SaveAsPdfX,SaveAsPdfRySaveAsPdfVTahora se convierten mediante la codepage de string en lugar de copiarse byte a byte, de modo que el paquete de metadatos sigue siendo UTF-8 válido como exige ISO 19005-1 6.7.2 incluso cuando el programa host no se ejecuta con una codepage 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 codepage, de modo que el texto que se mueve entre
TBytesystringya no depende de la codepage del host
Version 3.103.0
Agregado (Added)
TPdfEuropeanTrustedListanaliza listas de confianza europeas autenticadas, recarga cachés con checksum mediante el mismo autenticador, acepta fuentes de actualización suministradas por el llamador, expone los anclas de confianza actuales y evalúa servicios de firma calificados en el momento de validación solicitadoTPadesTrustValidationOptions.QualifiedTrustEvaluatoraplica una política de confianza calificada sin conexión a cada firmante validado sin agregar acceso de red al validador de PAdES
Version 3.102.0
Agregado (Added)
BeginIncrementalSaveyCommitIncrementalSaveahora agregan 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 commit a archivo ahora hace un flush duradero y vuelve a abrir estrictamente un archivo lateral del mismo directorio, verifica su límite de revisión y reemplaza el destino de forma atómica mientras revierte la sesión tras cualquier fallo
Version 3.101.0
Cambiado (Changed)
SaveAsRedactedahora preserva las porciones seguras de texto que se cruza parcialmente, rutas rectangulares e imágenes alineadas a los ejes, y luego elimina los nombres de recursos que ya no son referenciados por la página, el Form XObject, el pattern, la apariencia y los ámbitos de 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 del alfa y un presupuesto estricto de memoria de trabajo
Version 3.99.0
Agregado (Added)
GraftPdfAcroFormimporta campos jerárquicos de AcroForm, 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
Agregado (Added)
TPdfOutlineEditorcrea, mueve, elimina, aplica estilo, expande y redirige elementos de esquema, remapea destinos explícitos mediante resultados de planes de página y agrega una revisión incremental verificada de forma independiente
Version 3.97.0
Agregado (Added)
TPdfTreeEditorlee, valida, actualiza, balancea, divide, fusiona, serializa y guarda incrementalmente estructuras arbitrarias de NameTree y NumberTree de PDF preservando referencias indirectas reutilizables y valores crudos de las entradas
Version 3.96.0
Agregado (Added)
TPdfParserResourceBudgetproporciona una política de proceso thread-safe para recursión, tokens, objetos, bytes decodificados, razón de expansión, asignación y plazos en parsers de PDF personalizados, con snapshots 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 un análisis avanzado de ámbito, visibilidad, encapsulación y uso de Forms anidados de XObjects recurrentes mediante lecturas dispersas acotadas en documentos con xref válido
Version 3.91.0
Agregado (Added)
TPdfSparseDictionaryReaderpuede resolver la generación activa de un objeto y decodificar un stream directo bajo un límite de bytes suministrado 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 normal de xref válido
Version 3.90.0
Agregado (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 acotadas del origen, mientras que las jerarquías mal formadas continúan por el respaldo de reconstrucción
Version 3.89.0
Agregado (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 agrega objetos de marcador con lecturas acotadas del origen cuando el PDF guardado aún no contiene una jerarquía DPart
Version 3.88.0
Agregado (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 resuelveMarkInfoyViewerPreferencesdel catálogo mediante búsqueda dispersa y agrega la revisión PDF/UA con lecturas acotadas del origen en la ruta normal de xref
Version 3.87.0
Agregado (Added)
AppendPdfSparseUpdatetransmite una revisión dispersa sobre un PDF guardado: bytes del origen verbatim, cuerpos de objetos suministrados por el llamador en desplazamientos registrados y un único bloque incremental xref/trailer encadenado mediante/PrevNormalizePageViewRectnormaliza dos esquinas mapeadas del espacio de página en el rectángulo visible acotado a la página, o informa que nada de la página es visible- La inyección de marcadores PDF/E sintetiza un objeto Info nuevo 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 agrega revisiones a través de
AppendPdfSparseUpdatecon lecturas acotadas del origen en la ruta normal de xref - El callback de llenado de formularios
FFI_GetPageViewRectahora reporta la parte de la página realmente visible en elTPdfViewadjunto en lugar de siempre la caja de página completa, con respaldo a las dimensiones de la página para documentos headless TPdf.AboutInfo, los metadatos del paquete de Lazarus y los metadatos del instalador ahora informan Version 3.87.0 de manera consistente
Corregido (Fixed)
- Los puntos de control de segmentos de ruta expuestos desde el binding
FPDFPath_GetBezierControlPointsnunca se rellenaban: la exportación nativa solo responde para el índice del punto final 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
Agregado (Added)
ReadPdfSparseRevisionInfoexpone hechos acotados de última revisión, catálogo, cifrado, ID de documento y estructura etiquetada para postprocesadores de streamsComposePdfSparseUpdateIdpreserva 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 fragmentos acotados y agrega la revisión PDF/A sin asignar un arreglo de bytes del tamaño del origen en la ruta normal de xref- La inyección de marcadores PDF/A preserva el estilo de salida clásico o de xref-stream, las generaciones de catálogo e Info, los identificadores del trailer, el comportamiento de rechazo con cifrado y las reglas de degradación del Level A
Version 3.85.0
Agregado (Added)
SanitiseActiveContentPdfStreamacepta un espacio de trabajo de poda propio del llamador para almacenamiento personalizado acotado o respaldado en disco
Cambiado (Changed)
- La sanitización de contenido activo ahora actualiza el catálogo y el trailer mediante búsqueda dispersa, ventanas acotadas del parser y copia de rangos de tamaño fijo en lugar de leer el PDF completo en un solo arreglo de bytes en la ruta normal de xref
TPdf.SaveAsSanitisedaplicaSaveMemoryLimitySaveTemporaryDirectorya su espacio de trabajo de poda y reporta sus diagnósticos de derrame
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 parser de PDFium medianteFPDF_GetFileVersionen lugar de volver a analizar el PDF de origen completo- Las consultas de versión leen a lo sumo 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 stream acotadas y el índice disperso de objetos diferido- La salida de etiquetas de página copia PDFs de origen grandes en rangos de tamaño fijo en lugar de asignar un arreglo de bytes del documento completo en la ruta normal de xref
Version 3.82.0
Cambiado (Changed)
ApplyDefaultOpenActionahora lee revisiones clásicas, de xref-stream, híbridas y de object-stream mediante un índice disperso de objetos diferido, 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 arreglo de bytes
Version 3.81.0
Agregado (Added)
PostProcessSavedPdfacepta tres espacios de trabajo posicionables propios del llamador para topes de memoria personalizados y procesamiento respaldado en disco
Cambiado (Changed)
TPdf.SaveAsaplicaSaveMemoryLimitySaveTemporaryDirectorya cada espacio de trabajo de postprocesamiento del PDF guardado e incluye sus derrames 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 arreglos de bytes de todo el archivo y reasignaciones repetidas del archivo completo
Version 3.80.0
Agregado (Added)
ReadAttachmentMetadatacaptura nombres, descripciones, subtipos MIME, tamaños decodificados y legibilidad de adjuntos en una enumeración nativa acotadaExtractAttachmentsToStreamsescribe un lote en streams propios del llamador con límites de bytes por archivo y agregados, fragmentos de escritura configurables, cancelación y resultados por elemento
Cambiado (Changed)
- La extracción por lotes retiene a lo sumo un adjunto decodificado en memoria de PDFium Delphi Component en lugar de materializar cada carga del lote
Version 3.79.0
Agregado (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 thread-safeTPdfTileCachey la caché de fuentes del sistema de todo el proceso pueden unirse a un governor seleccionado por el llamador con contabilidad exacta de bytes de bitmap y de fuentes
Cambiado (Changed)
- Las escenas de página analizadas, las miniaturas, los datos de estructura, los snapshots de texto y los snapshots de objetos de página ahora compiten bajo un presupuesto
TPdfpredeterminado de 256 MiB preservando sus límites existentes de cantidad de entradas - Las escenas de página activas permanecen fijas hasta que el renderizado termina, 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
Agregado (Added)
TPdfLayoutPagedPlan,TPdfLayoutDocument.BuildPagedPlanyTPdf.GeneratePagedLayouttransmiten comandos de diseño a un almacenamiento posicionable seleccionado por el llamador y materializan una página a la vez
Cambiado (Changed)
- Los diseños generados grandes pueden derramar 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
Agregado (Added)
TPdfLayoutTable, las filas, las celdas y las opciones de tabla agregan tablas que cruzan 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 Table / TR / TH / TD continua a través de páginas, mantienen atómicos los grupos que abarcan filas y asocian automáticamente las celdas de datos con IDs de encabezado
Version 3.76.0
Agregado (Added)
TPdfLayoutConstraintsySetLastItemConstraintsagregan a los diseños generados control de mantener junto, mantener con el siguiente, salto de página físico antes / después y control configurable de 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
Agregado (Added)
TPdf.InspectPdfUaUnicodeCoveragereporta evidencia acotada a nivel de objeto para mapeos Unicode directos, reemplazos deActualText, errores de mapeo, valores Unicode faltantes y objetos de origen sin resolver
Cambiado (Changed)
TPdf.ValidatePdfUaahora reutiliza un único escaneo de caracteres por objeto que excluye los caracteres Artifact y generados, y evita que elActualTextde un objeto de texto enmascare contenido adyacente
Version 3.74.0
Cambiado (Changed)
ValidatePdfUaPageContentTaggingyTPdf.ValidatePdfUaahora reportanpvuaiArtifactInStructureTreecuando un objeto de página Artifact es reclamado por un MCID del árbol de estructura, incluidos los artifacts de paginación basados en rutas- El escaneo de contenido de página PDF/UA ahora hace cortocircuito solo después de detectar tanto contenido real sin etiquetar como contención Artifact inválida, preservando la cobertura entre páginas sin repetir comprobaciones ya completadas
Version 3.73.0
Agregado (Added)
TPdf.InspectPdfUaLanguageCoveragereporta evidencia acotada de objetos de página y cadenas de estructura para tramos de lenguaje natural, incluidos el lenguaje efectivo, la fuente de la declaración, el MCID, el índice de estructura y extractos de textoResolvePdfUaEffectiveLanguageresuelve 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 reportapvuaiNaturalLanguageUncoveredcuando texto que no es artifact o cadenas de accesibilidad no tienen una declaración/Langefectiva válida
Version 3.72.0
Agregado (Added)
TPdf.InspectPdfAMetadatareporta evidencia de equivalencia tipada por campo para los ocho mapeos de Info a XMP de ISO 19005-1, incluidos valores vacíos explícitos y fallos de análisis de fechasTPdf.NormalizePdfAMetadatarepara solo las propiedades XMP mapeadas con discrepancias preservando los namespaces no relacionados y las alternativas de lenguaje no predeterminadas
Cambiado (Changed)
TPdf.ValidatePdfAahora reportapvaiInfoXmpValueMismatchcuando los valores Info decodificados por PDFium difieren de los valores XMP correctamente tipados tras una comparación de fechas consciente de Unicode o de zona horaria
Version 3.71.0
Agregado (Added)
InspectPdfVT2sStreamdevuelve evidencia de condiciones de impresión para cada parte MIME de PDF/VT, incluidos la identidad del OutputIntent, la procedencia del perfil embebido o MIME, los hashes ICC y los datos del encabezado, y los conteos de páginas y records del DPartFPdfIccProfileproporciona inspección acotada del encabezado y la tabla de tags ICC con soporte de MD5, SHA-256, espacio de color, versión, clase de dispositivo, ID de perfil y descripción de perfil multilingüe
Cambiado (Changed)
- La validación de PDF/VT-2s ahora resuelve los adjuntos ICC MIME 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 embebido 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 de PDF/VT-2 de archivo único ahora reconoce
DestOutputProfileRefcomo un perfil de destino externo en lugar de reportarlo como faltante
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 hints - El ámbito
Recordahora resuelveRecordLeveldesde el diccionario indirectoDPartRoot, mientras que el ámbitoStreamse rechaza en archivos PDF/VT-1 - Los streams de contenido decodificados de páginas y Form XObjects ahora validan la visibilidad de recursos
Do, los conteos de ocurrenciasSingleUsey la propiedad de los records de destinatario mediante recursos heredados efectivos y la jerarquía DPart - Los XObjects encapsulados ahora validan la forma booleana, el ámbito recomendado, el
Intentde Image, los grupos de transparencia aislados, los espacios de color de blending y las dependencias de contenido opcional directas o anidadas
Version 3.69.0
Cambiado (Changed)
- La validación de PAdES ahora rechaza entradas duplicadas de
Contents,ByteRange,SubFilter,FilteryTypeen lugar de aceptar el valor seleccionado por el parser - El descubrimiento de firmas ahora usa un escaneo lineal de diccionarios consciente de streams, 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 deContentsy aún permite revisiones incrementales posteriores - Los diccionarios de firma ahora requieren un
Filtercon valor de nombre y exigen combinaciones consistentes de tipo y subfilterSigoDocTimeStamp
Version 3.68.0
Agregado (Added)
TPdf.BuildPadesEvidenceReportcorrelaciona hechos de firmas de PDFium, política CMS, estado de confianza y de sellos de tiempo, hashes de la ruta de certificados, cobertura DSS/VRI y decisiones de revisiones posteriores para cada firmaTPadesEvidenceReportexporta evidencia acotada de múltiples firmas como JSON o CSV y reporta 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 ordenada de certificados de Windows preservando la validación sin conexión por defecto
- La generación de evidencia reutiliza una única captura retenida de bytes del origen en el análisis de cumplimiento, confianza, DSS y revisiones en lugar de copiar el PDF original en un nuevo stream para cada etapa
Version 3.67.0
Agregado (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 redactar firmas de aprobación o certificación con las transformaciones
FieldMDPyDocMDPde ISO 32000-1
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
Agregado (Added)
RenderPageBandedToStreamescribe salida PNG o TIFF directamente a un stream del llamador con altura de banda configurable, compresión PNG y límites de bytes de salidaRenderPageBandedToEncoderalimenta codecs 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
Agregado (Added)
TPdfParallelRenderReportahora reporta el tamaño del origen, el pico de memoria capturada, el backend de almacenamiento y el tipo de respaldo compartido
Cambiado (Changed)
RenderPagesParallelcomparte el origen capturado mediante memoria inmutable, un mapeo de archivo de solo lectura o acceso aleatorio deFPDF_LoadCustomDocumenten lugar de asignar un segundo arreglo de bytes del documento completo- Los orígenes de renderizado paralelo derramados permanecen bajo
SaveMemoryLimity ya no exigen recargar el PDF completo en la memoria direccionable del proceso
Version 3.64.0
Agregado (Added)
ImportImposedahora tiene una sobrecarga que devuelveTPdfImpositionExecutionReportcon conteos de importación nativa, orígenes únicos, slots en blanco, plantillas de 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 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
Agregado (Added)
BeginPageObjectEditTransaction,CommitPageObjectEditTransactionyRollbackPageObjectEditTransactionagrupan mutaciones nativas de objetos de página en un lote atómico con ámbito de página y reversión de snapshot validadaPageObjectEditTransactionStatusreporta la página vinculada, el estado dirty, el conteo de mutaciones exitosas y el conteo de generaciones de contenido
Cambiado (Changed)
- Los lotes de objetos confirmados ahora invocan
FPDFPage_GenerateContentuna sola vez en lugar de una por cada mutación de inserción, eliminación, transformación, propiedad, marca, objeto de anotación o apariencia - Guardar, cambiar de página, eliminar páginas, transacciones de edición anidadas y fallos de inserción nativa o de actualizaciones de anotaciones se rechazan antes de que el contenido diferido pueda perderse
Version 3.62.0
Agregado (Added)
ReadPageObjectsSnapshotcaptura hechos de objetos de página propios del llamador con presupuestos de objetos, rutas, clips, marcas, texto, cadenas y plazoPageObjectsSnapshotproporciona reutilización LRU consciente de revisiones con capacidad configurable y telemetría de ocupación, aciertos y fallos
Cambiado (Changed)
PageComplexityahora reutiliza el snapshot inmutable de objetos de página en lugar de repetir consultas nativas de enumeración de objetos, transparencia, rutas e imágenes
Version 3.61.0
Agregado (Added)
TPdfahora expone una LRU unificada de miniaturas para vistas previas embebidas y renderizadas con topes configurables de entradas y bytes más telemetría de aciertos, fallos, expulsiones, ocupación y revisionesRenderPageThumbnailacepta rotación, opciones de renderizado, color de fondo yTPdfColorSchemepreservando el contrato de bitmap propio 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 cacheada de miniaturas embebidas opcionales
TPdfThumbnailViewsincroniza su caché de bitmaps 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
Agregado (Added)
ReadTextPageSnapshotcaptura Unicode, mapeos 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 plazoTextPageSnapshotproporciona copias profundas propias del llamador mediante una LRU configurable consciente de revisiones con telemetría de capacidad, conteo, aciertos y fallos
Cambiado (Changed)
GetStructuredTexty elGetTextInReadingOrderde disposición física ahora reutilizan el mismo snapshot de texto y aplican ordenamiento geométrico O(n log n)
Corregido (Fixed)
- Las cachés pequeñas de snapshots de texto y estructura ahora expulsan la página más antigua mientras almacenan los datos nuevos bajo el índice de página solicitado, evitando el aliasing de caché entre páginas
Version 3.59.0
Agregado (Added)
LifecycleActionPolicyselecciona la ejecución automática deshabilitada, solo explícita o compatible de acciones de ciclo de vida de documentos y páginas PDFExecuteDocumentLifecycleActionexpone acciones de documento JavaScript, abrir, cerrar, guardar e imprimir, mientras queExecutePageLifecycleActionejecuta acciones de abrir y cerrar página sin cambiarPageNumber
Cambiado (Changed)
- Las cargas de página headless ahora reciben las mismas acciones automáticas de apertura y cierre de página que las cargas dirigidas por el visor, con páginas temporales reutilizadas o liberadas bajo el lock de renderizado
Version 3.58.0
Agregado (Added)
ReadStructureElementsyVisitStructureElementsproporcionan un recorrido iterativo de la estructura etiquetada con presupuestos explícitos de profundidad, elementos, atributos y tiempo más un estado de finalización detalladoStructureElementsForPageexpone snapshots de página con base uno sin cambiarPageNumber, respaldados por una caché LRU configurable consciente de revisiones con telemetría de aciertos, fallos y conteo
Cambiado (Changed)
- Los consumidores de accesibilidad, reflow, validación y visor ahora reutilizan snapshots de estructura propios del llamador hasta que una edición pertinente del documento o de la página los invalida
Version 3.57.0
Agregado (Added)
- Los callbacks nativos completos de host de formularios ahora proporcionan handles de página diferidos seguros en su 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
FormHostCallbacksCompletereporta la disponibilidad de los callbacks, mientras queFormSelectionRectsyClearFormSelectionRectsexponen 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 PDFium con base cero y el
PageNumberdel componente con base uno - Los callbacks URI de AcroForm y XFA ahora preservan los bytes crudos del URI y exigen aprobación explícita del host antes de cualquier lanzamiento externo
Version 3.56.0
Agregado (Added)
- Los snapshots indexados de
PageMetricsexponen las dimensiones, la rotación, la etiqueta, la transparencia y las 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é nativa de snapshots 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
Agregado (Added)
- La inspección de rutas expone puntos de control exactos de Bézier cúbicas cuando la compilación de PDFium cargada proporciona
FPDFPath_GetBezierControlPoints, con una sonda opcional de capacidades para DLLs más antiguos FormFieldTypeAtPoint,TPdfView.FormFieldTypeAty las propiedades indexadas deFontFlagsexponen hechos nativos de formularios y fuentes sin handles crudosTPdf.Signaturesdevuelve todos los contenidos de firmas nativas, ByteRanges, subfilters, motivos, tiempos y permisos en un snapshot propio del llamador
Cambiado (Changed)
- Las comprobaciones de presencia de campos de formulario ahora usan hit testing nativo directo de puntos en lugar de abrir y cerrar handles de anotaciones
Corregido (Fixed)
- La validación de PDF/E-1 ahora permite campos AcroForm ordinarios, archivos embebidos y anotaciones FileAttachment mientras reporta con precisión el
/XFAde AcroForm de nivel superior y/NeedAppearances true, incluidos valores indirectos y de object-stream
Version 3.54.0
Agregado (Added)
FPdfProductionagrega selección de imágenes multicódec medida, backends de procesamiento de color y 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 RichMediaFPdfStandardsExecutionagrega conversión de mediciones y GeoPDF, reparación transaccional de PDF/A, planes de PDF/UA-2, perfiles ICC externos de múltiples colores, 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 nativas de N-up o de XObjects de página con geometría exacta de medianil, sangrado y arrastre, mientras queTPdf.CompareWithinforma diferencias semánticas, geométricas y de píxeles con tolerancia- La firma PAdES ahora admite validadores de rutas 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 ahora 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 de 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
Agregado (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 de estructura nativos, las relaciones entre anotaciones, los archivos adjuntos de anotaciones, los valores de diccionario con tipo, las políticas de foco, las consultas de orden z de enlaces y formularios, y los diagnósticos de mapeo TTF predeterminado están disponibles mediante APIs de alto nivel acotadas
TPdfView.ReplaceFormTextAndKeepSelectionpreserva la selección activa a lo largo de ediciones repetidas, y los eventos de liberación del botón derecho ahora llegan al motor nativo de formularios
Cambiado (Changed)
- El tiempo 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 host
- Las escrituras de cadenas de adjuntos validan el resultado nativo y codifican las claves del diccionario como UTF-8
Version 3.52.0
Agregado (Added)
TPdf.GetImageObjectRenderedBitmapdevuelve el resultado renderizado de un objeto de imagen con su matriz actual, espacio de color, máscaras y estado de renderizado 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.IsAnnotationObjectSubtypeSupportedagregan edición precisa de objetos de contenido e inspección de capacidades
Version 3.51.0
Corregido (Fixed)
- Ocho miembros de
TPdfque las notas de versión anteriores anunciaban estaban declarados en la sección private y no se podían llamar desde fuera de la unidadPDFium; ahora son públicos tal 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 API los enumeran 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 buscada
- La referencia API documenta las enumeraciones y los registros alcanzables desde las firmas públicas, incluidos los tipos de informes de carga y de flujos, los tipos de texto, fuente y OCR, los tipos del constructor de diseño, los tipos de validación PAdES, los tipos de procesamiento por lotes y validación, y los tipos de renderizado en paralelo
Version 3.50.0
Agregado (Added)
- Todas las demos con interfaz gráfica ahora se abren 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 iniciar 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 al iniciar documentos de muestra en memoria (una vitrina de seis páginas, dos documentos de comparación lado a lado y una página con varias fuentes para inspección por clic)- Las demos de procesamiento como
MergePDF,BatchExport,SplitPDF,ExtractText,PDFtoJpg,PrintPDFyPrintPreferencesgeneran de antemano PDF de muestra junto al ejecutable y rellenan previamente sus controles de entrada, con una 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,WatermarkStampconstruye de antemano sus muestras de sello yXfdfLabse abre sobre un documento generado con anotaciones de texto y de resaltado
Cambiado (Changed)
CreatePDFahora generaSample.pdfjunto al ejecutable al iniciar, sin mostrar ningún cuadro de diálogo, de modo que el documento existe en el momento en que se abre la demoTPdf.AboutInfoy los metadatos del instalador ahora informan Version 3.50.0 de manera consistente
Version 3.49.0
Agregado (Added)
FORM_GetTextDirectionyFORM_SetTextDirectionde los binarios actualizados de PDFium ahora están enlazados, manteniendo la capa de enlace dinámico con cobertura total de las 472 exportaciones de PDFiumTPdf.FocusedFormFieldTextDirectionyTPdf.SetFocusedFormFieldTextDirectionexponen la dirección de texto en memoria del widget con foco mediante la nueva enumeraciónTPdfFormTextDirection(ftdUnknown,ftdAuto,ftdLTR,ftdRTL), con contrapartes enTPdfViewque vuelven a pintar la escena de página tras un cambio de dirección
Cambiado (Changed)
FPDF_LIBRARY_CONFIGahora refleja la disposición de la versión 6 de PDFium con el campo experimentalm_BrotliEnabledpara binarios construidos conPDF_ENABLE_BROTLITPdf.AboutInfo, los metadatos del paquete de Lazarus y los metadatos del instalador ahora informan Version 3.49.0 de manera consistente
Version 3.48.0
Agregado (Added)
- La demo
PDFViewerahora genera en memoria un documento de muestra de seis páginas al iniciar mediante la API de creación, de modo que el visor se abre con contenido renderizado y sin ningún archivo de muestra 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 de la 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, e informa el número de coincidencias en la barra de estado - Los botones
Nighty2-Upde la barra de herramientas activan con un clic el modo de renderizado duotono nocturno y el modo de visualización a doble página
Cambiado (Changed)
- La selección de texto en el visor ahora usa el motor de selección integrado de
TPdfView, con selección de palabras por doble clic, selección por arrastre y atajos de portapapeles, en reemplazo del código de selección escrito a mano - Las páginas se renderizan con sombra proyectada 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
Agregado (Added)
FPdfBenchmarkejecuta corpus de PDF acotados con pasadas de calentamiento y medición configurables, límites de páginas y píxeles, cancelación cooperativa y estado por caso de exitosa, fallida u omitidaTPdfBenchmarkReportregistra tamaños de bytes de entrada y guardados, latencia de carga y de primera página, rendimiento de renderizado, tiempos de guardado y reapertura, conjunto de trabajo máximo muestreado, hashes SHA-256 semánticos y de píxeles, estabilidad entre ejecuciones repetidas, filtros de hashes esperados y equivalencia de reapertura independiente- Los informes de benchmark exportan CSV seguro para fórmulas y JSON estructurado para CI, calificación de versiones y seguimiento longitudinal del rendimiento
GetSkiaRenderCapabilities,RenderPageSkiayRenderPageSkiaByIndexexponen renderizado nativo opcional de páginas y formularios con Skia, con reutilización de la caché de páginas analizadas y sin requisito obligatorio de exportaciones de la DLL- Un ABI de salida de impresión con control por capacidades y versionado 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 los proporciona
Corregido (Fixed)
- Las compilaciones de PDFium sin
PDF_USE_SKIAahora se cargan normalmente 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
Agregado (Added)
ValidatePdfRahora verifica el contenido de páginas solo ráster, la geometría de tiras, 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 cajas de página, fuentes embebidas, output intents, tintas directas, transparencia, sobreimpresión, separaciones, resolución de imágenes y disponibilidad para producción sin decodificar las cargas de imágenes- La validación de estructura de PDF/UA-2 ahora verifica la propiedad de 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 preflights 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
Agregado (Added)
TPdfXmpPacketanaliza, edita, clona y serializa XMP con conciencia de espacios de nombres, incluyendo espacios de nombres desconocidos, contenedores RDF tipados, valores URI y de recursos, calificadores, alternativas de idioma, envolturas de paquete y relleno preservadoTPdf.ReadXmpPacketySaveAsWithXmpPacketexponen lectura de metadatos de alto nivel y salida atómica, con cambios en documentos firmados que 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 de 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
Agregado (Added)
TPdfValidationRuleRegistryregistra cláusulas de perfil con severidad, dependencias, guía de reparación, evidencia y predicados integrados o personalizadosTPdfValidationBudgetyTPdfValidationExecutionContextacotan reglas, fallas, objetos, recursión, evidencia UTF-8, memoria reservada, tiempo transcurrido, falla rápida y cancelación cooperativaValidatePdfFilesParallelvalida archivos mediante documentos de trabajo aislados mientras preserva el orden de entrada y agrega distribuciones de problemas, tiempos, fallas, 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
Agregado (Added)
TPdfStructureElementahora transporta datos de espacio de nombres, mapeo de roles de espacios de nombres, referencias, archivos asociados, anotaciones, widgets, etiquetas y apariencias para la validación semántica de PDF/UA-2ValidatePdfUa2StructureElementsy sus validadores enfocados verifican espacios de nombres y contención de ISO/TS 32005, cuadrículas de tablas acotadas, anotaciones, formularios, asociaciones Formula/MathML, archivos asociados, raíces de documento, FENote, listas, referencias de 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 faltantesPdfUa2StructureHasIssueproporciona una consulta de un solo problema segura para C++Builder sin devolver un conjunto 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
Agregado (Added)
TPdfUaSaveOptions.PdfUa2crea salida PDF/UA-2 conpdfuaid:part2,pdfuaid:rev2024 y una versión de catálogo efectiva de PDF 2.0ValidatePdfUadetectapuc2e informa metadatos de revisión faltantes, 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 de PDF/UA ahora selecciona reglas específicas de perfil para 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
Agregado (Added)
SetPageObjectMarkParamagrega o reemplaza un parámetro entero, real, de cadena o de blob en una entrada de contenido marcado existente sin reemplazar la marcaRemovePageObjectMarkParamquita una propiedad seleccionada conservando el nombre de la marca y todas las propiedades no relacionadas
Cambiado (Changed)
- Los números no enteros del contenido marcado ahora hacen un 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
Agregado (Added)
ConfigureSystemFontProviderinstala un mapeador de fuentes de la aplicación antes de que PDFium se inicie y proporciona bytes TrueType u OpenType validados para fuentes de documento faltantes o sustituidasTPdfSystemFontPolicycontrola la sustitución de tipografías, la alternativa nativa, los límites de bytes por fuente y el almacenamiento en caché acotado de solicitudesGetSystemFontProviderStatisticsinforma la actividad de mapeo, caché, alternativas, rechazos, tablas de datos e identificadores activos
Cambiado (Changed)
- Los callbacks del proveedor exponen la tipografía, el peso, el estilo, el conjunto de caracteres y el paso solicitados por PDFium, manteniendo las fallas de los callbacks 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
Agregado (Added)
AddCidType2Textembebe datos TrueType proporcionados por el llamador con geometría CID a GID explícita por glifo y mapeos CID a UnicodeTPdfCidFontOptionsselecciona embebido completo, subconjuntos preferidos con alternativa o subconjuntos requeridos, y configura presupuestos acotados de fuentes, glifos y UnicodeTPdfCidFontReportinforma decisiones de subconjuntos, tamaños en bytes, glifos únicos, estado de embebido, texto esperado, texto extraído e integridad de la extracción
Cambiado (Changed)
- La creación de subconjuntos TrueType preserva los identificadores de glifo solicitados, rechaza la salida no segura 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
Agregado (Added)
BuildReflowDocumentcrea un árbol de nodos semánticos acotado y reutilizable a partir de la estructura de 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 caracteres escapados y semántica de encabezados y celdas combinadasTPdfReflowOptionscontrola 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 tablas reemplaza los bloques de párrafos superpuestos durante el reflow, y el estado de página activa se restaura tras el éxito, la falla 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
Agregado (Added)
ApplyOcrSearchLayerrenderiza las páginas seleccionadas mediante PDFium y envía píxeles BGRA acotados de arriba hacia abajo a unIPdfOcrProviderproporcionado por el llamadorTPdfOcrWordtransporta texto Unicode, confianza y cuadriláteros en el espacio de píxeles que se mapean mediante la geometría nativa de la página hacia texto invisible con posibilidad de búsquedaTPdfOcrReportregistra la finalización por página, las omisiones por texto existente, las fallas, la cancelación, los píxeles renderizados y las palabras aceptadas o rechazadas
Cambiado (Changed)
- La inserción de OCR preserva los flujos de imágenes de escaneo originales, filtra 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
Agregado (Added)
ExtractTablesdetecta tablas con líneas y alineadas por espacios en blanco a partir de la geometría nativa de palabras y las líneas de trazado transformadasTPdfTableinforma filas, columnas, celdas combinadas, límites de página, celdas de encabezado, modo de detección, confianza y salida directa a CSV o JSONExtractDocumentTablesanaliza cada página 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, líneas, celdas y tablas, y restaura la página activa después de los análisis 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
Agregado (Added)
GenerateTaggedLayoutcrea un documento de diseño semántico nuevo 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 encabezados, fragmentos, texto alternativo, texto real, idiomas e identificadores de elementosTPdfLayoutDocument.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 usa semántica de párrafo de manera predeterminada, mientras que los encabezados, pies de página, reglas, imágenes y formularios reutilizables son artefactos de manera predeterminada a menos que se etiqueten explícitamente
- La validación del plan semántico rechaza identificadores duplicados, padres faltantes, ciclos, contención inválida de listas o tablas, figuras sin texto de reemplazo e identificadores de encabezados 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
Agregado (Added)
TPdf.AddShapedTextescribe ejecuciones de glifos RTL, bidi, contextuales y con ligaduras mediante la formación nativa del sistema y las APIs de fuentes CID Type 2 de PDFiumShapePdfTextyTPdfUniscribeTextShaperexponen identificadores de glifos posicionados, avances, desplazamientos, clústeres de origen, posiciones de ejecuciones visuales y niveles bidi sin modificar un documento
Cambiado (Changed)
- Los mapas ToUnicode generados cubren cada glifo formado, 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 decodifican 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
Agregado (Added)
TPdfLayoutCachedNodeconstruye contenido de diseño con subclases en el primer uso y soporta ubicaciones escaladas repetidas medianteAddCachedNodeTPdfLayoutPlaninforma aciertos y fallos de la caché de mediciones, ubicaciones de nodos en caché y XObjects nativos reutilizados
Cambiado (Changed)
BuildPlanreutiliza planes coincidentes por restricciones completas de página, contenido, fuente, estilo, origen e identidad del 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 ubicaciónTPdf.AboutInfo, los metadatos del paquete y los metadatos del instalador ahora informan Version 3.33.0 de manera consistente
Version 3.32.0
Agregado (Added)
TPdfLayoutDocumentconstruye texto ajustado, espaciadores, reglas, imágenes, XObjects de página reutilizables, saltos de página explícitos, encabezados y pies de página en un plan de páginas medidoGenerateLayoutpagina el diseño completo antes de agregar páginas y objetos de página nativos de forma atómica, 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
Agregado (Added)
- Los constructores de
TPdfPagePlandescriben operaciones de páginas de eliminación, movimiento, inserción, división y combinación sin aplicarlas ValidatePagePlandevuelve el mapeo exacto de páginas antiguas a nuevas y elabora un inventario de los 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áginas
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
Agregado (Added)
SaveRecoverySnapshotescribe un paquete de recuperación con suma de verificación y tamaño acotado que contiene la huella digital del origen y el diario de ediciones del documento verificadoRestoreRecoverySnapshotreproduce un paquete de recuperación solo cuando su suma de verificación, cadena del diario, huella digital del origen y huella digital recuperada coincidenEnableRecoveryAutosaveactualiza atómicamente un archivo de recuperación explícito después de cada confirmación, deshacer o rehacer con cambios, sin reescribir el PDF de origen
Cambiado (Changed)
InspectRecoverySnapshotinforma el origen de recuperación, las huellas digitales, el conteo de entradas, la posición y el almacenamiento acotado sin aplicar el paqueteImportEditJournaly la restauración de recuperación ahora requieren autorización explícita deAllowSignedDocumentantes 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 fallas
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
Agregado (Added)
BeginEditTransaction,CommitEditTransactionyRollbackEditTransactionagrupan ediciones nativas arbitrarias del documento en transacciones atómicasUndoEdityRedoEditaplican deltas inversos y directos verificados con SHA-256 a través de cambios de páginas, objetos, anotaciones, adjuntos y metadatosExportEditJournaleImportEditJournalpersisten deltas portables acotados con validación de huella digital del origen y cadena de resúmenes para su reproducción posterior
Cambiado (Changed)
- Las instantáneas de transacción usan salida nativa reproducible para que las confirmaciones sin cambios queden vacías incluso cuando los guardados ordinarios de PDFium contienen identificadores o marcas de tiempo no deterministas
- Las confirmaciones fallidas y la reproducción inválida del diario restauran el documento cargable anterior de forma atómica, mientras que el conteo 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 de
AllowSignedDocumentantes de que comience una transacción de edición de 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
Agregado (Added)
TPdf.InspectOptionalContentenumera capas OCG, configuraciones predeterminadas y alternativas, estados de uso View/Print/Export, metadatos de zoom e idioma, capas bloqueadas, arreglos de orden, grupos de radio, políticas OCMD, expresiones de visibilidad y estado efectivo de renderizadoTPdf.SaveAsOptionalContentConfiguredescribe una copia estrictamente verificada con estados de capas seleccionados por el llamador para un uso y una configuración elegidos
Cambiado (Changed)
- La salida de estados de capas ahora actualiza tanto los arreglos
/ONy/OFFde la configuración como los diccionarios de estado Usage del OCG, de modo que PDFium aplique la visibilidad solicitada a través de su contexto nativo de renderizado - Las escrituras de configuración rechazan grupos desconocidos, cambios en capas bloqueadas, conflictos de grupos de radio, archivos cifrados en almacenamiento intermedio y archivos firmados sin autorización explícita, y quitan las reglas de estado automático de manera predeterminada 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
Agregado (Added)
TPdf.RenderPageByIndexrenderiza cualquier página basada en uno a un tamaño exacto de 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 embebidas ahora reutilizan el estado de página analizado de PDFium mediante una caché LRU de ocho entradas de manera predeterminada
- Las entradas de escena se invalidan al activar páginas, editar, cambiar el árbol de páginas, recibir callbacks de estado de formulario, limpiar explícitamente y desmontar el documento, y los renderizados en curso se retienen de forma segura 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
Agregado (Added)
TPadesSignatureAlgorithmInfoinforma el 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 algoritmos evaluado de forma independienteInspectPadesSignatureAlgorithmyEvaluatePadesSignatureAlgorithmreconocen los perfiles P-256, P-384, P-521, brainpoolP256r1, brainpoolP384r1, brainpoolP512r1, Ed25519 y Ed448
Seguridad (Security)
- La validación de PAdES ahora rechaza desajustes de curva elíptica y de resumen, OID de firmas ECDSA que no coinciden con el resumen CMS, parámetros EC sin nombre, parámetros de 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 informan como
pcsUnsupporteden lugar de tratarse como firmas invá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
Agregado (Added)
TPdf.ExportObjectGraphexporta los objetos activos clásicos, de flujo xref y de flujo de objetos como JSON tipado y acotado, con diccionarios, arreglos, cadenas, nombres, valores escalares, referencias indirectas, conteos de bytes de flujos y resúmenes SHA-256 opcionales de flujos explícitosTPdf.SaveAsObjectGraphPatchedestablece o quita valores de diccionario de nivel superior verificados contra esquemas 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 parchado valida cada operación antes de la entrega y rechaza referencias colgantes, operaciones duplicadas, entradas cifradas, cambios protegidos de filtro o longitud de flujos y documentos firmados sin autorización explícita
- Los parches del grafo de objetos se preparan como una revisión incremental, se materializan de nuevo para la verificación xref, se cargan en modo estricto a través de PDFium y se copian o renombran atómicamente solo después de que 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
Agregado (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 estados independientes de firma, cadena, revocación y marca de tiempoTPdf.ValidatePadesTrustAsynctoma una instantánea del origen cargado original antes del despacho, informa el progreso por etapas del trabajo de análisis, criptografía, construcción de cadenas, AIA, OCSP, CRL y marcas de tiempo RFC 3161, y soporta 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 para la recuperación de URLs, un token de cancelación y un callback de progreso
Seguridad (Security)
- Las marcas de tiempo de firma y los tokens de Document Time-stamp ahora validan su impresión de mensaje SHA-256, firma CMS adjunta, cadena TSA y 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 de manera predeterminada la recuperación de certificados solo desde la caché sin conexión, e informa estados no soportados o indeterminados en lugar de tratar como válida la confianza nativa o la evidencia de revocación 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
Agregado (Added)
TPdf.RenewPadesArchiveTimestampyRenewPadesArchiveTimestampToStreamagregan un nuevo Document Time-stamp RFC 3161 a una cadena de firmas PAdES existente sin cambiar ningún byte históricoTPadesArchiveTimestampOptionscontrola el acceso al TSA, el nonce, la capacidad reservada del token y una actualización completa opcional del DSS, mientras queTPadesArchiveTimestampReportregistra los niveles de origen y resultado, las longitudes de cadena, las longitudes 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 a menos 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 del 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
Agregado (Added)
TPdf.AnalyzeSignatureRevisionsreconstruye la cadena original de revisiones incrementales y devuelve los cambios de objetos por firma clasificados contra los permisos DocMDP y FieldMDPTPadesRevisionAnalysisReportdistingue las actualizaciones permitidas de formularios, anotaciones, firmas y material de validación de los cambios no permitidos de páginas o documentos, 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, mientras aplica presupuestos acotados de revisiones, objetos y cambios
- El análisis siempre usa 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
Agregado (Added)
TPdf.PreparePadesRemoteSignaturecrea un marcador de posición de ancho fijo para firma separada y devuelve una solicitud persistente que contiene el resumen SHA-256 del documento, elByteRangeexacto, las coordenadas de reserva y la huella digital del PDF preparadoTPdf.CompletePadesRemoteSignaturefinaliza sesiones de firma con HSM, en la nube o interrumpidas después de validar la solicitud persistida y el CMS devueltoTPdf.SavePadesRemoteSigningRequestyTPdf.LoadPadesRemoteSigningRequestproporcionan un formato de sesión binario versionado y estable para los límites de proceso y de máquina
Seguridad (Security)
- La finalización rechaza PDFs preparados modificados, coordenadas de
ByteRangealteradas, marcadores de posición no vacíos reutilizados, valores CMS demasiado grandes, formas SignedData no soportadas, atributos signing-certificate-v2 faltantes 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
Agregado (Added)
TPadesDssOptions.Vrisescribe un diccionario indirecto/Type /VRIpor firma, con la clave definida por el SHA-1 en mayúsculas del valor/Contentsdecodificado completo, incluido el rellenoTPadesDssVriselecciona material de certificados, OCSP y CRL mediante índices validados, mientras que la firma PAdES B-LT y B-LTA ahora crea el VRI de la firma nueva automáticamente
Cambiado (Changed)
- Los certificados DSS, las respuestas OCSP y las CRL se deduplican por hash de contenido con orden estable de 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
Agregado (Added)
TPdf.GetStructuredTextconvierte la página actual en registros reutilizables de bloques, líneas y fragmentos con estilo, preservando los índices de caracteres de origen, los escalares Unicode, la geometría, los nombres de fuentes, 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 fuentes y semántica, y un presupuesto máximo de caracteres de falla cerrada- Los fragmentos de 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 ordenamiento de caracteres O(n log n), búferes de líneas y fragmentos de crecimiento geométrico, agrupamiento de líneas y columnas, construcción de Unicode en búfer y almacenamiento en 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, quita cada objeto de página de nivel superior que se cruza y pinta un rectángulo de reemplazo opaco sin cambiar el documento cargado- La salida censurada quita las anotaciones de censura, opcionalmente quita otras anotaciones que se cruzan, elimina los adjuntos embebidos nativos y retira el
/AFdel catálogo, 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 falla cerrada para el análisis de objetos de página, mientras queTPdfRedactionReportregistra cada eliminación y métrica de salidaTPdfSanitiseOptions.StripAssociatedFilesahora quita las referencias de archivos asociados a nivel de catálogo de manera predeterminada
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
Agregado (Added)
TPdf.RenderPagesParallelrenderiza de forma concurrente solicitudes de páginas basadas en uno, mientras cada trabajo posee un módulo PDFium, un documento y un estado de página cargados de forma independiente a partir de una instantánea capturada del documentoTPdfParallelRenderOptionscontrola el DPI, la cantidad de trabajos, la rotación, las banderas nativas de renderizado, 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 hacia abajo propiedad del llamador, con éxito, cancelación, falla, dimensiones, tiempos y detalles de diagnóstico por página- El renderizado progresivo de los trabajos consulta
IPdfCancellationTokenentre fragmentos nativos, mientras que las solicitudes inválidas y las fallas de presupuesto quedan aisladas 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
Agregado (Added)
TPdfEncryptionRevision.erR7agrega salida ISO/TS 32003 AES-256-GCM 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, texto cifrado de longitud sin cambios y una etiqueta de autenticación de 128 bits, mientras que
EncryptMetadata = Falsepreserva los bytes del flujo de metadatos DecryptAesGcmDocumentBytesvalida contraseñas de usuario o de propietario, permisos cifrados, datos PDF MAC independientes opcionales y cada etiqueta GCM antes de devolver bytes de texto plano compatibles con PDFium- La salida AESV4 se puede combinar con
TPdfEncryptOptions.EnableIntegrityProtectionpara que la autenticación GCM por objeto y la protección ISO/TS 32004 PDF MAC de todo el documento coexistan - El cifrado ahora usa entradas válidas de referencia cruzada clásica en lugar de interpretar texto con forma de objeto dentro de los datos del 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
Agregado (Added)
TPdfEncryptOptions.EnableIntegrityProtectionescribe códigos de autenticación PDF MAC independientes ISO/TS 32004 para documentos AES-256 del Standard Security Handler revision 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 HMACFPdfHmacagrega HMAC-SHA256 y HKDF-SHA256, mientras queFPdfAesagrega las primitivas RFC 3394 AES-256 Key Wrap y de desenvoltura autenticadaTPdfMacValidationResultdistingue códigos de autenticación válidos, ausentes, inválidos y no soportados 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
Agregado (Added)
TPdf.ValidatePadesahora verifica 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 mezclar evidencia no soportada o no verificada con una firma inválida- El enlace del certificado del firmante se comprueba con SHA-256, las cadenas de certificados usan solo la evaluación de la confianza del sistema Windows desde la caché, 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 en 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
Agregado (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 entradas divididas de forma arbitraria, mientras que SHAKE256 soporta llamadas squeeze repetidas y salida que cruza los límites de tasa del esponjado
- Asistentes de un solo paso para arreglos 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
Agregado (Added)
TPdf.ImportFDFimporta datos de formularios 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 de 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 de forma segura los nombres de los archivos 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
Agregado (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
Agregado (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 hacia abajo, de izquierda a derecha) medianteFPDFText_GetCharBox+ extracción de caracteres ordenada por posición, de modo que el texto multicolumna y reordenado visualmente se lea de forma natural- La enumeración
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
Agregado (Added)
TPdfImageOptimizeOptions.PreserveBilevelomite las imágenes bicolor de 1 bit (ImageMask / escaneos de arte lineal) duranteOptimizeImages, de modo que el submuestreo por vecino más cercano no destruya sus bordes nítidosTPdfImageOptimizeOptions.MinDimensionomite las imágenes más pequeñas que el umbral (típicamente íconos o elementos decorativos que no se benefician de una reducción adicional)TPdfImageOptimizeOptions.Defaultproporciona el punto de partida recomendado (objetivo de 150 DPI, relación de 1.5, bicolor preservado, 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
Agregado (Added)
TPdfTileCacheproporciona una caché LRU acotada de mosaicos de página renderizados, con claves por revisión del documento, página, zoom, rotación, banderas de renderizado y rectángulo de dispositivo, de modo que los mosaicos sin cambios no se vuelven a renderizar en los repintados y los mosaicos obsoletos de un guardado anterior se desalojan 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
Agregado (Added)
TPdf.GetAnnotationFontColoryTPdf.SetAnnotationFontColorenvuelven las funcionesFPDFAnnot_GetFontColoryFPDFAnnot_SetFontColorque estaban enlazadas pero sin uso, exponiendo 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
Agregado (Added)
TPdf.RenderPageBandedrenderiza la página actual en bandas horizontales mediante un callback, de modo que los pósters y las páginas de ingeniería se puedan exportar 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 después de que el callback regresaTPdfBandCallbackexpone el contrato por banda (índice de banda, desplazamiento y superior, mapa de bits) con un valor de retorno Boolean que permite a los llamadores cancelar temprano 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
Agregado (Added)
TPdf.RenderPageProgressiveWithColorSchemeimpulsa el bucle de renderizado progresivo nativo con un esquema de color de baja visión medianteFPDF_RenderPageBitmapWithColorScheme_Start, permitiendo que los llamadores reemplacen los colores de relleno / trazo de trazados y de relleno / trazo de texto para accesibilidad, conservando el bucle Continue con soporte de cancelaciónTPdfColorSchemeexpone los cuatro campos de reemplazoTColorcon 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
Agregado (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 recolecten los campos una sola vez y emitan cualquiera de los dos formatosFdfExportToStreamyFdfExportToFileenFPdfXfdfexponen el serializador FDF de bajo nivel para llamadores que construyen colecciones de campos de manera independiente a 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
Agregado (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 retirada independientes por vector más una pasada opcional de poda por alcanzabilidad;TPdfSanitiseReportregistra el conteo de entradas retiradas, el conteo de objetos podados, los conteos de 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
Agregado (Added)
TPdf.SaveAsPageLabelledescribe una copia PDF completa cuyo árbol numérico/PageLabelsdel catálogo se reemplaza con 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, la enumeración de estilos y los conteos de bytes/rangos por guardado- Las entradas
/PageLabelsexistentes del catálogo se detectan y rechazan a menos que se paseReplaceExisting=True, en cuyo caso la entrada antigua se retira 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
Agregado (Added)
TPdf.FlattenPageRotationincorpora 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 sugerencia de visualización de rotaciónTPdfFlattenRotationOptionsexpone la transformación de anotaciones por página, el intercambio de cajas de página y los controles de actualización automática;TPdfFlattenRotationReportregistra las páginas procesadas, omitidas y fallidas, además del 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
Agregado (Added)
TPdf.StampPagesFromPdfestampa una página de origen como una superposición o capa inferior Form XObject posicionada, escalada y con rotación opcional a través 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 ubicación, transformación, mezcla y orden z, además de los conteos 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
Agregado (Added)
TPdf.RefreshAppearanceregenera de forma selectiva 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
Agregado (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
Agregado (Added)
TPdf.SetDeterministicTimeyTPdf.RestoreActualTimepermiten que las pruebas y las compilaciones reproducibles inyecten una hora fija de creación, modificación y hora actual mediante callbacks nativos soportadosTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.97.0 de manera consistente
Version 2.96.0
Agregado (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
Agregado (Added)
TPdf.GetObjectTextextrae el texto Unicode de un objeto de página de texto medianteFPDFTextObj_GetTextpara edición precisa de contenido y 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
Agregado (Added)
TPdf.AttachmentHasKey,GetAttachmentStringValueySetAttachmentStringValueleen, escriben y sondean valores de extensión personalizados de file-spec en adjuntos embebidosTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.94.0 de manera consistente
Version 2.93.0
Agregado (Added)
TPdf.InsertObjectAtIndexinserta un objeto de página en una posición solicitada de la pila medianteFPDFPage_InsertObjectAtIndexen lugar de agregarlo siempre al finalTPdf.UpdateAnnotationObjectconfirma un objeto de apariencia de anotación editado medianteFPDFAnnot_UpdateObjectpara que los cambios en objetos de página propiedad de la anotación persistan de forma confiableTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.93.0 de manera consistente
Version 2.92.0
Agregado (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
Agregado (Added)
TPdf.GetPageComplexityanaliza la página actual e informa los conteos 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 la planificación del 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
Agregado (Added)
TPdf.IsAnnotationSubtypeSupportedconsulta a la DLL PDFium cargada qué subtipos de anotación soporta antes de editarTPdf.ChooseRenderFlagsselecciona banderas nativas de renderizado (semitonos, caché de imágenes limitada) a partir de la escala final y el 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
Agregado (Added)
TPdf.GetTextRenderModeexpone el modo nativo de renderizado de texto (relleno, trazo, recorte) de un objeto de página de texto para diagnóstico de creaciónTPdf.GetTextObjectRenderedBitmaprenderiza un solo objeto de texto hacia 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
Agregado (Added)
TPdf.GetThumbnailahora recurre a renderizar un reemplazo cuando la página no tiene miniatura embebida, implementando la preferencia de miniatura embebida primeroTPdf.LinkAtPointdevuelve si existe un enlace nativo en una coordenada del espacio de página usandoFPDFLink_GetLinkAtPointen lugar de análisis de solo 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
Agregado (Added)
TPdf.AuditActiveContentdevuelve una instantáneaTPdfActiveContentAuditcon el conteo de acciones JavaScript, el conteo de archivos embebidos, el conteo de firmas, el tipo de formulario XFA y los permisos del documento, sin ejecutar ningún script o 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
Agregado (Added)
TPdf.GetFeatureInventoryanaliza cada página una sola vez y devuelve un registro unificado de los conteos de objetos de texto, trazado, imagen, Form XObject y sombreado, junto con datos de adjuntos, firmas, tipo de formulario, permisos y versión de PDFTPdfFeatureInventoryagrega en una sola instantánea los datos de todo el documento que antes requerían llamadas separadas a propiedadesTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.86.0 de manera consistente
Version 2.85.0
Agregado (Added)
TPdf.SaveAsReproduciblereescribe el documento para que dos guardados del mismo estado en memoria produzcan una salida idéntica byte por byte- Se retiran 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 los objetos se mantienen estables TPdfReproducibleReportinforma los conteos de objetos conservados y podados, además del número de entradas de marcas de tiempo retiradasTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.85.0 de manera consistente
Version 2.84.0
Agregado (Added)
TPdf.SaveAsInlineImagesExternalisedreescribe el documento extrayendo cada imagen en líneaBI/ID/EIhacia un XObject de imagen reutilizable y reemplazando el bloque en línea con un operador/ImN Do- Las abreviaturas del diccionario de imágenes en línea (
/W,/H,/BPC,/CS,/F, valores de espacio de color y valores de filtro) se expanden a sus nombres completos de XObject de imagen 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 los conteos de externalizadas, omitidas y fallidas, además del conteo 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
Agregado (Added)
TPdf.SaveAsFlateRecompressedreescribe el documento y recodifica los flujosFlateDecodeelegibles con compresión máxima, reemplazando un flujo solo cuando el ahorro medido en bytes supera un umbral definido por el llamadorTPdfFlateRecompressOptionsselecciona un ahorro mínimo en bytes y una relación de ahorro mínima para que los flujos ya óptimos queden intactosTPdfFlateRecompressReportinforma los conteos de flujos recomprimidos, omitidos y fallidos, junto con los totales de bytes de los flujos originales y recomprimidos- Los números y generaciones de los objetos se mantienen estables; solo cambian las cargas de los flujos recomprimidos y sus valores
/Lengthdirectos, por lo 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
Agregado (Added)
TPdf.OptimizeImagesrecorre cada objeto de imagen de página y submuestrea aquellas cuyo DPI efectivo de ubicació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 una relación mínima para que solo las imágenes realmente sobremuestreadas se recodifiquenTPdfImageOptimizeReportinforma los conteos de imágenes optimizadas, omitidas y fallidas junto con un mensaje de falla estructurado- El submuestreo usa una pasada por vecino más cercano sobre el búfer nativo de mapa de bits de PDFium, preservando el formato, el stride y el canal alfa del origen, y
FPDFImageObj_SetBitmaprecodifica la imagen resultante 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
Agregado (Added)
TPdf.SaveAsDeduplicatedreescribe el documento como una sola revisión limpia que colapsa fuentes, imágenes y Form XObjects compatibles en un representante compartido único- Una huella digital de contenido recursiva combina cada diccionario de recursos, su subgrafo alcanzable completo y su carga de flujo sin procesar, de modo que los duplicados se fusionan solo cuando todo su contenido es idéntico
- Cada referencia cruzada a un duplicado fusionado se reescribe hacia el representante superviviente, mientras que la tabla de referencias cruzadas clásica reconstruida mantiene estables los números de objeto
TPdfDedupReportinforma los conteos de objetos conservados y podados, además de los conteos 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
Agregado (Added)
TPdf.SaveAsReachablereescribe el documento como una sola revisión limpia que conserva solo los objetos indirectos alcanzables desde el catálogo y el diccionario /Info del trailerTPdfPruneReportinforma los conteos de objetos indirectos conservados y podados junto con los tamaños en bytes del origen y la salida, y razones de falla estructuradas para entradas cifradas o malformadas- Los objetos huérfanos inalcanzables dejados por actualizaciones incrementales, fusiones de páginas o guardados reparados se barren, mientras que la referencia cruzada clásica reconstruida y el trailer 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
Agregado (Added)
TPdf.CreateDocumentSearchcrea una búsqueda de documento completa hacia adelante o hacia atrás que devuelve una coincidencia a la vez sin construir un índice de texto de todo el documentoTPdfDocumentSearchResultinforma la página basada en uno, el rango de caracteres, el texto coincidente y los rectángulos del espacio de página para cada resultado- Las sesiones de búsqueda aceptan
IPdfCancellationToken, retienen solo los identificadores actuales de página y texto 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 sugerencias de PDFium críticas para la página no esperen detrás de descargas en segundo plano- Los bytes dispersos disponibles externamente cancelan las transferencias activas redundantes, mientras que los callbacks de transporte reemplazados o duplicados devuelven False sin publicar cobertura obsoleta
- La promoción de prioridad preserva los historiales de reintentos independientes, y la adelantación del transporte ya no consume el presupuesto de reintentos de las colas de rango no afectadas
TPdfRangeRequestStatistics.SupersededRequestCountinforma el trabajo de transporte desplazado por sugerencias de mayor prioridad o 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
Agregado (Added)
TPdf.SaveAsNormalizedContentescribe el contenido de páginas con sintaxis normalizada hacia un flujo o un archivo reemplazado atómicamente, e informa los conteos de páginas normalizadas, omitidas y fusionadasNormalizePdfContentSequenceproporciona normalización de tokens independiente y acotada para secuencias decodificadas de flujos de contenido
Cambiado (Changed)
- Los arreglos
/Contentsde página ahora se pueden fusionar en un solo flujo preservando cadenas, nombres, cargas de imágenes en línea, operadores desconocidos y estado gráfico entre flujos - Los tokens malformados, los ámbitos de estado desbalanceados, los filtros no soportados, la entrada cifrada y las reescrituras de documentos firmados tienen políticas explícitas y reporte de estado estructurado
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
Agregado (Added)
TPdfStreamInspectorinventaría objetos físicos arbitrarios de flujo PDF e informa desplazamientos de objetos, longitudes sin procesar, cadenas de filtros, DecodeParms, marcadores de archivo externo, estado de cifrado y rutas nativas de imagen o adjuntosCopyRawDatacopia cargas codificadas completas o ventanas de bytes validadas, mientras queDecodeDataaplica predictores ASCIIHex, ASCII85, LZW, Flate, RunLength, TIFF 8-bit y PNG en el orden declaradoTPdfStreamInspectOptionsacota los recursos de origen, sin procesar, decodificados, de diccionario, de conteo de flujos y de relación de expansión, con informes estructurados para límites, datos malformados, códecs no soportados, cifrado y fallas de escritura
Cambiado (Changed)
- La resolución de longitud de flujos 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
Agregado (Added)
TPdfLoadOptionsagrega políticas compatible, estricta y de recuperación a la carga desde archivo, memoria, rango de bytes y flujo personalizadoTPdfLoadReportinforma la ruta de recuperación nativa, la validez del xref, los desplazamientos dañados, los conflictos de entradas, los conteos de revisiones, los presupuestos de auditoría y los problemas estructurados para documentos clásicos, híbridos y de flujo xrefTPdf.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 nativa del xref y el estado de recuperación a través de
LastLoadReport - La carga estricta rechaza los documentos que requirieron reconstrucción nativa del xref o fallaron la auditoría estructural, mientras que la salida reparada 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
Agregado (Added)
TPdf.MergeFilescombina listas de orígenes respaldados por archivos con rangos de páginas y contraseñas por origen, manteniendo abierto como máximo un documento de origenTPdfBatchMergeOptionsagrega manejo de errores de detener u omitir, importaciones por origen o por fragmentos, políticas de formularios y esquemas, control de inserción, callbacks de progreso, cancelación, copia de preferencias del visor y control de reversiónTPdfBatchMergeReportinforma las páginas confirmadas y revertidas, los resultados por origen, las llamadas de importación nativas, el lote más grande, el máximo de orígenes abiertos, las detecciones de políticas, los problemas y el estado terminal
Cambiado (Changed)
- La ruta de lote predeterminada realiza una importación nativa de páginas por origen para que PDFium pueda reutilizar objetos clonados a lo largo 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 parcialmente fallidos y los resultados de detener o cancelar pueden quitar 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
Agregado (Added)
TPdfRandomAccessStoreproporciona E/S secuencial y posicionada segura para subprocesos, mantiene el contenido pequeño en memoria acotada y se descarga una sola vez a almacenamiento temporal privado al alcanzar un techo seleccionado por el llamadorTPdf.SaveMemoryLimitySaveTemporaryDirectoryconfiguran la puesta en espera del guardado, mientras queLastSaveSpillCountyLastSaveLargestMemoryBufferexponen diagnósticos medibles por guardado
Cambiado (Changed)
- Los búferes de puesta en espera de guardado, conversión de estándares, validación, cifrado, DSS y PAdES ahora comparten almacenamiento de trabajo acotado con archivos de descarga exclusivos de eliminación al cierre y limpieza de memoria
- Los callbacks personalizados de bloques de PDFium serializan las búsquedas ordinarias de flujos y usan lecturas posicionadas independientes del cursor cuando están respaldados por
TPdfRandomAccessStore - El análisis de capacidades XFA basado en archivos ahora lee bloques superpuestos de tamaño fijo en lugar de copiar el PDF completo a 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
Agregado (Added)
TPdf.BeginIncrementalSave,CommitIncrementalSaveyEndIncrementalSaveproporcionan una sesión de revisiones que agrega solo los objetos indirectos cambiados o recién creadosTPdfIncrementalCommitInfoinforma el conteo de objetos cambiados, los bytes agregados, los bytes totales de salida y el conteo de revisiones exitosas por cada confirmación
Cambiado (Changed)
- Cada confirmación con cambios preserva la salida anterior completa como prefijo exacto de bytes, no emite revisión cuando nada cambió y continúa el formato clásico o de flujo xref del origen
- La salida incremental nativa de flujo xref se repara con su tipo, entrada propia, longitud, índice y terminador de objeto requeridos antes de procesarla más
- 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 se pueda omitir 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 después de cualquier falla 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
Agregado (Added)
TPdf.SaveAsObjectStreamescribe archivos PDF 1.5+ con grupos de objetos comprimidos acotados y un flujo xref puro que contiene entradas type-2 completasPackPdfObjectStreamspuede modernizar la entrada clásica, híbrida, de flujo xref y de flujo de objetos existente después de resolver la revisión activa
Cambiado (Changed)
- El ordenamiento 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 decodificados 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 inválidas de incremental, versión y agrupamiento 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
Agregado (Added)
TPdf.SaveAsLinearizedescribe un PDF Fast Web View verdadero hacia un flujo o archivo usando agrupamiento de objetos de primera página, dos secciones de referencia cruzada y tablas de sugerencias de desplazamiento de página y objetos compartidos del Annex F- Los miembros activos de flujos de objetos se materializan automáticamente, permitiendo que las entradas de flujo xref y de flujo de objetos se conviertan en salida amigable para 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
Agregado (Added)
TPdfRangeRequestSchedulerconvierte las sugerencias de rangos de bytes de PDFium en trabajo de transporte priorizado, fusionado y de tamaño acotado sin forzar una descarga contigua- La compleción total y parcial, los reintentos acotados, la deduplicación de disponibilidad dispersa, las estadísticas de solicitudes y la cancelación segura por generación soportan pipelines de transporte HTTP Range y personalizados
TPdfProgressiveDocument.RangeRequestsrecibe automáticamente las sugerencias 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 de la disponibilidad y del flujo nativos, y las compleciones de transporte obsoletas se ignoran de forma seguraTPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos del instalador ahora informan Version 2.69.0 de manera consistente
Version 2.68.0
Agregado (Added)
TPdfProgressiveDocumentmantiene viva la sesión de disponibilidad de PDFium mientras un flujo de acceso aleatorio remoto o en crecimiento recibe los rangos de bytes que PDFium solicitaCheckDocumentAvailability,CheckFormAvailabilityyLoadAvailablePagedevuelven sugerenciasTPdfDownloadRangefusionadas para que un host pueda obtener solo los datos necesarios para abrir y mostrar una página linealizadaAvailableByteCountsoporta descargas contiguas monótonas, mientras queOnDataAvailablesoporta cachés de rangos dispersos y fuera de orden
Cambiado (Changed)
- Los archivos linealizados usan las puertas nativas de documento, formulario y página progresivos de PDFium; los archivos no linealizados cambian automáticamente al cargador nativo de flujo personalizado después de que 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
Agregado (Added)
TPdfView.AllowFormEventsdesactiva los eventos de mouse, teclado y enfoque 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 del formulario- Los campos de formulario siguen renderizándose normalmente con la opción desactivada: la carga y el cierre de páginas se dejan deliberadamente sin puerta, ya que estos inicializan la capa de formulario en lugar de reaccionar a la entrada
- El interruptor se suma a los conmutadores existentes
AllowUserPageChangeyAllowUserTextSelectiony es True de manera predeterminada, por lo 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
Agregado (Added)
- Las acciones con nombre que un documento genera (ISO 32000-1 §12.6.4.11) ahora llegan al host a través del nuevo evento
OnNamedAction; antes todas ellas se descartaban - Si no se manejan, los cuatro nombres estándar de navegación —
NextPage,PrevPage,FirstPage,LastPage— mueven la página, ajustándose al límite en la primera y la última en lugar de dar la vuelta TPdf.PerformNamedActionpermite que una aplicación active el mismo comportamiento directamente, devolviendo False para un nombre que no tiene un significado proporcionado por la biblioteca
Corregido (Fixed)
- Una prueba de cifrado medía el cuerpo de un flujo analizando hacia atrás desde
endstream, lo que en ocasiones confundía un byte del texto cifrado con un terminador de línea e informaba una falla 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
Agregado (Added)
BuildToUnicodeCMapgenera el CMap ToUnicode (ISO 32000-1 §9.10.3) que una fuente CID necesita para que su texto se pueda copiar, buscar y leer 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, por lo que no se necesita un flujo
CIDToGIDMapjunto a él
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
Agregado (Added)
- Las anotaciones de tinta y de sello se dibujan a partir de sus propios objetos de página en lugar del 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: basta con crear el trazado como de costumbre y entregarlo a la anotación en lugar de a la página
- PDFium acepta objetos de página solo en los subtipos de tinta y sello, por lo que cualquier otro subtipo se rechaza con un mensaje que nombra la restricción en lugar de fallar de manera 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
Agregado (Added)
TPdf.AddStandardFontTextdibuja texto con una de las 14 fuentes que todo lector de PDF debe proporcionar, sin embeber ningún programa de fuente — el archivo resultante es mediblemente más pequeño que el mismo texto dibujado conAddText, que embebe la tipografía del sistema que encuentra- La nueva enumeración
TPdfStandardFontnombra las 14 tipografías, de modo que un llamador no puede escribir mal un nombre de fuente base; PDFium coincide con esos nombres de forma exacta y un error tipográfico daría silenciosamente como resultado la ausencia de fuente - PDF/A y PDF/X exigen que toda fuente esté embebida, por lo que la salida dirigida 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
Agregado (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 pudo haber alterado- El resultado reutiliza el tipo
TPdfPathSegmentsexistente, por lo que se lee exactamente como el contorno de un objeto de trazado dibujado - Las coordenadas están en el espacio de diseño propio de la fuente, normalizadas para que una em sea 1.0; el tamaño de fuente solicitado no las escala, por lo que un llamador que quiera unidades de dispositivo debe multiplicarlas por el tamaño en puntos por su cuenta
- Un resultado vacío significa que la fuente no expone un contorno para ese glifo, lo cual no es un error; solicitar el 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
Agregado (Added)
TPdf.InspectAvailabilityinforma lo que PDFium puede decir de un PDF sin cargarlo como documento: si el archivo está linealizado (“optimizado para web”), si un análisis completo tendría éxito, si lleva 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 regresar - Esto cierra la última brecha en 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 informados, la garantía de posición del flujo y el rechazo de flujos 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
Agregado (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 el MCID - Los nuevos tipos
TPdfContentMark,TPdfContentMarkParamyTPdfMarkParamKindtransportan el nombre de la etiqueta y sus parámetros tipados (entero, flotante, cadena, blob), con el tipo de valor resuelto desde PDFium en lugar de adivinado a partir del getter que tiene éxito - Agregar 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 infla el flujo de contenido guardado para confirmar que el operador BDC y su lista de propiedades realmente quedaron en el archivo
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
Agregado (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 dada- 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 se hace a través de la familia
FPDFLink_*, que necesita el identificador 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
Agregado (Added)
- La validación de PDF/X informa
pvxiTrimBoxWithArtBoxcuando una página lleva/TrimBoxy/ArtBoxjuntos; ambos declaran la página terminada, por lo que un RIP no tiene forma de saber cuál es autoritativa (ISO 15930) - La validación de PDF/X informa
pvxiPageBoxOutsideMediaBoxcuando/TrimBoxo/BleedBoxalcanzan fuera de/MediaBox, incluida una caja con origen negativo; una caja que sobresale del medio no se puede reproducir - 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 medio sigue validando
- Los informes de preflight clasifican ambos problemas 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
Agregado (Added)
- La validación de PDF/UA informa
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 contenido sin tabla de contenido (ISO 14289-1 §7.7) - Los informes de preflight clasifican el problema bajo estructura y recomiendan envolver las entradas en un elemento TOC
- C++Builder obtiene su primera cobertura de pruebas de 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
Agregado (Added)
- La validación de PDF/A informa
pvaiSymbolicTrueTypeEncodingcuando una fuente TrueType simbólica lleva una entrada/Encoding; ISO 19005-1 §6.3.7 admite solo el cmap integrado de la fuente, por lo que un/Encodinglo contradiría - La bandera simbólica se lee del
/FontDescriptor, ya sea que esté escrita en línea en el diccionario de la fuente o referenciada de forma indirecta; una fuente no simbólica conserva su/WinAnsiEncodingo/MacRomanEncodingrequerido sin ser marcada - Los informes de preflight clasifican el problema bajo contenido y recomiendan quitar la entrada
- Delphi y Lazarus cubren el caso marcado más ambos casos aceptados; C++Builder cubre el caso marcado y el caso 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
Agregado (Added)
- La validación de PDF/A informa los límites de implementación de contenedores del Anexo C de ISO 19005-1:
pvaiNameOverLimitpara nombres de más de 127 bytes,pvaiArrayOverLimitmás allá de 8191 elementos,pvaiDictOverLimitmás allá de 4095 entradas ypvaiNestingOverLimitmás allá 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 los cuatro problemas bajo estructura y nombran el límite concreto en cada recomendación
- Delphi y Lazarus cubren los cuatro límites más los casos de frontera; C++Builder cubre el límite de arreglos 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
Agregado (Added)
- La validación de PDF/R informa
pvriPageImageMismatchcuando el conteo de imágenes no coincide con el conteo de páginas; ISO 23504-1 §6.5.1 hace que cada página sea exactamente una imagen de tira, por lo 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 imagen
Cambiado (Changed)
- Las pruebas de inyección de marcadores de PDF/R ahora comienzan desde una página de origen que ya lleva una imagen de tira, ya que la inyección de marcadores agrega 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
Agregado (Added)
- La validación de PDF/R informa
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 de PDF/R informa
pvriForbiddenImageFilterpara codificaciones de tira fuera de la lista blanca, por lo que/LZWDecode,/RunLengthDecode,/ASCII85Decode,/ASCIIHexDecode,/JBIG2Decodey/Cryptse rechazan mientras que/CCITTFaxDecode,/DCTDecode,/JPXDecodey/FlateDecodepasan (ISO 23504-1 §6.6) - Los informes de preflight clasifican ambos problemas 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
Agregado (Added)
- La validación de PDF/E informa
pveiFontNotEmbeddedcuando un documento muestra uso de fuentes pero no lleva ningún programa de fuente embebido, de modo que el requisito se verifica también en la ruta sin DLL y a través de PDFium - Un plano de ingeniería tiene que renderizarse de forma idéntica décadas después, por lo 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 el problema nuevo bajo contenido y recomiendan embeber cada programa de fuente
- Las pruebas de Delphi, Lazarus y C++Builder cubren un descriptor sin programa, un
/FontFile2embebido 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
Agregado (Added)
InjectPdfEMarkersahora escribe el output intent que exige ISO 24517-1 §6.2: un perfil ICC de destino sRGB embebido, un output intent/GTS_PDFE1que lo nombra y el arreglo/OutputIntentsdel catálogo, todo como parte de la misma actualización incremental- El flujo del perfil deriva su
/Ndel encabezado ICC en lugar de asumir tres componentes, de modo que un perfil CMYK se describiría correctamente - La validación de PDF/E informa
pveiMissingOutputIntentypveiMissingIccProfile, por lo que un candidato sin una condición de color declarada ya no se acepta - Las pruebas de Delphi, Lazarus y C++Builder cubren un output intent aceptado, uno sin perfil de destino y un catálogo sin ningún 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
Agregado (Added)
- La validación de PDF/X ahora informa
pvxiFontNotEmbeddeddesde un análisis de bytes, de modo que una fuente no embebida 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, por lo que cualquier uso de fuente sin un programa de fuente embebido se informa
- La comprobación se mantiene conservadora: se dispara solo cuando el archivo muestra uso de fuentes pero no lleva ningún
/FontFile,/FontFile2o/FontFile3, porque contar descriptores contra programas produce falsos positivos en descriptores compartidos - Las pruebas de Delphi, Lazarus y C++Builder cubren un descriptor sin programa, un programa embebido 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
Agregado (Added)
- La validación de PDF/X ahora informa
pvxiColorSpaceForbiddencuando un candidato PDF/X-1a lleva/DeviceRGB,/CalRGBo/Lab, que ISO 15930-1 §6.2 excluye de su intercambio CMYK - La comprobación está activada solo para PDF/X-1a, por lo que PDF/X-3 y posteriores siguen permitiendo RGB y los espacios independientes del dispositivo que acompañan al output intent
- Solo se prueban tokens de nombre de espacio de color sin ambigüedad; un flujo
ICCBasednecesita que su/Nse resuelva 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
Agregado (Added)
- La validación de PDF/X ahora informa
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 está activada según la conformidad detectada, de modo que PDF/X-4 y PDF/X-6 siguen permitiendo la transparencia y un archivo cuyo nivel no se pudo identificar nunca se marca por una regla que podría no aplicársele
- Una máscara suave desactivada explícitamente con
/SMask /Noneno se trata como transparencia PdfHasActiveSMaskse movió deFPdfPdfaa la interfazFPdfPdfCommonpara que cada validador pueda compartir una sola regla de máscaras suaves- 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
Agregado (Added)
- La validación de PDF/X ahora comprueba la forma del output intent que exige ISO 15930-7 §6.2.4:
pvxiOutputIntentSchemeinforma un subtipo presente que no es/GTS_PDFX, ypvxiOutputIntentMissingIdentifierinforma un/OutputConditionIdentifierfaltante - 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 - Un output intent que no lleva ningún subtipo se deja en paz, porque su ausencia ya la informan los problemas a nivel de marcador
- Los informes de preflight registran ambos problemas 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 faltante
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)
- Los 35 callbacks 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 falla documentado en lugar de deshacerse a través de la frontera de lenguajes
- Un controlador de eventos que lanza una excepción, una asignación que falla o un error inesperado dentro de un callback ya no pueden derribar el proceso ni dejar a PDFium en un estado indefinido
Corregido (Fixed)
- El registro de un temporizador de formulario filtraba su entrada cuando el temporizador subyacente no se podía crear
Agregado (Added)
- Las pruebas de Delphi, Lazarus y C++Builder ahora cubren el guardado en un flujo de destino que rechaza las escrituras y comprueban que el documento sigue siendo utilizable y guardable después
Version 2.57.8
Corregido (Fixed)
- Las versiones anteriores de Delphi (XE5 y anteriores) dejaban de compilar la biblioteca de prueba con
E2003 Undeclared identifier: 'GetTickCount64'enFPdfPades.pas, porque la unidad Windows incluida con esos compiladores no exporta el símbolo - Los mismos compiladores también fallaban en
GetUserDefaultLocaleNameenPDFium.pasy en la asignación deTBytesaarray of ByteenGetXfaFormPackets, por lo que el callback de configuración regional de XFA y la instantánea de paquetes ahora también se 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 contenía un documento más largo no puede conservar una cola obsoleta después del nuevo
%%EOF - Las pruebas de Delphi, Lazarus y C++Builder ahora cubren el guardado en un flujo rellenado previamente
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 análisis de objetos que precede al cifrado aceptaba secuencias de dígitos de cualquier longitud, por lo que un número largo en cualquier parte del archivo podía desbordarse hacia un número de objeto negativo o falso y agregar 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 por encima de 65535 ahora se rechazan como encabezados de objeto en lugar de truncarse
Agregado (Added)
- Las pruebas de Delphi, Lazarus y C++Builder ahora comprueban el conteo 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, por lo 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 todos los demás flujos se siguen cifrando
Agregado (Added)
AnsiNameTokenMatchesKeyahora es parte de la interfazFPdfPdfCommonpara comparaciones de nombres sensibles a 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 cabeza obligatoria de lista libre del objeto 0 que exige ISO 32000-1 §7.5.4, por lo 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 concuerda con los encabezados de objeto a los que apunta
Agregado (Added)
- Las pruebas de Delphi, Lazarus y C++Builder ahora cubren la entrada de cabeza 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 descartaba la palabra clave
streamde cada objeto de flujo, por lo que el archivo guardado ya no era sintaxis PDF válida y los lectores estrictos informaban el contenido de la página ni como flujo ni como arreglo de flujos - La reescritura de
/Lengthcoincidía con/Lengthcomo una subcadena simple, por lo que un diccionario de flujo que llevaba/Length1(cualquier fuente embebida) terminaba con el nombre de clave corrupto mientras la longitud real quedaba obsoleta - Un flujo que declaraba su longitud de forma indirecta como
/Length N 0 Rterminaba con el número de objeto sobrescrito con la nueva longitud; la entrada ahora se reemplaza por la longitud cifrada directa - Un diccionario de flujo sin ningún
/Lengthahora recibe uno en lugar de dejar al lector sin longitud
Agregado (Added)
AnsiFindDictKeyTokenahora es parte de la interfazFPdfPdfCommonpara búsquedas de claves de diccionario de nivel superior sensibles a delimitadores- Las pruebas de Delphi, Lazarus y C++Builder ahora cubren la preservación de
/Length1, el reemplazo 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 demasiado abajo 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 de propietario en cualquier lector conforme, y siguen rechazando una contraseña incorrecta
Agregado (Added)
- Los conjuntos de pruebas de Lazarus y C++Builder obtuvieron cobertura de cifrado que antes era solo de Delphi: longitudes de clave R6, campos del diccionario Encrypt, un recorrido de ida y vuelta 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 cursor de texto y alternar casillas de verificación ahora repinta solo el área que PDFium informa como dañada en lugar de todo el visor
- Las cajas de daño se normalizan para el eje Y de la página hacia arriba, se ensanchan un píxel para que los bordes de widgets con antialias se mantengan limpios y se recortan al área cliente visible
- Una caja de daño que se desplaza completamente fuera de la ventana gráfica ya no programa un repintado, mientras que una vista inactiva o una página no mapeada sigue recurriendo a un repintado completo
- Las pruebas de Delphi, Lazarus y C++Builder ahora cubren la invalidación acotada de formularios, cajas de página invertidas, 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
Agregado (Added)
TPdfThumbnailView.Orientationsoporta diseños de miniaturas verticales y horizontales conservando el valor predeterminado vertical existenteFirstVisiblePageIndex,LastVisiblePageIndexyEnsureCurrentPageVisibleexponen y controlan la ventana gráfica de miniaturas con índices de página basados en uno
Cambiado (Changed)
- Cambiar
CurrentPageIndexahora desplaza la miniatura seleccionada a la vista en cualquiera de las dos orientaciones - Las pruebas de Delphi, Lazarus y C++Builder ahora cubren los valores predeterminados de orientación, el cambio, 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 agregaron o quitaron en lugar de repintar el visor completo- Reemplazar resaltes con las mismas coincidencias o agregar coincidencias duplicadas ya no programa un repintado innecesario
- Las pruebas de Delphi, Lazarus y C++Builder ahora cubren la invalidación acotada, las actualizaciones idempotentes, el borrado y la seguridad de vista inactiva
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 a lo largo de repintados y posiciones de desplazamiento adyacentes- La caché retiene únicamente el rango de páginas visibles actual y libera las entradas precisamente cuando las páginas salen de ese rango, cambia el documento asignado o cambian las dimensiones de la miniatura
- Las pruebas de Delphi, Lazarus y C++Builder ahora cubren la reutilización de la caché, la poda de la ventana gráfica, la invalidación por tamaño, el reemplazo de documentos 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
Agregado (Added)
TPdfView.CutSelectedFormTextToClipboardyTPdfView.PasteFormTextFromClipboardproporcionan edición del portapapeles Unicode para el widget de formulario editable enfocado
Cambiado (Changed)
- Los editores de formulario enfocados ahora manejan los atajos estándar de teclado de 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 quitar el texto seleccionado
- Las pruebas de Delphi, Lazarus y C++Builder ahora cubren llamadas sin enfoque, el recorrido de ida y vuelta de atajos y el comportamiento de 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
Agregado (Added)
TPdfView.AddSearchTextHighlightagrega coincidencias únicas de otro término de búsqueda a la superposición de la 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 de 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
Agregado (Added)
TPdfahora expone snapshots completos de objetos de página, actualizaciones de estilo por lotes, transformaciones afines de objetos, segmentos de trazado, trazados de recorte y elementos secundarios de Form XObject- La inspección de caracteres ahora incluye colores de relleno y trazo, nombre y banderas de fuente, límites sueltos de glifos, matrices efectivas, identificadores de objetos de texto y conversión de índice de carácter a texto
- Las anotaciones ahora hacen un recorrido de ida y vuelta con la geometría del borde y los flujos de apariencia normal, rollover y down
- Nuevos accesores de miniaturas raw y decoded, transformaciones de contenido de página y anotaciones, y
RenderPageWithMatrixproporcionan rutas avanzadas directas de renderizado y edición
Cambiado (Changed)
- Los cambios de estilo de objetos de página se pueden confirmar como un solo lote para que PDFium regenere el contenido de la página únicamente una vez
- El renderizado por matriz usa la ruta existente de mapa de bits sin copia cuando el diseño del mapa de bits de destino es compatible
Version 2.53.1
Corregido (Fixed)
- El título del menú Copy integrado en chino ahora usa puntos de código Unicode independientes de la codificación y se muestra correctamente en las compilaciones de Lazarus
- Las cadenas de herramientas de Delphi más antiguas pueden compilar
FPdfAsynccuando su unidadWinapi.Windowsomite la declaración deGetTickCount64
Version 2.53.0
Agregado (Added)
- Nuevo fixture de pruebas
Tests.ApiCoverageque cubre las APIs públicas de TPdf que anteriormente tenían cero cobertura de pruebas de extremo a extremo:GetPageBox/SetPageBox(lectura/escritura de MediaBox/CropBox, errores de caja faltante y recorrido de ida y vuelta de guardado),FlattenPage/FlattenAllPages(valor de retorno y preservación del conteo de páginas),GenerateFormAppearances(no-op en documentos que no son formularios),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 abre con ella), validación de límites deDeletePage(la página 0 y los valores 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
Agregado (Added)
TPdfView.CopySelectedFormTextToClipboardcopia la selección de texto dentro del widget AcroForm enfocado al portapapeles de Windows comoCF_UNICODETEXT
Cambiado (Changed)
- Las operaciones de copia de texto de página y formulario enfocado ahora comparten el mismo escritor defensivo del portapapeles Unicode y dejan el portapapeles sin cambios cuando su selección está vacía
- Las pruebas de Delphi, Lazarus y C++Builder ahora cubren llamadas inactivas o no enfocadas de copia de formulario y un recorrido de ida y vuelta de selección de formulario enfocado 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
Agregado (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 mouse
Cambiado (Changed)
- La selección programática de línea, la selección con triple clic y
Shift+HomeoShift+Endahora comparten un modelo de límite de línea de caja de caracteres - Las pruebas de Delphi, Lazarus y C++Builder ahora cubren la selección estable de línea y los índices de página o carácter invá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
Agregado (Added)
TPdf.LoadDocumentahora acepta una ventanaIndexbasada en cero yCounten un búferTBytes, permitiendo que los PDFs embebidos se carguen sin asignar una porción temporal de arreglo de bytes
Cambiado (Changed)
- La carga por rango de bytes rechaza ventanas negativas o fuera de los límites antes de cambiar el estado del documento y preserva las opciones existentes de duración de búfer almacenado y prestado
- Las pruebas de Delphi, Lazarus y C++Builder ahora cubren las ventanas de PDF embebido y los argumentos inválidos de rango de bytes
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
Agregado (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 en la 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 de 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
Agregado (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 mouse, 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
Agregado (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
Agregado (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 de 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
Agregado (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
Agregado (Added)
FPdfPreflightReportahora asigna severidad Info, Warning o Error a cada problema y expone APIs de severidad, estado, 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 estado ampliados; HTML agrega subtítulos de tabla accesibles y un resumen de estado
- 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
Agregado (Added)
- Los marcadores y destinos exponen el estado de apertura, los conteos 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 la política, el tiempo de generación y los detalles del nonce
Cambiado (Changed)
- Las rutas de marcadores, JavaScript, metadatos, destinos y miniaturas utilizan búferes validados de dos pasadas, crecimiento geométrico de colecciones y recorrido seguro contra 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 xref actual, almacena en caché los flujos de objetos decodificados y escanea los diccionarios PDF con límites léxicos
- El análisis compartido de PDF ahora exige encabezados de objeto exactos, generaciones, claves de diccionario, longitudes de flujo, geometría de 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
messageImprintSHA-256, 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 agregar 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 ordenamiento malformado de campos opcionales CMS y los conjuntos vacíos de firmantes se rechazan
- Las compilaciones limpias de Delphi ahora escriben los campos de semilla de nonce PAdES mediante copias de bytes seguras para 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
Agregado (Added)
- Los registros de campos y anotaciones XFDF ahora exponen banderas de presencia que distinguen un valor XML omitido de un valor explícitamente vacío
Cambiado (Changed)
- La importación de XFDF acepta elementos y atributos con prefijo de espacio de nombres, contenido mixto de texto y CDATA, referencias a entidades y valores significativos en espacios en blanco, mientras rechaza referencias a escalares Unicode no válidas
- La importación y exportación de 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 grandes de anotaciones, listas de tinta, vértices y cuadriláteros de marcado
- La validación de PDF/A y PDF/UA utiliza un crecimiento acotado para colecciones grandes de páginas, flujos, nombres de estructura y RoleMap; la resolución de RoleMap de PDF/UA ahora sigue matrices directas y objetos de matriz o nombre indirectos de generación exacta
Corregido (Fixed)
- Las idas y vueltas de XFDF ahora preservan rutas de campo profundamente anidadas, valores de campo explícitamente vacíos, contenidos de anotación 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ágina fuera de rango se rechazan sin dejar un estado parcial de documento o página, y una recarga fallida de página nativa preserva la página activa anterior
- Los identificadores grandes de contenido marcado y los búferes de metadatos de firma se acotan y validan antes de la asignación o el acceso nativo
Version 2.42.0
Agregado (Added)
TPdfMatrixahora proporcionaInvert,TryInvert,TransformPointyTransformRectpara el mapeo de coordenadas, pruebas de impacto, límites normalizados y manejo explícito de matrices singularesTPdf.WrapTextobtuvo una sobrecarga deBreakLongWordsque divide CJK y otros textos sin espacios mientras mantiene juntos los pares sustitutos UTF-16 válidosTPdfAnnotation.AttachmentPointSetsexpone cada cuadrilátero en anotaciones de marcado multilínea mientras que el campo existenteAttachmentPointssigue 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 desplazamiento de texto hablado ahora utilizan asignación acotada y rutas de búsqueda binaria, lo que reduce las asignaciones repetidas y los escaneos lineales en páginas grandes
- La serialización ASN.1 y la generación de PDF cifrado ahora utilizan búferes de salida geométricos; el ordenamiento de objetos cifrados utiliza clasificación
O(n log n)y las filas xref se escriben directamente en el búfer final WrapTextpreserva 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 de XFDF preservan cada cuadrilátero de marcado; la importación también aplica colores RGB e interiores y analiza coordenadas decimales independientemente de la configuración regional del proceso
Corregido (Fixed)
- Los llamadores heredados pueden actualizar nuevamente el contenido y el autor de la anotación asignando cadenas no vacías sin establecer los centinelas más nuevos
HasContentsyHasAuthor - Las cadenas de anotación explícitamente vacías ahora usan un búfer nativo terminado en cero válido, por lo que borrar
/Contents,/Ty otras claves de texto opcionales ya no pasa un puntero nulo a PDFium
Version 2.41.0
Cambiado (Changed)
- Los informes de preflight
SaveJsonToFile,SaveMarkdownToFileySaveTextToFileahora escriben en UTF-8 en Delphi (coincidiendo con el método existenteSaveHtmlToFile) en lugar de la página de códigos ANSI del sistema; los caracteres no ASCII en las rutas de archivo, recomendaciones y notas de alcance se mostraban incorrectamente en Delphi al guardarse mediante 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 code-page 1252 y altera los caracteres no ASCII
Corregido (Fixed)
- La demostración
ExtractImagesfiltraba los objetosTBitmapalmacenados en caché enFExtractedImagescuando el formulario se cerraba sin borrarlos explícitamente antes; ahora el formulario invalidaDestroypara llamar aClearExtractedImages, liberando cada mapa de bits en caché
Version 2.40.0
Cambiado (Changed)
TPdf.RenderPage(HDC, ...)ahora enmascara las excepciones de FPU/SSE alrededor de la llamadaFPDF_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 en el nivel deTPdfanteriormente dejaba las excepciones de 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 “sin 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 los estados de transparencia no predeterminados
Version 2.39.0
Cambiado (Changed)
CreatePDFyImageToPDFahora usan destinos de guardado confirmados y reportan é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 los tokens de rango de páginas malformados y las rutas de salida que sobrescriben el origen, cuenta las páginas realmente importadas y se niega a guardar un resultado vacío- Las demostraciones de
Attachmenten Delphi y C++Builder ahora confirman los guardados en la misma ruta mediante un reemplazo de archivos seguro contra reversión, 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 de forma incondicional, por lo que la asignación de un registroDefault(TPdfAnnotation)para actualizar solo el color o las banderas sobrescribía silenciosamente el contenido y el autor existentes de la anotación con cadenas vacías;GetPageAnnotationahora establece los centinelas para que un ciclo de lectura-modificación-escritura preserve los valores originales
Corregido (Fixed)
GenerateFormAppearancesahora lee el valor de la casilla de verificación o del botón de opción medianteFPDFAnnot_GetFormFieldValue(que se dirige al diccionario del campo principal 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 mostraba como no marcado
Version 2.37.0
Cambiado (Changed)
ParseTsaUrlahora limita el puerto a1..65535después de analizarlo; de lo contrario, un valor de puerto de tamaño excesivo se desbordaría mediante la truncación deDWORDy podría terminar en un puerto válidoParseFielden XFDF ahora acepta un parámetro de profundidad (por defecto 0, limitado a 64) y devuelve un campo vacío al alcanzar el límite, de modo que una cadena maliciosa de<field>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 un arreglo dinámico de longitud cero accedería a un puntero no válido;BuildTimeStampReqsiempre devuelve una SEQUENCE no vacía, pero el punto de llamada ahora defiende el contrato
Notas (Notes)
- Se ha corregido el comentario de la cabecera
FPdfTsaWinsobre la verificación de revocación HTTPS: WinHttp valida la cadena de certificados del servidor de forma predeterminada pero no realiza la verificación de revocación CRL/OCSP a menos que se habilite explícitamente medianteWinHttpSetOption; la redacción anterior afirmaba que la verificació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 Requiredsi no se incluye - La exportación XFDF ahora omite los caracteres de control C0 (distintos de TAB/LF/CR que ya están escapados) en lugar de emitir una secuencia hexadecimal de barra invertida no válida; el escape
\-01Fanterior no es XML válido (la barra invertida no tiene un significado especial en XML), por lo que cualquier lector compatible habría rechazado el documento por estar malformado InjectAssociatedFilesahora escribe/Subtypeen el diccionario de flujo de EmbeddedFile cuando el llamador proporcionaTAssociateFile.MIMEType; el campo estaba declarado y documentado, pero el inyector anteriormente tenía codificado de forma fija/Type /EmbeddedFiley lo ignoraba (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 un BOM UTF-8 y el primer byte cuando no había BOM presente:
BytesToAnsi(Bytes, 4, ...)(con BOM) yBytesToAnsi(Bytes, 1, ...)(sin BOM) usaban desplazamientos iniciales con un desfase de uno porqueBytesToAnsitoma un índice de arreglo basado en 0; las llamadas ahora usan3y0 ExtractSignatureValuetenía dos errores de sangría deifcolgados dondeR.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, de modo que el modo documentado de solo consultanullptr(verificar la disponibilidad actual sin solicitar más datos) sea accesible desde Delphi; la cabecera de PDFium permite explícitamente quehintssea nulo; la vinculaciónvaranterior lo hacía imposibleTFPDF_SetSystemFontInfoahora tomapFontInfo: PFPDF_SYSFONTINFOen lugar devar pFontInfo: FPDF_SYSFONTINFO, para que los llamadores puedan pasarnilpara indicarle a PDFium que deje de usar una interfaz de fuentes del sistema registrada anteriormente (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 por una fila en alturas límite, desperdiciando un renderizado en una fila fuera de la página o perdiendo la última fila visible
Version 2.34.0
Agregado (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); toma una estructuraTPdfEncryptOptionscon 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 de flujo (diccionario Info, etc.) a 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 intactas
Version 2.33.0
Agregado (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, agrega 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) - Asistente
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
Agregado (Added)
- Hash SHA-512 / SHA-384 (FIPS 180-4) en la nueva unidad
FPdfSha512.pas, implementado en Pascal puro. Lo requiere la iteración del hash de contraseña PDF 2.0 R6, que usa un valor mod-3 de 128-bit para elegir SHA-256/384/512 en cada ronda. Verificado 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 (iteración R6: AES-128-CBC + selección iterativa de SHA-256/384/512), deriva la clave de cifrado del archivo de 32-byte junto con las entradas/O,/U,/OE,/UEy/Perms, y construye el diccionario Encrypt V=5/R=5/R=6 con/CFM /AESV3. Usa búferes de bytes de estilo TBytes
Version 2.31.0
Agregado (Added)
- Primitivas de cifrado por bloques AES (FIPS 197) en la nueva unidad
FPdfAes.pas. Los cifradores de bloques AES-128 y AES-256 están implementados en Pascal puro, junto con auxiliares del modo CBC y un backend CSPRNG. Las pruebas de respuestas conocidas de FIPS-197 Appendix C.2 / C.3 verifican su corrección. Es la base criptográfica de la pila de 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 1 y 3 de NIST GCM (AES-128) coinciden exactamente con el texto cifrado y la etiqueta oficiales; el caso de prueba 13 (AES-256) realiza el ciclo completo 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 Level 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
Agregado (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);
TPdfXConformanceagregapxc6; el inyector y el validador lo conectan 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 de 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 tagged-structure, MarkInfo y saltos de palabra que Level A; la degradación en el lado de guardado de la versión v2.29.0 cubría
PdfAIsLevelE, pero tres compuertas deValidatePdfACompliancecomprobaban únicamentePdfAIsLevelA, por lo que un documento PDF/A-4e que carecía de estructura etiquetada pasaba de forma silenciosa - Desviación de prueba de
/BaseStatede OCG: el paso PostProcess de la versión 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; ahora las pruebas usan un valor verdaderamente no válido (/Undefined) y una nueva prueba positiva bloquea la aceptación de/OFF - Coincidencia excesiva de
/Subtype /GEOgeoespacial:ContainsDictionarySubtype('GEO')coincidía con cualquier diccionario que llevara el token, incluidos los no relacionados como un/ViewerPreferences << /Subtype /GEO >>disperso; el nuevoContainsMeasureDictionarySubtyperequiere además/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
Agregado (Added)
- Soporte para PDF/A-4 (ISO 19005-4:2020) en el validador, inyector XMP y capa de modelo de objetos de Pdfium;
TPdfAConformanceagregapac4base,pac4fypac4e; el nivel base es PDF 2.0 (ISO 32000-2) y reemplaza los niveles heredados A/B/U levels 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 son anteriores a la exportación sigan funcionando - Comprobación de 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 se permite únicamente en una cabecera%PDF-2.0; un cuerpo 1.x que lleve/Encryptahora se marca (anteriormente era una declaración sin efecto)pvriBadMediaBoxde PDF/R-1: cadaMediaBoxde página debe ser[0 0 w h];PdfRHasNonZeroMediaBoxOrigines un escáner ASCII independiente de la configuración regional que omite las MediaBoxes de referencia indirectapvaiRoleMapUnresolvedde PDF/A Level A (ISO 19005-1 §6.8.3.4): ahora se marca un RoleMap presente pero incompleto que deja los tipos de estructura/Spersonalizados sin mapear, cerrando la brecha de la comprobación existentepvaiRoleMapMissingque solo verificaba la presencia
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 en 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 se compilaba bajo Delphi 12 (E2015enInteger(-(V<0))), bloqueando todo el proyecto de prueba; se corrigió 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 omitido; ISO 32000-1 §12.5.6.35 lo prohíbe en PDF/A)
Version 2.28.0
Agregado (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 leer y se pueda escribir explícitamente
Cambiado (Changed)
DecodeDateahora analiza cadenas de fechas 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 una restricción fija deLength=23; el desfase de hora de la zona horaria ahora se valida contra el rango del mundo real 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 de FPDF_BYTESTRING de la biblioteca, en lugar de una simple conversión aAnsiStringque alteraba los nombres de familia 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 porFPDFText_GetCharOriginy devolvían un punto no inicializado 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
Agregado (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 de catálogo
/OCPropertiesmalformadas, incluso cuando faltan las entradas obligatorias/OCGso/D, contienen valores de configuración predeterminada no válidos o incluyen estados que no son arreglos
Version 2.21.11
Corregido (Fixed)
- Los guardados con una versión PDF explícita ahora rechazan entradas de Página
/Annots, directas o indirectas, cuando sus diccionarios de anotación omiten la entrada obligatoria/Subtypeo/Rect
Version 2.21.10
Corregido (Fixed)
- Los guardados explícitos de PDF 1.7 ahora exigen que los diccionarios geoespaciales
/Type /Measure /Subtype /GEOy las anotaciones Projection declaren/Extensions /ADBEcon/BaseVersion /1.7y/ExtensionLevel 3o superior
Version 2.21.9
Corregido (Fixed)
- Los guardados explícitos de PDF 1.7 ahora exigen que las anotaciones RichMedia y las acciones
RichMediaExecutedeclaren/Extensions /ADBEcon/BaseVersion /1.7y/ExtensionLevel 3o superior
Version 2.21.8
Corregido (Fixed)
- Los guardados explícitos de PDF 1.7 ahora exigen que los flujos 3D PRC declaren
/Extensions /ADBEcon/BaseVersion /1.7y/ExtensionLevel 1o superior, en vez de considerar PRC 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
/SMaskInDataen XObjects de imagen, incluso con el valor explícito0, porque los canales de máscara suave JPEG 2000 incrustados requieren PDF 1.5 o superior
Version 2.21.6
Corregido (Fixed)
- Los guardados explícitos de PDF 1.4 y anteriores ahora rechazan XObjects de imagen de 16 bits, que requieren PDF 1.5 o superior, mientras que los destinos PDF 1.5 a PDF 1.7 conservan sus datos de imagen
/BitsPerComponent 16
Version 2.21.5
Corregido (Fixed)
- Los guardados explícitos de PDF 1.4 y anteriores ahora rechazan los valores
/PageLayout /TwoPageLefty/TwoPageRightdel catálogo del documento, que requieren PDF 1.5 o superior, mientras que los destinos PDF 1.5 a PDF 1.7 conservan el diseño de dos páginas solicitado
Version 2.21.4
Corregido (Fixed)
- Los guardados explícitos de PDF 1.3 ahora rechazan entradas
/Langdel catálogo del documento, que requieren PDF 1.4 o superior, mientras que 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 PDF 1.3 ahora rechaza 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)
- Todos los ejemplos de visores de Delphi, C++Builder y Lazarus pueden abrir un PDF recibido como primer argumento de línea de comandos, y los ejemplos
MultiPageViewerde C++Builder y Lazarus ofrecen accesos directos explícitos para seleccionar todo y copiar
Corregido (Fixed)
- Los ejemplos de visores ahora rechazan destinos de página inválidos de marcadores y enlaces, conservan los errores de carga, validan de forma consistente el zoom ingresado manualmente, imprimen la página solicitada con sus campos llenados en lugar de repetir la visible y abortan los trabajos de impresión Delphi cancelados sin enviar una salida parcial
Version 2.20.0
Cambiado (Changed)
- Todos los ejemplos de visores de Delphi, C++Builder y Lazarus ahora ofrecen accesos directos consistentes para abrir, buscar, guardar, imprimir, hacer zoom y navegar por páginas; cada variante de
ViewerInteractionLabtambién admite saltos de página, zoom manual validado de 10–600%, registros de interacción persistentes y comprobaciones de conversión de ida y vuelta de las coordenadas de clic
Version 2.19.1
Corregido (Fixed)
- La validación explícita de versiones PDF ahora sigue la cadena activa de revisiones clásicas, híbridas o xref-stream, incluidas las entradas de objetos comprimidos, de modo que los objetos reemplazados, liberados o sin referencias ya no provocan falsos errores de versión de funciones
Version 2.19.0
Cambiado (Changed)
- Los ejemplos de adjuntos, extracción de imágenes, extracción de texto, conversión de páginas y división de C++Builder y Lazarus ahora usan carpetas de salida específicas o archivos finalizados de forma segura, nombres estables con ceros a la izquierda, actualizaciones de progreso que mantienen la respuesta y resúmenes de finalización con conteos de errores por elemento
Corregido (Fixed)
- El ejemplo
CJKTextLabde C++Builder ahora mide el texto mediante las funciones de edición exportadas de PDFium, yMergePDFevita una sobrecarga ambigua de mensajes VCL, recuperando compilaciones limpias de 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 de referencias cruzadas clásicas ahora generan un error claro cuando un desplazamiento de bytes supera el ancho 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-byte (ISO 32000-1 §7.5.4); la salida de flujos de referencias cruzadas usa campos binarios de 8-byte 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, lo que corrompía los arreglos de los campos de firma o rechazaba documentos válidos - 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
Agregado (Added)
ReadPdfVersionInfoinforma la versión del encabezado, la versión efectiva del núcleo, la sustitución del catálogo y el nivel de extensión de desarrollador Adobe desde un flujo PDF
Cambiado (Changed)
- El guardado explícito PDF 1.3-1.7 ahora valida las estructuras de catálogo, recursos de página, XFA, redacción y extensiones de desarrollador en el contexto del objeto que las contiene; 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 por ruta ahora escribe en un archivo temporal junto al destino y solo lo reemplaza después de que terminen correctamente todas las comprobaciones de compresión, normalización y versión
Corregido (Fixed)
- La salida PDF 1.3 ahora incluye el recurso completo
/ProcSetrequerido y elimina las claves de transparencia PDF 1.4 cuando solo repiten los valores iniciales del estado gráfico PDF 1.3 - Los archivos con referencias híbridas, flujos xref o flujos de objetos ya no se reescriben con el compresor xref clásico, evitando perder las entradas de objetos comprimidos
- Los nombres que se parecen a claves de transparencia o funciones del catálogo dentro de cadenas, comentarios o mapas de recursos no relacionados ya no producen falsos errores de versión de destino
Version 2.17.0
Agregado (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 delimitaban mediante una búsqueda de patrón, que truncaba cuerpos que contenían legítimamente la secuencia de bytesendstream— típico de los adjuntos PDF incrustados
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 están acotados 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 escaneo de palabras clave de flujo incorpora ahora la misma protección de colaendstreamempleada en otros lugares y avanza 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 comprueba que los campos de fecha sean numéricos y completa el campo de minutos si falta, evitando fechas ISO 8601 mal formadas en el XMP generado; en plataformas distintas de Windows, el sello de tiempo de fallback ahora incluye la hora en lugar de solo la fecha
Version 2.16.0
Agregado (Added)
- La decodificación de flujos ahora reconstruye 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 común de escritores PDF 1.5+ — antes exponían bytes diferenciales, por lo que sus objetos quedaban invisibles para las comprobaciones de conformidad y la inyección de marcadores
Corregido (Fixed)
- La detección de FlateDecode ahora analiza el valor
/Filtercomo nombre o arreglo en lugar de buscar una subcadena, evitando descompresiones incorrectas ante cadenas de filtros en cascada o apariciones del término en valores no relacionados; las cadenas no admitidas siguen usando los bytes sin procesar como alternativa
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 los generadores 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 también incorpora ahora el arreglo/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 preserva el número de generación de la referencia; anteriormente nunca coincidía en archivos PDF 1.5+ conformes, descartando silenciosamente/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 que/Length(típico de los flujos FontFile) se truncaba a un recuento de bytes incorrecto, cegando silenciosamente los escaneos 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 malformados
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,SignPadesByteseInjectPadesDssMarkersahora generanEPadesCryptosi el documento de origen está cifrado, en lugar de emitir silenciosamente un archivo corrupto o imposible de verificar; quite el cifrado antes de firmar o incrustar material DSS
Version 2.14.1
Corregido (Fixed)
TPdf.SignPadesySignPadesBytesahora completan los cuatro campos/ByteRangedel diccionario de firma; antes los últimos tres conservaban sus valores de relleno en cero, por lo que las firmas declaraban un rango de bytes vacío y fallaban en validadores conformes- Los diccionarios de sello de tiempo de documento PAdES B-LTA reciben la misma corrección de relleno hacia atrás de
/ByteRange ValidatePadesComplianceahora acepta la disposición estándar de firmas donde el hueco del rango de bytes contiene el valor hexadecimal/Contents, y comprueba que el segundo segmento termine exactamente al final del archivo; antes solo los rangos sin huecos pasaban la comprobación de cobertura
Version 2.14.0
Agregado (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 del formulario y<annots>para todos los subtipos de anotación compatiblesTPdf.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ígonos/polilíneas y gestos de listas de tinta, de modo que los recorridos 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)
ValidatePdfAahora informa las imágenes inline PDF/A-1 que usan filtros/LZWDecodeo su abreviatura/LZWdentro de flujos de contenido mediantepvaiInlineImageLzwForbidden, igualando la cobertura existente de imágenes inline PDF/A-2 y PDF/A-3- El scanner de filtros de imágenes inline ahora avanza más allá de los nombres de recursos iniciales, como
/GS1, evitando bloqueos al explorar flujos de contenido PDF/A-1 más amplios
Version 2.13.2
Agregado (Added)
TPdf.SetFocusedFormFieldTextescribe texto en el búfer de edición del campo de formulario enfocado medianteFORM_ReplaceSelection, de forma simétrica aFocusedFormFieldText. En los campos AcroForm de texto/combo el valor se confirma en/Val perder el foco y persiste; en los campos de texto XFA la escritura queda solo en el búfer en memoria- La plataforma host de JavaScript se conecta ahora siempre que el motor V8 esté disponible, independientemente de que el documento sea XFA — de modo que el JavaScript de AcroForm incrustado (scripts a nivel de documento, cálculos de campos,
app.alert) también puede ejecutarse. 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 la decisión XFA en
InitializeFormFill— la tablam_pJsPlatformse construye siempre queV8FeaturesAvailablesea verdadero, aplicándose después del cableado de versión/callbacks de XFA en lugar de estar anidada dentro de él
Version 2.13.1
Agregado (Added)
- Nuevos eventos del host exponen información que los callbacks de formularios de v2.13.0 antes absorbían:
OnXfaUriAction,OnXfaPageCountChanged,OnXfaFocusChange,OnXfaEmail,OnXfaHttpRequest,OnXfaOpenFile,OnJavaScriptBeep,OnJavaScriptPrint,OnJavaScriptMail,OnJavaScriptSubmitForm. Si no están asignados, todos conservan el comportamiento previo sin acción, por lo que los hosts existentes no cambian - La propiedad de solo lectura
TPdf.XfaFormPacketsdevuelve una instantánea de todos los paquetes XFA (TXfaPacketList), materializando los tiposTXfaPacket/TXfaPacketListdeclarados anteriormente pero sin uso - Los códigos de error PDFium específicos de XFA
FPDF_ERR_XFALOAD/FPDF_ERR_XFALAYOUTahora tienen bindings y se exponen medianteLastPdfError, reemplazando el mensaje genérico "Unknown error" para errores de carga o composición XFA
Cambiado (Changed)
FFI_DoURIActionWithKeyboardModifierconsulta ahoraOnXfaUriActionantes de ejecutar mediante el shell un URI proveniente de un campo XFA, lo que otorga al host derecho de veto (seguridad: anteriormente un campo XFA malicioso podía lanzar URL arbitrarias de forma incondicional). Los controladores sin asignar conservan el comportamiento predeterminado previo deShellExecuteWDecodeFormFieldTypeenruta ahora los tipos de campo XFA medianteIsXfaFormFielden lugar de una sentencia case explícita de 8 ramas, manteniendo el enum alineado conFPDF_FORMFIELD_XFA_*por desplazamiento ordinal
Corregido (Fixed)
ValidatePdfAahora informa las declaraciones PDF/A-1 que usan flujos de referencias cruzadas PDF 1.5 o flujos de objetos con el nuevo problemapvaiPdfA1Pdf15Structure, y sigue permitiendo flujos de objetos en PDF/A-2 y PDF/A-3
Version 2.13.0
Agregado (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 conecta unIPDF_JsPlatformpara que unpdfium.dllcon XFA habilitado pueda renderizar y ejecutar scripts de 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 anteriormente solo se referenciaban en comentarios - Lector de paquetes XFA estático en
TPdf:GetXfaPacketCount/GetXfaPacketName/GetXfaPacketContent/GetXfaPacketByNamemásGetXfaTemplate/GetXfaDatasets/GetXfaConfigextraen los paquetes XFAtemplate,datasetsyconfigcomo XML sin procesar sin necesidad de un entorno de ejecución con XFA habilitado — útil para auditorías de conformidad y migración de datos - Sondas de capacidad:
XfaFeaturesAvailableglobal, y por documentoTPdf.XfaRuntimeAvailable(siFPDF_LoadXFArealmente tuvo éxito) yTPdf.XfaStaticReadable(si las exportaciones del lector de paquetes se resuelven) TPdfFormFieldTypese amplió confiXfa,fiXfaCheckBox,fiXfaComboBox,fiXfaImageField,fiXfaListBox,fiXfaPushButton,fiXfaSignature,fiXfaTextField, 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 demuestra detección XFA, extracción de paquetes, consulta de capacidades y el fallback cuando no hay runtime
Cambiado (Changed)
TPdf.LoadDocumentahora preanaliza la entrada en busca de marcadores XFA (/XFAen el diccionario AcroForm, o/NeedsRenderingdel catálogo) y, cuando 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 una repaginación dinámica, en lugar de solo el árbol de páginas PDF estático- Cuando se abre un documento XFA sin un runtime disponible,
InitializeFormFillahora fijaversion=1yxfa_disabled=1en lugar de solicitar la versión 2 con callbacks sin asignar, lo que antes podía provocar la desreferencia de un puntero inválido de callback
Version 2.12.2
Corregido (Fixed)
ValidatePdfAComplianceinforma ahora de los espacios de nombres XMP personalizados sinpdfaExtension:schemasmientras sigue aceptando metadatospdfaidestándar sin declaraciones de extensión- La validación de archivos incrustados PDF/A-3 requiere ahora tanto
/Fcomo/UFen los diccionarios filespec e ignora las claves de flujo/EFanidadas al comprobar esos nombres
Version 2.12.1
Corregido (Fixed)
ValidatePdfAComplianceahora decodifica los tokens de nombres PDF escapados antes de comparar JavaScript, LZWDecode, Type1 y otros nombres prohibidos, para informar correctamente los 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,/LZWabreviado o/Crypt, incluidas las formas en arreglo y con nombre escapado - La validación de PDF/A informa ahora de los flujos de metadatos con filtros de flujo prohibidos, los perfiles ICC de OutputIntent cuyo recuento de componentes
/Nfalta o es inconsistente, y los filespec de archivos incrustados PDF/A-3 con/AFRelationshipausente o inválida
Version 2.12.0
Agregado (Added)
- Las solicitudes HTTP TSA ahora fijan timeouts explícitos de 30 s para cada fase (resolución/conexión/envío/recepción) mediante
WinHttpSetTimeouts, evitando que una autoridad de sellado de tiempo lenta o inaccesible bloquee indefinidamente el hilo de firma por depender de los valores implícitos de WinHttp - Derivación de nonce por petición para las peticiones 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 reemplaza el anterior valor fijo de reserva$100000000, de modo que dos peticiones emitidas en el mismo milisegundo ya no reutilizan el mismo nonce anti-replay PdfInflateahora limita la salida descomprimida a 256 MiB para impedir que un flujo zlib agote la memoria ante una entrada hostil o corrupta (una “zlib bomb”); el límite es amplio 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 a través de unTBitmapde 32 bpp fuera de pantalla yScanLineen una sola pasada, eliminando miles de cruces del kernel GDI por pintado y haciendo que las selecciones grandes sean fluidas FPdfAsn1.TDerReader.ReadIntegerrechaza ahora los campos INTEGER de más de 8 bytes (y los negativos de 8 bytes cuyo bit de signo requeriríashl >= 64), devolviendo 0 en lugar de calcular un valor incorrecto mediante desplazamientos con comportamiento indefinido en entrada ASN.1 de CMS/PAdESParseTimeStampRespya no devuelve el nonce de la solicitud comoTPadesTimestamp.Nonce; hasta incorporar el recorrido TSTInfo que verifica el nonce recibido, el campo permanece en 0 para indicar “not verified”, evitando 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 el valor correctoPoints × PixelsPerInch / 72PdfMaxObjNumcontaba de menos en documentos que usan flujos de objetos (PDF 1.5+ ObjStm): los objetos comprimidos dentro de un/ObjStmno llevan marcadorN 0 obj, por lo que el escaneo de bytes sin procesar los omitía, y los inyectores que asignanMaxObj+1para objetos nuevos colisionaban con miembros ocultos de ObjStm y corrompían silenciosamente el archivo. El escaneo ahora expande primero los flujos de objetos para que cada número de objeto sea visibleInjectPdfAMarkersya no falsifica 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 anteriormente copiaba el origen con los marcadores aunque la validación inmediatamente posterior lo rechazaría. CuandoHasEncryptestá establecido, el origen ahora se pasa sin cambios. La ruta normal deTPdf.SaveAsPdfAya elimina el cifrado (saRemoveSecurity) antes de la inyección, por lo que esto solo afecta a los llamadores directosPdfReadStreamBytesahora rechaza un/Lengthmayor que el archivo completo antes de asignar el búfer de resultado, cerrando una vía de asignación prematura ante una longitud indirecta corrupta u hostil
Version 2.11.0
Agregado (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 form-fill de Pascal, pero el tipo ahora es estructuralmente correcto para cualquier futura ruta de envío/carga XFA - La carga y descarga de la biblioteca PDFium (
LoadLibrary/UnloadLibrary) se serializan ahora mediante una sección crítica global del proceso, de modo que dos hilos worker deTPdfFuture<T>(o un worker compitiendo con el hilo principal) no puedan ambos observarPDFiumLibrary=0y enlazar dos veces, ni liberar la DLL mientras otro hilo está en mitad de un enlace - La sección
initialization/finalizationllama ahora aUnloadLibraryal descargar la unidad, garantizando queFPDF_DestroyLibraryse ejecute (join de hilos worker, disposición del isolate de V8, desmontaje de fuentes/caché) en lugar de confiar en que el sistema operativo reclame la DLL
Cambiado (Changed)
TPdf.SetActivesilencia ahora cualquier excepción durante la carga (anteriormente soloEPdfError), de modo que un error de flujo o una violación de acceso durante la configuración de formulario/página dejeActive=Falseen lugar de un componente parcialmente cargado con estado indeterminado- Codificación de caracteres consistente para los argumentos de clave de metadatos de PDFium:
TPdf.GetMetaTextutiliza ahora la misma divisiónAnsiStringde FPC /UTF8Encodede Delphi queGetViewerPreferencey las rutas de carga, en lugar de una conversión directaAnsiString(Tag) - Se deduplicaron los helpers
BytesToAnsi,AnsiToBytes,WriteBytesyWriteStr:FPdfCompressahora los importa desdeFPdfPdfCommon(sus aliasWriteBytesToStream/WriteAnsiToStreamse retiraron) y la sobrecarga redundante deBytesToAnsicon tres argumentos enFPdfPdfase eliminó.FPdfAsn1conserva su copia local a propósito para mantener la capa criptográfica libre de la unidad de la capa de conformidad
Corregido (Fixed)
- Fuga de recursos en
TPdf.LoadDocument(archivo, memoria,TBytes,TMemoryStream, flujo personalizado) yTPdf.CreateDocument: siInitializeFormFilloReloadPagefallaban después de queFPDF_LoadDocument/FPDF_CreateNewDocumenttuvieran éxito, el handle nativoFPDF_DOCUMENTquedaba filtrado porqueFActiveseguía siendo False en ese punto. Cada ruta ahora envuelve 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 la DLL de PDFium más claros:
CheckLoadLibrarydetectaERROR_BAD_EXE_FORMAT(193) e informa de un desfase de arquitectura de 32/64 bits señalando la compilaciónDLLs/Win32oDLLs/Win64correspondiente, en lugar de retransmitir solo el error genérico del sistema operativo.CheckGetProcAddressahora indica que elpdfium.dlldesplegado es más antiguo que el binding cuando falta una exportación requerida, en lugar del texto genérico del sistema operativo 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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (Added)
AccessibilityWorkbenchClirelaciona cada problema detectado con sus criterios de éxito WCAG 2.1 y el área de cláusulas de ISO 14289-1 (PDF/UA-1), y muestra una sección de cobertura de estándares 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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (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
Agregado (Added)
- Se enlazó la API de PDFium
FPDFPageObj_AddExistingMark(), 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 de PDFium
FPDFTextObj_SetFontSize()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 archivo 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 archivo 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 archivos 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 archivo 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 de varios archivos de PDF a JPG a C++Builder junto con las muestras Delphi y Lazarus existentes - La muestra demuestra
LoadCustomDocument,IPdfCancellationTokenSource, entradaTFileStreamen streaming, progreso por archivo 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 agregó soporte de inyección de marcadores PDF/VT (ISO 16612-2:2010): TPdf.SaveAsPdfVT convierte el documento actual en un archivo conforme con PDF/VT-1 o PDF/VT-2, el subconjunto PDF para impresión variable y transaccional. PDF/VT se basa en PDF/X-4 — ISO 16612-2 §6.2.1 exige que todo PDF/VT-1 también cumpla PDF/X-4 — por eso el inyector escribe todos los marcadores PDF/X-4 (XMP
pdfxid:GTS_PDFXVersion = "PDF/X-4", Info/GTS_PDFXVersion (PDF/X-4)y/Trapped, y catálogo/OutputIntentsque referencia un diccionario OutputIntent con perfil ICC incrustado) junto con las propiedades específicas PDF/VT - La inyección específica PDF/VT incluye 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 namespaces pdfxid y pdfvtid (URI NPEShttp://www.npes.org/pdfx/ns/id/yhttp://www.npes.org/pdfvt/ns/id/). El trailer lleva un arreglo/ID - Se agregó TPdf.SaveAsPdfVTToStream para salida PDF/VT en memoria y el atajo de opciones predeterminadas
TPdf.SaveAsPdfVT(FileName), que produce PDF/VT-1 con el OutputIntent sRGB IEC61966-2.1 incluido (3144 bytes, el mismo perfil que SaveAsPdfA / SaveAsPdfX) y/Trapped /False - Se agregó TPdf.ValidatePdfVT: comprueba los marcadores de conformidad PDF/VT de un PDF abierto (presencia de XMP
pdfvtid:GTS_PDFVTVersionyGTS_PDFVTModDate, igualdad depdfvtid:GTS_PDFVTModDateyxmp:ModifyDate, presencia del identificador basepdfxid:GTS_PDFXVersion, presencia de/DPartRooten el catálogo según §6.5,/OutputIntentscon/DestOutputProfile, trailer /ID, estado de cifrado y presencia dexmp:CreateDate/ModifyDate) y devuelve TPdfVTValidationResult con el nivel de conformidad detectado y el conjunto de problemas encontrados - Se agregó la propiedad TPdf.PdfVTConformance: devuelve el nivel de conformidad del documento abierto (pvc1, pvc2, pvcNone o pvcUnknown) sin llamar explícitamente a ValidatePdfVT
- Nuevos tipos exportados en la nueva unidad FPdfPdfvt: TPdfVTConformance (pvcUnknown/None/1/2), TPdfVTTrappedState (ptvUnspecified/True/False/Unknown), TPdfVTValidationResult, TPdfVTValidationIssue y TPdfVTSaveOptions
- La jerarquía Document Part (árbol
DPartRoot/DPartsegún §6.5) es una estructura de aplicación que depende del mapeo de destinatarios y rangos de páginas del flujo de impresión variable. SaveAsPdfVT NO sintetiza un árbol DPart — ValidatePdfVT informa la ausencia de/DPartRootcomopvviMissingDPartRootpara que quien llama pase los archivos PDF/VT por una etapa independiente de construcción de DPart. Los requisitos de contenido PDF/X-4 (fuentes incrustadas, transparencia, color administrado por ICC, prohibiciones de OPI / JavaScript / Reference XObject, etc.) siguen a cargo del autor del documento y de la canalización de renderizado PDFium - Se actualizó la cadena TPdf.AboutInfo para informar la versión actual del producto
Version 1.34.0
- Se agregó soporte de inyección de marcadores PDF/R-1 (ISO 23504-1:2020): TPdf.SaveAsPdfR convierte el documento actual en un archivo conforme con PDF/R-1, el subconjunto PDF de transporte de imágenes ráster para documentos escaneados. La inyección cubre requisitos de formato aplicables por posprocesamiento — el comentario único de versión
%PDF-raster-1.0entre el diccionario trailer 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 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 arreglo /ID del trailer - Se agregó TPdf.SaveAsPdfRToStream para salida PDF/R en memoria y el atajo de opciones predeterminadas
TPdf.SaveAsPdfR(FileName)para el caso común - Se agregó TPdf.ValidatePdfR: comprueba los marcadores de conformidad PDF/R-1 de un PDF abierto (comentario de pie
%PDF-raster-x.y, versión del encabezado, ausencia de /Type /ObjStm, cumplimiento de las listas permitidas del catálogo y diccionario Info, presencia de metadatos XMP y trailer /ID) y devuelve TPdfRValidationResult con el nivel detectado y los problemas encontrados - Se agregó la propiedad TPdf.PdfRConformance: devuelve el nivel de conformidad del documento abierto (prc1, prcNone o prcUnknown) sin 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 para producir por defecto un catálogo y un diccionario Info conformes con §6.3 / §6.4.3; se pueden poner en False para conservar entradas del origen (la salida ya no cumplirá esas cláusulas PDF/R, aunque los demás marcadores seguirán presentes) - Los requisitos de contenido siguen a cargo del PDF de origen: estructura Contents por página (§6.5.1), MediaBox con forma
[0 0 w h](§6.5.3), restricciones de filtros (§6.2.2 — solo FlateDecode, CCITTFaxDecode bitonal, DCTDecode 8-bit gris/RGB), ausencia de flujos de objetos (§6.2.4) y disposición de tiras según §6.6. No se pueden imponer por posprocesamiento — PDF/R es un subconjunto estructuralmente mucho más estricto que otros estándares PDF/x y requiere generar bien los bytes de origen. ValidatePdfR expone los problemas de formato que detecta esta unidad; úselo junto con un validador PDF/R de TWAIN Working Group para comprobar todo el 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 agregó soporte de inyección de marcadores PDF/E-1 (ISO 24517-1:2008): TPdf.SaveAsPdfE convierte el documento actual en un archivo conforme con PDF/E-1 mediante una actualización incremental del PDF base. La inyección cubre requisitos de formato aplicables por 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)de §5, los bloques de enlace Info-XMP heredados de ISO 19005-1 §6.7 mediante §13.1 (dc:title / dc:creator / dc:description / pdf:Producer / pdf:Keywords / xmp:CreateDate / xmp:ModifyDate / xmp:MetadataDate / xmp:CreatorTool) y un arreglo/IDen el trailer requerido por §6.2 - Se agregó TPdf.SaveAsPdfEToStream para salida PDF/E en memoria y el atajo de opciones predeterminadas
TPdf.SaveAsPdfE(FileName)para el caso común - Se agregó TPdf.ValidatePdfE: comprueba los marcadores de conformidad PDF/E-1 de un PDF abierto (presencia de XMP pdfe:ISO_PDFEVersion e igualdad con el valor del diccionario Info, descripción del esquema de extensión pdfe, entrada /ISO_PDFEVersion del diccionario Info, trailer /ID y presencia de xmp:CreateDate / xmp:ModifyDate) y devuelve un resultado estructurado con el nivel detectado y los problemas encontrados
- Se agregó 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 y TPdfESaveOptions
- La reescritura del diccionario Info es la primera en la vía de posprocesamiento PDF/x de PDFium Delphi Component — reescribe el objeto Info existente con el mismo número (manteniendo válidos la subsección xref y la referencia /Info del trailer) y crea un diccionario Info nuevo cuando el trailer de origen no tiene /Info. PDFium emite un diccionario Info en toda salida SaveAs, por lo que la reescritura es el caso común
- Los requisitos de contenido (fuentes incrustadas, CMaps ToUnicode, XObjects / claves ExtGState / formularios XFA prohibidos, etc.) siguen a cargo del autor — SaveAsPdfE agrega los marcadores de formato, pero no altera el contenido de las páginas ni elimina las funciones prohibidas
- Se actualizó la cadena TPdf.AboutInfo para informar 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 archivo 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 archivo 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 archivos 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 archivos 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 igualar 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 amplió sustancialmente la documentación integrada en toda la referencia de API: cada entrada de propiedad, método, evento y función global incluye una Description de 3 párrafos, una lista de Remarks, un Example Delphi multilínea y un bloque See Also más completo — cubriendo 200+ páginas antes escasas, 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 ajustó la disposición de la ayuda a la base visual losLab: se igualaron los tamaños de h1/h2, se consolidaron los estilos de la cuadrícula de navegación de API en el StyleSheet compartido y se eliminaron las sobrescrituras CSS inline de cada página en 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 archivo 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 archivos con progreso global por archivo, 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 archivos 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, archivos 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 archivos 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 archivo + actual por página. La demo usa una instancia de TPdf por archivo (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 archivo 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 archivo 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