CheckFileComplianceA
Conformidad, Inspección de documentos
Descripción
La A final indica el punto de entrada ANSI (char) de la DLL; la interfaz 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 actual de SetAnsiMode
Lee un archivo PDF externo y lo valida conforme a un estándar de cumplimiento ISO elegido El valor devuelto es cero (el archivo supera limpiamente la prueba elegida) o un controlador StringListID distinto de cero que enumera cada problema detectado Cada entrada de la lista es un código corto, dos puntos y un mensaje legible para humanos — exactamente el mismo formato de código usado por GetPDFUADiagnostics Enumere el resultado con GetStringListCount y GetStringListItem
La prueba PDF/A cubre 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 (agregada en v3.56.0) comprueba un PDF externo frente a ISO 14289-1 y emite códigos de diagnóstico del intervalo 10xxx para que permanezcan visualmente separados de los códigos 00xxx de PDF/A
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 usada para abrir el archivo. Pase una cadena vacía para 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 debe 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 | Banderas de bits que modifican la prueba. 0 — Predeterminado: informar cada problema encontrado en el documento. 1 — Detenerse después del primer problema y devolver de inmediato. Útil cuando quien llama solo necesita una señal de aprobado o reprobado |
Valores devueltos
| 0 | El archivo cumple con el estándar elegido |
|---|---|
| Non-zero | Un identificador StringListID cuyas entradas describen cada incumplimiento detectado El identificador sigue siendo válido hasta que se cierra el documento o se llama a ReleaseStringList |
Códigos de incidencias PDF/A (ComplianceTest = 1)
| 00002 | La versión de PDF supera el máximo permitido por el nivel de conformidad (PDF/A-1 limita a 1.4; PDF/A-2 y PDF/A-3 limitan a 1.7) La línea de detalle nombra 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 | Falta el par XMP pdfaid:part+pdfaid:conformance, está mal formado 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 esto se informa como un problema fatal independientemente de Options |
| 00006 | El documento está cifrado. PDF/A prohíbe el cifrado en todas sus partes |
| 00007 | El Catalog no tiene una entrada /OutputIntents. Todas las partes de PDF/A requieren una intención de salida para que el espacio de color de renderizado se defina sin ambigüedad |
| 00011 | El Catalog no tiene una entrada /MarkInfo. Se requiere solo para conformidad de nivel a (PDF/A-1a, 2a, 3a) — el PDF etiquetado debe declararse como tal |
| 00012 | El catálogo no tiene una entrada /StructTreeRoot. Se requiere solo para la conformidad de nivel a. Un documento PDF etiquetado debe tener un árbol de estructura lógica |
Códigos de incidencias 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 informar conformidad sin ella |
|---|---|
| 10002 | El Catalog del documento no tiene un flujo /Metadata. Una declaración de conformidad PDF/UA-1 se registra dentro de este flujo; sin ella el archivo no puede anunciarse como accesible |
| 10003 | Falta el diccionario /MarkInfo del Catalog o /Marked no es true. ISO 14289-1 §7.1 exige que cada archivo conforme se declare etiquetado para que la tecnología de asistencia pueda basarse en el árbol de estructura |
| 10004 | El catálogo no tiene una entrada /StructTreeRoot. Un archivo PDF/UA-1 debe incluir un árbol de estructura lógica que describa el orden de lectura y la semántica del documento |
| 10005 | Falta el diccionario /ViewerPreferences o su entrada /DisplayDocTitle no es true. ISO 14289-1 §7.1 exige que los lectores conformes muestren el título del documento en el marco de su ventana en lugar del nombre de archivo |
| 10006 | Falta la entrada /Lang del Catalog o está vacía. ISO 14289-1 §7.2 (en referencia a ISO 32000-1 §14.9.2) exige que todo archivo conforme declare su idioma natural para que los lectores de pantalla seleccionen las reglas correctas de voz y pronunciación |
| 10007 | El flujo de metadatos XMP no contiene un dc:title de 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 declaran conformidad con 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 más 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 se deben reasignar. La línea de detalles nombra la primera etiqueta estándar que se reasignó |
| 10010 | El archivo está cifrado, pero no está establecido el bit 10 de la clave de permisos de cifrado /P (máscara 512, "Extraer para accesibilidad"). ISO 14289-1 §7.16 exige que todo archivo conforme cifrado permita la extracción para accesibilidad, de modo que la tecnología de asistencia pueda acceder al contenido |
| 10011 | Se detectó 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 XObject de referencia (Form XObject que contiene una entrada /Ref) ISO 14289-1 §7.20 prohíbe los XObjects de referencia porque permiten que un PDF incruste otro por referencia sin exponer el contenido referenciado a la tecnología de asistencia |
| 10013 | Se detectó una o más anotaciones TrapNet. ISO 14289-1 §7.18.2 prohíbe explícitamente TrapNet en archivos conformes. La línea de detalles informa cuántas anotaciones se encontraron |
| 10014 | Una o más páginas contienen anotaciones pero no establecen /Tabs /S en su diccionario de página. ISO 14289-1 §7.18.3 exige que el orden de tabulación de esas páginas siga el árbol de estructura, indicado por /Tabs /S. La línea de detalle informa el conteo de páginas infractoras |
| 10015 | Una o más anotaciones Link carecen de una descripción alternativa /Contents no vacía. ISO 14289-1 §7.18.5 exige que cada anotación Link tenga una descripción accesible para que los lectores de pantalla puedan anunciar el destino del enlace. La línea de detalles informa el número de anotaciones Link infractoras |
| 10016 | Uno o más 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 incluya tanto /F como /UF |
| 10017 | A uno o más diccionarios FileSpec de archivos incrustados les falta la clave Unicode de nombre de archivo /UF ISO 14289-1 §7.11 exige que cada FileSpec de archivo incrustado incluya tanto /F como /UF |
| 10018 | Uno o más diccionarios de configuración de contenido opcional carecen de una cadena de texto /Name no vacía. ISO 14289-1 §7.10 exige que cada diccionario de configuración OCG (la entrada D predeterminada más cada diccionario en OCProperties/Configs) tenga un /Name no vacío |
| 10019 | Uno o más diccionarios de configuración de contenido opcional contienen la clave prohibida /AS. ISO 14289-1 §7.10 prohíbe explícitamente /AS en cualquier diccionario de configuración OCG para impedir ajustes automáticos de estado basados en información de uso |
| 10020 | Una o más fuentes no Standard-14 a las que hace referencia el documento no incorporan su programa de fuente (no hay entradas FontFile, FontFile2 ni FontFile3 en FontDescriptor). ISO 14289-1 §7.21.4.1 exige que toda fuente usada para renderizar incorpore su programa. Las fuentes Type 3 omiten esta comprobación porque sus glifos son CharProcs en línea |
| 10021 | A uno o más descendientes CIDFontType2 les falta la entrada /CIDToGIDMap. ISO 14289-1 §7.21.3.2 exige que cada CIDFont Type 2 incrustado incluya /CIDToGIDMap (como flujo que asigna CIDs a índices de glifos o como el nombre Identity) |
| 10022 | Se hace referencia a una o más fuentes Standard 14 (Helvetica, Times, Courier, Symbol, ZapfDingbats y sus variantes en negrita / oblicua) sin un programa de fuente incrustado ISO 14289-1 §7.21.4 NOTE 5 aclara que no existe exención de incrustación para las 14 fuentes Type 1 estándar |
| 10023 | A una o más fuentes les falta un CMap /ToUnicode y no coinciden con la lista de exenciones §7.21.7. La lista de exenciones cubre las codificaciones predefinidas MacRomanEncoding / MacExpertEncoding / WinAnsiEncoding, las fuentes Type 0 cuyo CIDFont descendiente usa las colecciones de caracteres Adobe GB1 / CNS1 / Japan1 / Korea1, y las fuentes TrueType no simbólicas |
| 10024 | El primer elemento de encabezado en el orden del documento no es H1 (ni el H de estructura fuerte). ISO 14289-1 §7.4.2: "Si se usa cualquier etiqueta de encabezado, H1 debe ser la primera" |
| 10025 | Se detectó una o más omisiones de nivel de encabezado en el orden del documento, por ejemplo, un H1 seguido inmediatamente de un H3 y se omite 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 requiere que las anotaciones Widget estén anidadas dentro de una etiqueta de estructura Form; sin /StructParent, no es posible que Widget se alcance desde el árbol de estructura. La línea de detalle informa el recuento |
| 10027 | Una o más anotaciones Widget tienen una entrada /StructParent, pero el valor no se resuelve mediante StructTreeRoot/ParentTree en un elemento de estructura con /S = Form ISO 14289-1 §7.18.4 exige que toda anotación Widget esté anidada dentro de una etiqueta de estructura Form Posibles causas: falta por completo la entrada /ParentTree, apunta a un elemento distinto de StructElem (entero sin procesar o diccionario MCR) o nombra una etiqueta distinta de Form |
| 10028 | Una o más fuentes TrueType no simbólicas tienen /Encoding (o el /BaseEncoding de un diccionario Encoding's) 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 contienen una entrada /Encoding en el diccionario de fuentes ISO 14289-1 §7.21.6, cuarto párrafo, lo prohíbe — la codificación TrueType simbólica debe expresarse solo mediante la tabla cmap del programa de fuente incrustado's |
| 10030 | A uno o más elementos de estructura L (lista) les falta el atributo ListNumbering ISO 14289-1 §7.6 exige que cada etiqueta L declare su estilo de numeración mediante este atributo Los valores válidos son None, Disc, Circle, Square, Decimal, UpperRoman, LowerRoman, UpperAlpha y LowerAlpha (ISO 32000-1 Table 347) |
| 10031 | Una o más 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 funcionalidad equivalente en otra parte del contenido sin una clave /IsMap. Los autores con un caso de uso legítimo de IsMap deben suprimir este diagnóstico por su cuenta |
| 10032 | Uno o más elementos de estructura Note carecen de la entrada /ID ISO 14289-1 §7.9 exige que cada etiqueta Note declare un /ID único para que las referencias cruzadas puedan llegar a un destino estable |
| 10033 | Dos o más elementos de estructura Note comparten el mismo valor /ID; la línea de detalle informa la cantidad de pares duplicados detectados; ISO 14289-1 §7.9 exige que los ID de Note sean únicos dentro del documento |
| 10034 | Uno o más programas TrueType no simbólicos (FontDescriptor con el indicador Symbolic desactivado, flujo FontFile2 presente) incorporan una tabla cmap cuya única subtabla es la entrada Microsoft simbólica (3,0). El primer párrafo de ISO 14289-1 §7.21.6 exige al menos una subtabla cmap no simbólica para que el programa pueda representar los puntos de código declarados por su /Encoding |
| 10035 | Una o más fuentes TrueType no simbólicas declaran una /Encoding con una matriz /Differences que contiene nombres de glifo que no pertenecen a Adobe Glyph List 2.0 .notdef está en la lista permitida porque la especificación lo permite implícitamente ISO 14289-1 §7.21.6, tercer párrafo, exige que cada entrada Differences se encuentre en AGL |
| 10042 | Uno o más diccionarios de datos de clip multimedia (identificados por /S /MCD, opcionalmente /Type /MediaClip) carecen de la entrada obligatoria de tipo de contenido /CT ISO 14289-1 §7.18.6 convierte esta clave opcional de ISO 32000-1 Tabla 274 en obligatoria |
| 10043 | Uno o más diccionarios de datos de clips multimedia no tienen la matriz /Alt requerida (pares de cadenas de idioma y texto alternativo) ISO 14289-1 §7.18.6 convierte esta clave opcional de ISO 32000-1 Tabla 274 en obligatoria para que la tecnología de asistencia pueda anunciar una descripción del contenido multimedia incrustado |
| 10044 | Uno o más nodos del árbol de estructura contienen más de un hijo H directo (encabezado genérico). ISO 14289-1 §7.4.4 lo prohíbe expresamente: divida la sección o reemplace las etiquetas H por niveles numerados H1..H6 |
Observaciones
La prueba PDF/A está pensada como una autocomprobación rápida antes de la entrega. Detecta los problemas de nivel de documento que descalifican directamente un archivo (versión PDF incorrecta, OutputIntent ausente, árbol de estructura ausente en el nivel A, cifrado, capas en PDF/A-1). No recorre todos los operadores del flujo de contenido ni verifica la incrustación de fuentes o las referencias de espacio de color para cada objeto pintado; esas validaciones requieren un validador PDF/A dedicado (como veraPDF). Use esta función como comprobación de primera línea y como puerta de regresión en canalizaciones de compilación. Use CreatePreflightReport o SavePreflightReport cuando quiera que la biblioteca dé formato a las listas de problemas en un informe de texto reutilizable. Use CreatePreflightReportEx o SavePreflightReportEx para salida de informes de texto, JSON, HTML o CSV, o consulte Preflight Reports para el flujo de trabajo completo de informes
La API complementaria GetPDFUADiagnostics realiza comprobaciones análogas para PDF/UA-1 (ISO 14289-1) en el documento en memoria que se está creando, en vez de hacerlo en un archivo externo
Al generar salida PDF/A con esta biblioteca, llame a SetPDFAMode antes de agregar contenido. La protección del lado de generación dentro de 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 preflight, CreatePreflightReport, CreatePreflightReportEx, SavePreflightReport, SavePreflightReportEx, ComparePreflightReports, SetPDFAMode, GetPDFUADiagnostics, GetStringListCount, GetStringListItem, SetPDFUAMode