CheckFileComplianceA
Conformidad, inspección de documentos
Descripción
El sufijo A indica el punto de entrada ANSI (char) de la DLL; la superficie ActiveX/COM expone únicamente la forma Unicode. El comportamiento es idéntico a CheckFileCompliance y los argumentos de cadena se interpretan utilizando la página de códigos SetAnsiMode actual
Lee un archivo PDF externo y lo valida conforme al estándar ISO elegido. El valor devuelto es cero (el archivo supera limpiamente la prueba elegida) o un identificador StringListID distinto de cero que enumera todos los problemas detectados. Cada entrada de la lista consta de un código breve, dos puntos y un mensaje legible — exactamente el mismo formato de código que utiliza GetPDFUADiagnostics. Recorra el resultado con GetStringListCount y GetStringListItem
La prueba PDF/A abarca los seis modos de conformidad (PDF/A-1a, PDF/A-1b, PDF/A-2a, PDF/A-2b, PDF/A-3a, PDF/A-3b) y lee las entradas XMP pdfaid:part/pdfaid:conformance para decidir qué conjunto de reglas aplicar
La prueba PDF/UA-1 (añadida en v3.56.0) comprueba ISO 14289-1 y emite códigos 10xxx separados visualmente de los PDF/A 00xxx
Sintaxis
Delphi
Function DLCheckFileComplianceA(InstanceID: Integer; InputFileName, Password: PAnsiChar; ComplianceTest, Options: Integer): Integer;
DLL
int DLCheckFileComplianceA(int InstanceID, const char * InputFileName, const char * Password, int ComplianceTest, int Options);
Parámetros
| InputFileName | Ruta completa del archivo PDF que se validará. El archivo se abre en modo de solo lectura y no se modifica |
|---|---|
| Password | Contraseña utilizada para abrir el archivo. Pase una cadena vacía para los documentos sin cifrar. Tenga en cuenta que un documento cifrado no supera la prueba PDF/A (código 00006) aunque se proporcione la contraseña correcta — PDF/A prohíbe el cifrado |
| ComplianceTest | El estándar con el que se comprobará. 1 — PDF/A (ISO 19005-1/-2/-3, los seis niveles de conformidad). 2 — PDF/UA-1 (ISO 14289-1:2014, PDF accesible) |
| Options | Indicadores de bits que modifican la prueba. 0 — Valor predeterminado: notificar todos los problemas encontrados en el documento. 1 — Detenerse después del primer problema y devolver el resultado inmediatamente. Resulta útil cuando el cliente solo necesita una señal de apto o no apto |
Valores devueltos
| 0 | El archivo cumple la norma elegida |
|---|---|
| Non-zero | Identificador StringListID cuyas entradas describen incumplimientos. Sigue válido hasta cerrar el documento o llamar a ReleaseStringList |
Códigos de incidencia de PDF/A (ComplianceTest = 1)
| 00002 | La versión PDF supera el máximo permitido por el nivel de conformidad (PDF/A-1 se limita a 1.4; PDF/A-2 y PDF/A-3 se limitan a 1.7). La línea de detalles indica la versión infractora y el máximo permitido |
|---|---|
| 00003 | El Catalog contiene /OCProperties (contenido opcional / capas), prohibido por PDF/A-1. PDF/A-2 y PDF/A-3 permiten capas y no activan esta comprobación |
| 00005 | El par XMP pdfaid:part+pdfaid:conformance falta, tiene un formato incorrecto o contiene un valor fuera del conjunto legal 1A, 1B, 2A, 2B, 3A, 3B. La biblioteca no puede determinar qué conjunto de reglas aplicar, por lo que se informa de este problema como fatal con independencia de Options |
| 00006 | El documento está cifrado. PDF/A prohíbe el cifrado en todas sus partes |
| 00007 | Catalog no contiene ninguna entrada /OutputIntents. Todas las partes de PDF/A requieren una condición de salida para que el espacio de color de renderizado se defina sin ambigüedad |
| 00011 | El Catalog no tiene entrada /MarkInfo. Solo se exige para conformidad de nivel a (PDF/A-1a, 2a, 3a): un PDF etiquetado debe declararlo |
| 00012 | El Catalog no tiene entrada /StructTreeRoot. Solo se exige para conformidad de nivel a. Un PDF etiquetado debe tener árbol de estructura lógica |
Códigos de incidencia de PDF/UA-1 (ComplianceTest = 2)
| 10001 | El flujo de metadatos XMP no contiene pdfuaid:part o el valor no es 1. ISO 14289-1 §5 exige que un archivo conforme se identifique mediante esta propiedad; ISO 14289-1 §6.2 prohíbe declarar conformidad sin ella |
|---|---|
| 10002 | El Catalog del documento no contiene ningún flujo /Metadata. Dentro de este flujo se registra una declaración de conformidad con PDF/UA-1; sin él, el archivo no puede declararse accesible |
| 10003 | Falta el diccionario /MarkInfo del Catalog o /Marked no es true. ISO 14289-1 §7.1 exige que todo archivo conforme se declare etiquetado para que la tecnología de asistencia pueda confiar en el árbol de estructura |
| 10004 | El Catalog no tiene entrada /StructTreeRoot. Un archivo PDF/UA-1 debe incluir un árbol lógico que describa el orden de lectura y la semántica |
| 10005 | Falta /ViewerPreferences o /DisplayDocTitle no es true. ISO 14289-1 §7.1 exige mostrar el título en vez del nombre de archivo |
| 10006 | La entrada /Lang del Catalog falta o está vacía. ISO 14289-1 §7.2 (que remite a ISO 32000-1 §14.9.2) exige que todos los archivos conformes declaren su idioma natural para que los lectores de pantalla seleccionen la voz y las reglas de pronunciación correctas |
| 10007 | El flujo de metadatos XMP no contiene un dc:title Dublin Core no vacío. ISO 14289-1 §7.1 exige "una entrada dc:title que identifique claramente el documento" |
| 10008 | El diccionario /MarkInfo tiene /Suspects establecido en true. ISO 14289-1 §7.1: los archivos que declaren conformidad PDF/UA deben tener un valor Suspects de false; un valor true marca el etiquetado como conocido por contener errores |
| 10009 | El /RoleMap del documento reasigna uno o varios tipos de estructura estándar. ISO 14289-1 §7.1: las etiquetas estándar definidas en ISO 32000-1 §14.8.4 (P, H1..H6, Figure, Table, etc.) no deben reasignarse. La línea de detalle indica la primera etiqueta estándar reasignada |
| 10010 | El archivo está cifrado, pero el bit 10 de la clave de permiso /P del cifrado (máscara 512, "Extraer para accesibilidad") no está establecido. ISO 14289-1 §7.16 exige que todos los archivos conformes cifrados permitan la extracción para accesibilidad, de modo que las tecnologías de asistencia puedan acceder al contenido |
| 10011 | Se ha detectado un formulario XFA dinámico: el paquete XDP de XFA contiene <dynamicRender>required</dynamicRender>. ISO 14289-1 §7.15 prohíbe los formularios XFA dinámicos en archivos conformes; se permite XFA estático |
| 10012 | Se detectó un Reference XObject con /Ref. ISO 14289-1 §7.20 lo prohíbe porque incrusta otro PDF sin exponerlo a tecnología asistencial |
| 10013 | Se han detectado una o varias anotaciones TrapNet. ISO 14289-1 §7.18.2 prohíbe explícitamente TrapNet en archivos conformes. La línea de detalle indica cuántas anotaciones se han encontrado |
| 10014 | Una o más páginas tienen anotaciones sin /Tabs /S. ISO 14289-1 §7.18.3 exige el orden señalado por /Tabs /S; el detalle indica el número de páginas |
| 10015 | Una o varias anotaciones Link carecen de una descripción alternativa no vacía en /Contents. ISO 14289-1 §7.18.5 exige que cada anotación Link incluya una descripción accesible para que los lectores de pantalla puedan anunciar el destino del enlace. La línea de detalle indica el número de anotaciones Link infractoras |
| 10016 | Uno o varios diccionarios FileSpec de archivos incrustados carecen de la clave de nombre de archivo /F. ISO 14289-1 §7.11 exige que cada FileSpec de archivo incrustado contenga tanto /F como /UF |
| 10017 | Falta la clave Unicode /UF en uno o más FileSpec. ISO 14289-1 §7.11 exige tanto /F como /UF |
| 10018 | Falta una cadena /Name no vacía en configuraciones opcionales. ISO 14289-1 §7.10 la exige en D y cada diccionario de OCProperties/Configs mediante /Name |
| 10019 | Uno o varios diccionarios de configuración de contenido opcional contienen la clave /AS prohibida. ISO 14289-1 §7.10 prohíbe explícitamente /AS en cualquier diccionario de configuración OCG para impedir ajustes automáticos del estado basados en información de uso |
| 10020 | Una o varias fuentes distintas de Standard 14 a las que hace referencia el documento no incrustan su programa de fuente (no hay ninguna entrada FontFile, FontFile2 ni FontFile3 en FontDescriptor). ISO 14289-1 §7.21.4.1 exige que toda fuente utilizada para el renderizado incruste su programa. Las fuentes Type 3 omiten esta comprobación porque sus glifos son CharProcs en línea |
| 10021 | Falta /CIDToGIDMap en uno o más CIDFontType2. ISO 14289-1 §7.21.3.2 exige /CIDToGIDMap como flujo de CIDs a glifos o nombre Identity |
| 10022 | Se hace referencia a una o varias fuentes Standard 14 (Helvetica, Times, Courier, Symbol, ZapfDingbats y sus variantes en negrita u oblicuas) sin un programa de fuente incrustado. La NOTA 5 de ISO 14289-1 §7.21.4 deja claro que no existe ninguna exención de incrustación para las 14 fuentes Type 1 estándar |
| 10023 | A una o varias fuentes les falta un CMap /ToUnicode y no coinciden con la lista de exenciones de §7.21.7. La lista abarca MacRomanEncoding / MacExpertEncoding / WinAnsiEncoding predefinidos, fuentes Type 0 cuyo CIDFont descendiente utiliza las colecciones de caracteres GB1 / CNS1 / Japan1 / Korea1 de Adobe y fuentes TrueType no simbólicas |
| 10024 | El primer elemento de encabezado en el orden del documento no es H1 (ni el H fuertemente estructurado). ISO 14289-1 §7.4.2: "Si se utiliza alguna etiqueta de encabezado, H1 debe ser la primera" |
| 10025 | Se detectaron uno o varios saltos de nivel de encabezado en el orden del documento — p. ej., un H1 seguido inmediatamente por un H3, omitiendo H2. ISO 14289-1 §7.4.2 exige que las secuencias descendentes de encabezados sigan un orden numérico estricto sin omitir niveles intermedios |
| 10026 | Una o varias anotaciones Widget carecen de una entrada /StructParent. ISO 14289-1 §7.18.4 exige que estén anidadas en una etiqueta de estructura Form; sin /StructParent, no es posible acceder al Widget desde el árbol de estructura. La línea de detalle indica el número |
| 10027 | Una o más anotaciones Widget tienen /StructParent que no resuelve mediante StructTreeRoot/ParentTree a /S = Form. ISO 14289-1 §7.18.4 exige etiqueta Form; puede faltar /ParentTree, apuntar a un no StructElem o a un no Form |
| 10028 | Una o varias fuentes TrueType no simbólicas tienen /Encoding (o un /BaseEncoding del diccionario 'Encoding') que no es MacRomanEncoding ni WinAnsiEncoding. ISO 14289-1 §7.21.6 restringe la codificación TrueType no simbólica a estos dos nombres predefinidos |
| 10029 | Una o más fuentes TrueType simbólicas tienen /Encoding. ISO 14289-1 §7.21.6 lo prohíbe — la codificación debe expresarse solo mediante la tabla cmap del programa's |
| 10030 | Uno o varios elementos de estructura L (lista) carecen del atributo ListNumbering. ISO 14289-1 §7.6 exige que cada etiqueta L declare mediante este atributo su estilo de numeración. Los valores válidos son None, Disc, Circle, Square, Decimal, UpperRoman, LowerRoman, UpperAlpha y LowerAlpha (ISO 32000-1 Tabla 347) |
| 10031 | Una o varias anotaciones Link contienen un diccionario de acción URI cuya entrada /IsMap es true. ISO 14289-1 §7.18.5 prohíbe /IsMap = true en una acción URI, salvo que se proporcione una funcionalidad equivalente en otra parte del contenido sin una clave /IsMap. Los autores que tengan un caso de uso legítimo para IsMap deben suprimir por sí mismos este diagnóstico |
| 10032 | Uno o más elementos Note carecen de /ID. ISO 14289-1 §7.9 exige un /ID único para destinos estables de referencias cruzadas |
| 10033 | Dos o más elementos Note comparten /ID. El detalle indica pares duplicados; ISO 14289-1 §7.9 exige IDs únicos |
| 10034 | Una o más fuentes TrueType con el indicador Symbolic desactivado tienen solo la subtabla cmap Microsoft (3,0). ISO 14289-1 §7.21.6 exige otra no simbólica para los puntos declarados por /Encoding |
| 10035 | Una o más fuentes TrueType no simbólicas tienen /Encoding con /Differences cuyos nombres no están en AGL 2.0. .notdef se permite; ISO 14289-1 §7.21.6 exige AGL |
| 10042 | Uno o más diccionarios de clip /S /MCD, opcionalmente /Type /MediaClip, carecen de /CT. ISO 14289-1 §7.18.6 lo exige |
| 10043 | Uno o varios diccionarios de datos de clips multimedia carecen de la matriz /Alt necesaria (pares de cadena de idioma y texto alternativo). ISO 14289-1 §7.18.6 eleva esta clave opcional de la Tabla 274 de ISO 32000-1 a obligatoria para que las tecnologías de asistencia puedan anunciar una descripción del contenido multimedia incrustado |
| 10044 | Uno o varios nodos del árbol de estructura contienen más de un hijo directo H (encabezado genérico). ISO 14289-1 §7.4.4 lo prohíbe expresamente: divida la sección o sustituya las etiquetas H por niveles numerados H1..H6 |
Observaciones
La prueba PDF/A es una comprobación rápida previa: detecta versión, OutputIntent, estructura de nivel A, cifrado y capas PDF/A-1. No valida cada operador, fuente o espacio; para ello use un validador dedicado. Para informes use CreatePreflightReport, SavePreflightReport, CreatePreflightReportEx, SavePreflightReportEx o Informes de comprobación previa
La API complementaria GetPDFUADiagnostics realiza comprobaciones análogas de PDF/UA-1 (ISO 14289-1) en el documento en memoria que se está creando, en lugar de hacerlo en un archivo externo
Al generar una salida PDF/A con esta biblioteca, llame a SetPDFAMode antes de añadir contenido. La protección durante la generación incluida en SetPDFAMode bloquea las operaciones prohibidas por la parte elegida, por lo que un documento creado de ese modo normalmente superará CheckFileCompliance de forma automática
Ejemplo
// Validate a delivered PDF/A file and print all issues
var
Issues, Count, I: Integer;
begin
Issues := PDF.CheckFileCompliance('archive.pdf', '', 1, 0);
if Issues = 0 then
WriteLn('archive.pdf: PDF/A conformant')
else
begin
Count := PDF.GetStringListCount(Issues);
WriteLn('archive.pdf: ', Count, ' PDF/A issue(s) detected:');
for I := 1 to Count do
WriteLn(' ', PDF.GetStringListItem(Issues, I));
end;
end;
// Fast pass/fail gate in a CI pipeline — stop on the first issue
var
Failed: Boolean;
begin
Failed := PDF.CheckFileCompliance('build/output.pdf', '', 1, 1) <> 0;
if Failed then
Halt(1);
end;Véase también
Informes de comprobación preliminar, CreatePreflightReport, CreatePreflightReportEx, SavePreflightReport, SavePreflightReportEx, ComparePreflightReports, SetPDFAMode, GetPDFUADiagnostics, GetStringListCount, GetStringListItem, SetPDFUAMode