Cobertura de validación automatizada
La actualización del informe de comprobación previa de la versión 3.56.37 agrega una ruta de automatización documentada sobre las comprobaciones de archivos PDF/A y PDF/UA-1 existentes. La demostración PreflightReport de Delphi ahora abarca informes de archivos individuales, lotes de directorios, salida en texto/JSON/HTML/CSV, archivos CSV de resumen en UTF-8 y comparación de líneas base en texto sin formato mediante ComparePreflightReports. Tests.Preflight verifica las secciones de los informes, el JSON legible por máquina, el HTML independiente, las filas CSV, la salida guardada en UTF-8, las líneas de diferencias y la normalización de marcas de tiempo
La serie de auditorías PDF/UA de las versiones 3.56.0 a 3.56.25 amplía los diagnósticos del lector y del escritor relacionados con metadatos PDF/UA-1, MarkInfo, RoleMap, permisos de accesibilidad de cifrado, XFA, Reference XObjects, orden de tabulación y descripciones de anotaciones, nombres FileSpec, diccionarios de configuración OCG, incrustación de fuentes y codificación TrueType, orden de encabezados, numeración de listas, identificadores de Note, clips multimedia e hijos H directos repetidos. La ruta de lector de bajo nivel se expone mediante CheckFileCompliance; la ruta en memoria del lado del escritor se expone mediante GetPDFUADiagnostics
El trabajo de validación PAdES de la serie 3.56.x agrega pruebas y cobertura de referencia para la selección de resumen, los atributos autenticados PAdES-B-B, IssuerSerial de signing-certificate-v2, la incorporación de marcas de tiempo de firma, el ensamblado DSS/VRI, la indicación del tipo de compromiso y los atributos de política de firma. Estas comprobaciones están cubiertas por las pruebas de firma y por las páginas de referencia dedicadas a PAdES en Seguridad y firmas
La actualización de validación de la versión 3.23.0 hace estricto el control de cumplimiento de versión PDF para PDF 1.2 y agrega comprobaciones del nivel de extensión de Adobe para PDF 1.7. Los destinos de guardado PDF 1.2 ahora rechazan características de PDF 1.3 o posteriores, como los datos TrimBox de página, antes de escribir la salida. AESV3, AES-256, RichMedia, Projection, los diccionarios geoespaciales y los subfiltros de firma ETSI se comprueban con respecto a la declaración /Extensions /ADBE /ExtensionLevel requerida. Los puntos de entrada del escritor que emiten esas características de nivel de extensión ahora declaran automáticamente el nivel de extensión ADBE correspondiente, y los guardados anexados ejecutan la misma comprobación previa que los guardados completos. Tests.Document, Tests.Version y el fixture Tests.VersionCompliance de C++Builder cubren el rechazo estricto de PDF 1.2, la salida ExtensionLevel de AES-256, la comprobación previa del guardado anexado y las reglas SSOT de nivel de extensión
La actualización de validación de la versión 3.20.0 amplía la cobertura de EnsureMinVersion del lado del escritor a ocho puntos de entrada adicionales de PDFlib: SetDocumentMetadata (PDF 1.4 — flujo XMP /Metadata), SetPDFAMode (PDF 1.4 — /MarkInfo y /OutputIntents), PageJavaScriptAction (PDF 1.5 — /AA de Page), DocJavaScriptAction (PDF 1.4 — /AA de Catalog), SetTabOrderMode (PDF 1.5 — /Tabs de Page), NewOptionalContentGroup (PDF 1.5 — /Type /OCG), SetNeedAppearances (PDF 1.5 — /NeedAppearances de AcroForm) y NewFormField para campos de firma (PDF 1.5 — bit AppendOnly de /SigFlags de AcroForm). Junto con las entradas de v3.15.0 y v3.17.0, PDFlib ahora incrementa automáticamente FVersion en veintiún puntos de entrada del escritor. Antes, NewOptionalContentGroup incrementaba FVersion directamente y omitía EnsureMinVersion y LockSaveVersion; ahora pasa por la ruta correcta para que se respete el bloqueo y el incremento aparezca en AutoBumpedFeatures. Tests.Document cubre seis casos nuevos de incremento automático (SetDocumentMetadata 1.3 → 1.4, SetTabOrderMode 1.3 → 1.5, SetPDFAMode 1.3 → 1.4, NewOptionalContentGroup 1.3 → 1.5, SetNeedAppearances 1.3 → 1.5 y firma NewFormField 1.3 → 1.5)
La actualización de validación de la versión 3.19.0 implementa cuatro reglas SSOT que se habían pospuesto. La marca NoToggleToOff del bit 15 de /Ff para campos Btn (máscara 16384) restringe el comportamiento exclusivo de botones de opción a PDF 1.4 y discrimina según /FT = 'Btn'. La regla /Subtype /NChannel de DeviceN reconoce el refinamiento de espacio de color NChannel de PDF 1.6 codificado en el diccionario de atributos del índice 4 del arreglo DeviceN. La regla /Subtype /OpenType de FontFile3 reconoce programas de fuentes OpenType de PDF 1.6 cuando se llega al flujo mediante una clave principal llamada 'FontFile3'. La regla ETSI de Sig /SubFilter se activa en diccionarios de firma con /SubFilter ETSI.CAdES.detached o /SubFilter ETSI.RFC3161, ambos de PDF 1.7. Este es el primer conjunto de devoluciones de llamada SSOT que depende del conocimiento contextual de Ctx.KeyName. Tests.Version confirma que las cuatro reglas estén presentes con el MinVersion correcto. El número de reglas aumentó de 99 a 103
La actualización de validación de la versión 3.18.6 agrega reglas contextuales para /AA (acciones adicionales). /AA aparece en cuatro contenedores de diccionario PDF con versiones mínimas diferentes: /AA de Catalog (activadores a nivel de documento, PDF 1.4), /AA de Annot (activadores de anotación, PDF 1.4), /AA de Page (activadores de página, PDF 1.5) y /AA de campo de formulario (PDF 1.2, válido con destinos PDF 1.2 estrictos). Tres devoluciones de llamada fmkCustom nuevas discriminan por /Type, por lo que /AA solo activa la regla que coincide con su contenedor. /AA de anotación Widget (un campo de formulario que también es una anotación /Subtype /Widget) activa intencionalmente la rama /AA de Annot en PDF 1.4; esta aproximación se acepta porque todos los contratos de guardado a partir de PDF 1.4 ya admiten /AA de campos de formulario. Tests.Version confirma que las tres reglas contextuales de /AA estén presentes. El número de reglas aumentó de 96 a 99
La actualización de validación de la versión 3.18.5 corrige una clasificación errónea de una regla /Tabs y agrega una regla /NeedAppearances. /Tabs (orden de tabulación de página) figuraba antes como PDF 1.4 en PDFFeatureRules, pero la especificación de cambios de Adobe PDF 1.4 (Nota técnica n.º 5409) no introduce /Tabs; la entrada aparece por primera vez en la Tabla 8.10 de PDF 1.5 (Objeto de página). La regla ahora se encuentra en la sección PDF 1.5. Una regla nueva cubre /NeedAppearances de AcroForm (Tabla 218 de PDF 1.5), que no tenía representación en la tabla antes de esta actualización. Tests.Version confirma que /Tabs no tenga una entrada de PDF 1.4 y que la regla /NeedAppearances de PDF 1.5 esté presente. El número de reglas aumentó de 95 a 96
La actualización de validación de la versión 3.18.1 amplía el conjunto de reglas a nivel de bits con siete devoluciones de llamada para marcas /Ff de campos de formulario y el bit AppendOnly de /SigFlags de AcroForm. Tx FileSelect (1048576), Ch MultiSelect (2097152), Tx/Ch DoNotSpellCheck (4194304) y Tx DoNotScroll (8388608) requieren PDF 1.4; Tx Comb (16777216), Tx RichText / Btn RadiosInUnison (33554432), Ch CommitOnSelChange (67108864) y AcroForm SigFlags AppendOnly (máscara 2) requieren PDF 1.5. No se sigue la herencia de /Parent: solo activan las reglas los diccionarios que contienen explícitamente /Ff o /SigFlags. Tests.Document cubre un fixture Tx /Ff 16777220 (Comb + NoExport) que incrementa el cargador de 1.4 a 1.5 e incluye Comb en ContributorFeatures
La actualización de validación de la versión 3.18.0 comienza a agregar reglas de subclaves y de nivel de bits a PDFFeatureRules. Tres reglas de marcas de anotación a nivel de bits cubren los valores de máscara /F para Locked (128, PDF 1.4), ToggleNoView (256, PDF 1.5) y LockedContents (512, PDF 1.7); solo se activan cuando el diccionario es /Type /Annot. Seis reglas fmkDictKey nuevas cubren subclaves distintivas de catálogo y página: /BoxColorInfo (PDF 1.4), /Permissions, /Legal y /PresSteps (PDF 1.5), /VP (PDF 1.6) y /Collection (PDF 1.7). Tests.Document cubre un fixture Annot /F 516 (Print + LockedContents) que incrementa el cargador de 1.4 a 1.7 e incluye LockedContents en ContributorFeatures. Tests.Version confirma que las reglas nuevas estén en la tabla
La actualización de validación de la versión 3.17.0 amplía la cobertura de EnsureMinVersion del lado del escritor a ocho puntos de entrada adicionales de PDFlib: AddLinkToJavaScript, SetOpenActionJavaScript, AddGlobalJavaScript y FormFieldJavaScriptAction (todos PDF 1.3); AddEmbeddedFile y AddFileAttachment (PDF 1.3); SetXFAFromString (PDF 1.5); AddSWFAnnotationFromFile (PDF 1.7). Junto con las entradas originales de v3.15.0 (SetTransparency, SetPageUserUnit, Encrypt, SetPageLayout), PDFlib ahora incrementa automáticamente FVersion en trece puntos de entrada de escritor de versiones superiores. Tests.Document cubre el trío de JavaScript (AddGlobalJavaScript, SetOpenActionJavaScript, AddLinkToJavaScript), que incrementa automáticamente un documento nuevo de PDF 1.2 a PDF 1.3
La actualización de validación de la versión 3.16.3 agrega un bloqueo de versión opcional. La nueva API LockSaveVersion(Version) de PDFlib fija FVersion en Version e impide que EnsureMinVersion del lado del escritor en la fase 3 la aumente; UnlockSaveVersion elimina el bloqueo. El control al guardar no cambia, por lo que un documento bloqueado que recibe una característica de una versión superior mediante una llamada del escritor sigue sin poder guardarse y devuelve LastErrorCode 602. Tests.Document cubre (a) bloqueo en 1.3 + SetTransparency: FVersion permanece en 1.3, AutoBumpedFeatures permanece vacío y SaveToFile falla con LastErrorCode 602; (b) bloqueo en 1.6 + SetTransparency / SetPageUserUnit: ambas llamadas se completan sin aumentar más FVersion; (c) bloqueo + SetTransparency (rechazado) + Unlock + SetTransparency (permitido): FVersion aumenta a 1.4 y AutoBumpedFeatures registra "transparency"
La actualización de validación de la versión 3.16.2 agrega una vista exclusiva de contribuyentes para la detección de características durante la carga. CollectMatchesForObject y DetectFeaturesInObjectTree ahora reciben un parámetro BaselineVersion para que los autores de llamadas puedan separar las características coincidentes en "todas las coincidencias" (DetectedFeatures, GetInformation 101) y "coincidencias cuyo MinVersion está estrictamente por encima de la línea base" (ContributorFeatures, GetInformation 103). TPDFDocument.DetectVersionFromContent usa el HeaderVersion del archivo como línea base, por lo que ContributorFeatures responde "¿por qué la versión efectiva es superior al encabezado literal del archivo?". Tests.Document cubre un fixture que incluye /CA en DetectedFeatures pero produce ContributorFeatures vacío (ninguna regla superó el encabezado 1.4) y un fixture combinado donde solo /UserUnit (1.6) aparece en ContributorFeatures, mientras /TrimBox (1.3) y /StructTreeRoot (1.4) se excluyen
La actualización de validación 3.13.0 mueve la compuerta de compatibilidad de versión PDF que rechaza funciones de versión posterior al guardado a un módulo dedicado, de modo que el conjunto de reglas pueda crecer sin afectar el núcleo del documento. No hay cambio visible de comportamiento para el usuario con respecto a 3.12.7
La actualización de validación de la versión 3.16.0 completa el plan de cumplimiento de versiones PDF con detección del lado del cargador. Después de LoadFromString / LoadFromFile / LoadFromStream, TPDFDocument.DetectVersionFromContent recorre cada objeto indirecto mediante el SSOT e incrementa FVersion por encima del valor literal del encabezado %PDF-X.Y cuando el contenido requiere una versión superior. Tres claves nuevas de GetInformation (100 = HeaderVersion, 101 = DetectedFeatures, 102 = AutoBumpedFeatures) exponen los diagnósticos del cargador y del escritor. Tests.Document cubre un PageUserUnitFixture sintético (encabezado 1.4, /UserUnit 2.0 de página) que el cargador incrementa a 1.6 mientras conserva HeaderVersion 1.4, además de un caso de documento nuevo que confirma que las claves de diagnóstico GetInformation estén vacías antes de cualquier carga
La actualización de validación de la versión 3.15.0 conecta los puntos de entrada del escritor de PDFlib (SetTransparency, SetPageUserUnit, Encrypt con niveles AES y los modos de dos páginas de SetPageLayout) mediante TPDFDocument.EnsureMinVersion, de modo que llamar a una característica de versión superior con un destino de guardado bajo en SetInformation ahora incrementa automáticamente la versión del documento en lugar de producir LastErrorCode 602 al guardar. Tests.Document cubre la nueva ruta "establecer 1.3, SetTransparency, FVersion pasa a 1.4 y el guardado escribe %PDF-1.4", las rutas equivalentes para SetPageUserUnit y Encrypt(AES-256), y el caso sin operación en el que el autor de la llamada ya eligió una versión que satisface el mínimo del escritor
La actualización de validación 3.12.5 agrega cobertura de regresión para secuencias de escape de cadenas literales desconocidas y secuencias mixtas de escape octal y no octal. La sintaxis de cadenas literales PDF 1.7 ahora ignora correctamente los escapes desconocidos y consume solo dígitos octales válidos para las secuencias octales
La actualización de validación de la versión 3.14.2 amplía el conjunto de reglas de cumplimiento de versiones para reconocer características de PDF 1.5: formularios /XFA, /AlternatePresentations, el árbol de nombres /Renditions, los diccionarios multimedia /Type /Rendition /MediaCriteria /MediaPermissions /MediaPlayers y el subtipo de anotación Screen
La actualización de validación de la versión 3.14.1 amplía el conjunto de reglas de cumplimiento de versiones para reconocer características de PDF 1.4: /StructTreeRoot, /MarkInfo y diccionarios StructElem (PDF etiquetado), las entradas /Tabs de página y /Lang de documento, referencias /StructParent y /StructParents, diccionarios /OutputIntents y /OutputIntent, la firma de derechos de uso /UR3 y los subtipos de anotación Polygon, PolyLine, Caret, Ink, Popup y Watermark de PDF 1.4. Tests.Document cubre las nuevas rutas "guardar como PDF 1.3 rechaza /StructTreeRoot" y "guardar como PDF 1.4 conserva /StructTreeRoot"
La actualización de validación de la versión 3.14.0 amplía el conjunto de reglas de cumplimiento de versiones para reconocer características de PDF 1.3 (sombreado suave y diccionarios de funciones, espacios de color ICCBased y DeviceN, entradas de página TrimBox/BleedBox/ArtBox, CMaps /ToUnicode, anotaciones de archivo adjunto / Sound / Movie, diccionarios /Type /Filespec y /Type /EmbeddedFile, claves /Group /EF /Alternates /Mask y acciones JavaScript). La versión 3.23.0 sustituye la tolerancia anterior de compatibilidad con PDF 1.2 por un control estricto de PDF 1.2. Tests.Document ahora cubre el rechazo estricto de datos TrimBox de PDF 1.3 para PDF 1.2 y la comprobación previa de versión de guardado anexado bloqueado
La actualización de validación de la versión 3.13.0 conserva el mismo comportamiento de rechazo al guardar una versión incompatible que 3.12.7 (LastErrorCode 602), a la vez que mueve el conjunto de reglas a una unidad dedicada Lib\PDFlibVersion.pas y agrega un fixture DUnitX Tests.Version que confirma que la tabla de reglas contenga las reglas base de v3.12.6 y que los auxiliares de cadenas de versión completen correctamente el recorrido de ida y vuelta
La matriz de validación de la versión 3.12.0 incluye build-zlib-bcc32, build-zlib-bcc64x, build-zlib-vc64, build-jpeg-bcc32 y build-jpeg-vc64, cada uno completado con cero objetos con errores. Las compilaciones de paquetes de biblioteca también se verificaron con build-Win32-Lib.cmd 37.0 y build-Win64-Lib.cmd 37.0
Las suites DUnitX actuales de Delphi aprobaron 362 de 362 pruebas en Win32 y 362 de 362 pruebas en Win64. Las áreas cubiertas incluyen recorridos de ida y vuelta de compresión, decodificación de flujos zlib conocidos, cargas útiles de tamaño límite, flujos almacenados de varios bloques, salida HelloWorld con /FlateDecode, renderizado de JPEG y PNG, importación y exportación de imágenes, fuentes, formularios, cifrado, descifrado, firma, atributos PAdES, impresión, auxiliares Unicode, búferes, dibujo en lienzo, páginas, tablas, flujos de trabajo de documentos, análisis de sintaxis/xref, contratos estrictos de guardado PDF 1.2, comprobación previa de versión para guardados anexados, cumplimiento del nivel de extensión PDF 1.7, diagnósticos PDF/UA y generación/comparación de informes de comprobación previa
La suite GoogleTest actual de C++Builder Win64x aprobó 61 pruebas y omitió 2 pruebas existentes que dependen de muestras. Cubre flujos de trabajo derivados de demostraciones, además de flujos conocidos de zlib-ng, cargas útiles de tamaño límite, cargas útiles de líneas de exploración similares a PNG, recorridos de ida y vuelta almacenados de varios bloques, manejo de imágenes, salida de renderizado —incluida la cobertura de acceso directo PdfToImage—, cifrado, firma, impresión, contratos estrictos de guardado PDF 1.2, salida de nivel de extensión PDF 1.7, comprobación previa de versión para guardados anexados y comprobaciones de salida comprimida de HelloWorld, lo que valida el conjunto de objetos zlib-ng de bcc64x mediante la ABI de C++Builder
La referencia HTML está protegida por tools/test_docs_api_coverage.py, que comprueba que cada función pública de TPDFlib tenga una página de referencia en inglés, y por tools/test_docs_navigation.py, que mantiene coherentes los destinos de navegación multilingües en la carcasa de ayuda enmarcada
Readme.html y la referencia HTML deben mantenerse alineados cuando cambie el comportamiento visible para el usuario relacionado con validación, comprobación previa, renderizado, firma o informes