CheckFileCompliance

Conformidad, inspección de documentos

Selección del perfil de lector PDF/UA

Las comprobaciones PDF/UA seleccionan la parte 2 cuando XMP identifica pdfuaid:part=2 y en caso contrario mantienen las comprobaciones de la parte 1; las comprobaciones heredadas de PDF/UA-1 descritas aquí no se dan por aplicables a la parte 2

El perfil de PDF/UA-2 implementa comprobaciones básicas de identificación, espacios de nombres, roles y estructura; los informes estructurados utilizan PDF/UA-2 e ISO 14289-2 y revelan fullCertification=false y el ámbito sin verificar

Utilice CheckFilePDFUACompliance o RunPDFUAValidationPipelineTask para forzar una parte de destino, y GetPDFUAReadValidationCoverageJSON para inspeccionar los límites de capacidades

Descripción

Lee un archivo PDF externo y lo valida con arreglo a una norma ISO de conformidad elegida. El valor devuelto es cero (el archivo supera limpiamente la prueba elegida) o un identificador StringListID distinto de cero que enumera cada incidencia detectada. Cada entrada de la lista es un código breve, dos puntos y un mensaje legible — exactamente el mismo formato de código que usa GetPDFUADiagnostics. Enumere el resultado con GetStringListCount y GetStringListItemLa prueba de 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 aplicarLa prueba de PDF/UA-1 (añadida en v3.56.0) comprueba un PDF externo con arreglo a ISO 14289-1 y emite códigos de diagnóstico en el rango

10xxx, de modo que queden visualmente separados de los códigos 00xxx de PDF/A

Sintaxis

Delphi

Function TPDFlib.CheckFileCompliance(Const InputFileName, Password: WideString; ComplianceTest, Options: Integer): Integer;

ActiveX

Function PDFlib::CheckFileCompliance(InputFileName As String, Password As String, ComplianceTest As Long, Options As Long) As Long

DLL

int DLCheckFileCompliance(int InstanceID, const wchar_t * InputFileName, const wchar_t * Password, int ComplianceTest, int Options);

Parámetros

InputFileNameRuta completa del archivo PDF que se va a validar. El archivo se abre en modo de solo lectura y no se modifica.
PasswordContraseñ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 de PDF/A (código 00006) independientemente de si se suministra la contraseña correcta — PDF/A prohíbe el cifrado.
ComplianceTestLa norma con la que se va a comprobar.

1 — PDF/A (ISO 19005-1/-2/-3, los seis niveles de conformidad).
2 — PDF/UA-1 (ISO 14289-1:2014, PDF accesible).
3 — PDF/X (ISO 15930, incluida la familia PDF/X-6).
4 — PDF/VT-3 (ISO 16612-3:2020 sobre una base de la familia PDF/X-6).
5 — intercambio ráster restringido PDF/R-1.
6 — plantillas de reemplazo de contenido variable PDF/VCR-1.
7 — intercambio de documentos de ingeniería PDF/E-1.
OptionsIndicadores de bits que modifican la prueba.

0 — Predeterminado: informa de cada incidencia encontrada en el documento.
1 — Se detiene tras la primera incidencia y regresa inmediatamente. Útil cuando el llamador solo necesita una señal de superación o fallo.

Valores devueltos

0El archivo es conforme a la norma elegida.
Non-zeroUn identificador StringListID cuyas entradas describen cada no conformidad detectada. El identificador sigue siendo válido hasta que se cierre el documento o se llame a ReleaseStringList.

Códigos de incidencias de PDF/A (ComplianceTest = 1)

00002La versión de PDF excede 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 detalle nombra la versión infractora y el máximo permitido.
00003El catálogo 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.
00005El par XMP pdfaid:part+pdfaid:conformance falta, 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 se informa como incidencia fatal independientemente de Options.
00006El documento está cifrado. PDF/A prohíbe el cifrado en todas sus partes.
00007El catálogo no tiene ninguna entrada /OutputIntents. Todas las partes de PDF/A requieren un intento de salida para que el espacio de color de renderizado quede definido sin ambigüedad.
00011El catálogo no tiene ninguna entrada /MarkInfo. Solo se requiere para la conformidad de nivel a (PDF/A-1a, 2a, 3a) — el PDF etiquetado debe declararse.
00012El catálogo no tiene ninguna entrada /StructTreeRoot. Solo se requiere 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)

10001El 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.
10002El catálogo del documento no tiene ningún flujo /Metadata. La declaración de conformidad PDF/UA-1 se registra dentro de este flujo; sin él, el archivo no puede anunciarse como accesible.
10003El diccionario /MarkInfo del catálogo falta o /Marked no es true. ISO 14289-1 §7.1 exige que todo archivo conforme se declare como etiquetado para que la tecnología de asistencia pueda apoyarse en el árbol de estructura.
10004El catálogo no tiene ninguna 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.
10005El diccionario /ViewerPreferences falta o su entrada /DisplayDocTitle no es true. ISO 14289-1 §7.1 exige que los lectores conformes muestren el título del documento en la ventana en lugar del nombre de archivo.
10006La entrada /Lang del catálogo falta o está vacía. ISO 14289-1 §7.2 (que remite a ISO 32000-1 §14.9.2) exige que todo archivo conforme declare su lenguaje natural para que los lectores de pantalla seleccionen la voz y las reglas de pronunciación correctas.
10007El flujo de metadatos XMP no lleva un dc:title de Dublin Core no vacío. ISO 14289-1 §7.1 exige "una entrada dc:title que identifique claramente el documento".
10008El diccionario /MarkInfo tiene /Suspects establecido en true. ISO 14289-1 §7.1: los archivos que declaran conformidad PDF/UA deben tener un valor Suspects de false — un valor true indica que el etiquetado se sabe que contiene errores.
10009El /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 deben reasignarse. La línea de detalle nombra la primera etiqueta estándar que se reasignó.
10010El archivo está cifrado, pero el bit 10 de la clave de permisos de cifrado /P (máscara 512, "Extract for accessibility") no está establecido. 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 llegar al contenido.
10011Se 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 los archivos conformes; el XFA estático está permitido.
10012Se detectó un Reference XObject (un Form XObject que lleva una entrada /Ref). ISO 14289-1 §7.20 prohíbe los reference XObjects porque permiten que un PDF incruste a otro por referencia sin exponer el contenido referenciado a la tecnología de asistencia.
10013Se detectaron una o más anotaciones TrapNet. ISO 14289-1 §7.18.2 prohíbe explícitamente TrapNet en los archivos conformes. La línea de detalle informa de cuántas anotaciones se encontraron.
10014Una o más páginas llevan 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 en tales páginas siga el árbol de estructura, lo que señala /Tabs /S. La línea de detalle informa del número de páginas infractoras.
10015Una 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 lleve una descripción accesible para que los lectores de pantalla puedan anunciar el destino del enlace. La línea de detalle informa del número de anotaciones Link infractoras.
10016Uno o más diccionarios FileSpec de archivos incrustados carecen de la clave de nombre de archivo /F. ISO 14289-1 §7.11 exige que todo FileSpec de archivo incrustado lleve tanto /F como /UF.
10017Uno o más diccionarios FileSpec de archivos incrustados carecen de la clave de nombre de archivo Unicode /UF. ISO 14289-1 §7.11 exige que todo FileSpec de archivo incrustado lleve tanto /F como /UF.
10018A uno o más diccionarios de configuración de contenido opcional les falta una cadena de texto /Name no vacía. ISO 14289-1 §7.10 exige que todo diccionario de configuración OCG (la entrada predeterminada D más cada diccionario de OCProperties/Configs) lleve un /Name no vacío.
10019Uno 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 evitar ajustes automáticos de estado impulsados por información de uso.
10020Una o más fuentes que no son de las Standard 14 referenciadas por el documento no incrustan su programa de fuente (sin entrada FontFile, FontFile2 o FontFile3 en el FontDescriptor). ISO 14289-1 §7.21.4.1 exige que toda fuente usada para renderizar incruste su programa. Las fuentes Type 3 se saltan esta comprobación porque sus glifos son CharProcs en línea.
10021A uno o más descendientes CIDFontType2 les falta la entrada /CIDToGIDMap. ISO 14289-1 §7.21.3.2 exige que todo CIDFont Type 2 incrustado lleve /CIDToGIDMap (ya sea como un flujo que asigna CID a índices de glifo, o como el nombre Identity).
10022Una o más fuentes Standard 14 (Helvetica, Times, Courier, Symbol, ZapfDingbats y sus variantes negrita / cursiva) están referenciadas sin un programa de fuente incrustado. ISO 14289-1 §7.21.4 NOTE 5 deja claro que no hay exención de incrustación para las 14 fuentes Type 1 estándar.
10023A una o más fuentes les falta un CMap /ToUnicode y no coinciden con la lista de exenciones de §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.
10024El primer elemento de encabezado en el orden del documento no es H1 (o el H fuertemente estructurado). ISO 14289-1 §7.4.2: "Si se usa alguna etiqueta de encabezado, H1 será la primera".
10025Se detectaron uno o más saltos de nivel de encabezado en el orden del documento — p. ej., un H1 seguido inmediatamente de un H3, saltándose el H2. ISO 14289-1 §7.4.2 exige que las secuencias descendentes de encabezados avancen en orden numérico estricto sin saltarse niveles intermedios.
10026A una o más anotaciones Widget les falta la entrada /StructParent. ISO 14289-1 §7.18.4 exige que las anotaciones Widget estén anidadas dentro de una etiqueta de estructura Form; sin /StructParent el Widget no puede alcanzarse desde el árbol de estructura. La línea de detalle informa del número.
10027Una o más anotaciones Widget tienen una entrada /StructParent, pero el valor no se resuelve a través de StructTreeRoot/ParentTree hasta 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: la entrada /ParentTree falta por completo, apunta a un elemento que no es StructElem (un entero sin procesar / un diccionario MCR) o nombra una etiqueta que no es Form.
10028Una o más fuentes TrueType no simbólicas tienen un /Encoding (o un /BaseEncoding de un diccionario de codificación) 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.
10029Una o más fuentes TrueType simbólicas llevan una entrada /Encoding en el diccionario de fuente. ISO 14289-1 §7.21.6, cuarto párrafo, lo prohíbe — la codificación TrueType simbólica debe expresarse únicamente a través de la tabla cmap del programa de fuente incrustado.
10030A uno o más elementos de estructura L (lista) les falta el atributo ListNumbering. ISO 14289-1 §7.6 exige que toda 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).
10031Una o más anotaciones Link llevan 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 con un caso de uso legítimo de IsMap deben suprimir este diagnóstico por su cuenta.
10032A uno o más elementos de estructura Note les falta la entrada /ID. ISO 14289-1 §7.9 exige que toda etiqueta Note declare un /ID único para que las referencias cruzadas puedan apuntar a un destino estable.
10033Dos o más elementos de estructura Note comparten el mismo valor de /ID. La línea de detalle informa del número de pares duplicados detectados. ISO 14289-1 §7.9 exige que los identificadores de Note sean únicos dentro del documento.
10034Uno o más programas TrueType no simbólicos (FontDescriptor con el indicador Symbolic desactivado y un flujo FontFile2 presente) incrustan una tabla cmap cuya única subtabla es la entrada simbólica (3,0) de Microsoft. ISO 14289-1 §7.21.6, primer párrafo, exige al menos una subtabla cmap no simbólica para que el programa pueda renderizar los puntos de código declarados por su /Encoding.
10035Una o más fuentes TrueType no simbólicas declaran un /Encoding con una matriz /Differences que contiene nombres de glifo que no son miembros de Adobe Glyph List 2.0. .notdef está en la lista blanca porque la especificación lo permite implícitamente. ISO 14289-1 §7.21.6, tercer párrafo, exige que cada entrada de Differences pertenezca a AGL.
10036Las anchuras de una o más fuentes TrueType simples difieren de las métricas correspondientes del programa de fuente incrustado en más de una milésima de em. ISO 14289-1 §7.21.5 exige que la matriz /Widths coincida con las métricas de glifo incrustadas.
10037Las anchuras de uno o más CIDFontType2 difieren de las métricas correspondientes del programa TrueType incrustado en más de una milésima de em. ISO 14289-1 §7.21.5 exige que la matriz /W coincida con las métricas de glifo incrustadas.
10038Un /CharSet de descriptor de fuente Type 1 omite uno o más nombres de glifo presentes en su programa de fuente incrustado. ISO 14289-1 §7.21.4.2 exige que la entrada enumere cada glifo incrustado.
10039Un /CIDSet de descriptor de fuente CID omite uno o más CIDs que se asignan a glifos en su programa de fuente incrustado. ISO 14289-1 §7.21.4.2 exige que el conjunto de bits identifique cada CID incrustado.
10040Un Form XObject que contiene texto se invoca desde contenido de página fuera de contenido marcado. ISO 14289-1 §7.20 exige que el contenido de un Form XObject se incorpore a elementos de estructura.
10041Uno o más operandos de visualización de texto se resuelven al glifo .notdef. ISO 14289-1 §7.21.8 prohíbe las referencias a .notdef con independencia del modo de renderizado del texto.
10042A uno o más diccionarios de datos de recorte multimedia (identificados por /S /MCD, opcionalmente /Type /MediaClip) les falta la entrada obligatoria de tipo de contenido /CT. ISO 14289-1 §7.18.6 convierte en obligatoria esta clave opcional de ISO 32000-1 Table 274.
10043A uno o más diccionarios de datos de recorte multimedia les falta la matriz obligatoria /Alt (pares de cadena de idioma + texto alternativo). ISO 14289-1 §7.18.6 convierte en obligatoria esta clave opcional de ISO 32000-1 Table 274 para que la tecnología de asistencia pueda anunciar una descripción del multimedia incrustado.
10044Uno o más nodos del árbol de estructura llevan más de un elemento secundario H (encabezado genérico) directo. ISO 14289-1 §7.4.4 lo prohíbe explícitamente — divida la sección o sustituya las etiquetas H por niveles H1..H6 numerados.

Observaciones

La prueba de PDF/A está concebida como una autoverificación rápida antes de la entrega. Detecta las incidencias a nivel de documento que descalifican un archivo de forma directa (versión de PDF incorrecta, OutputIntent ausente, árbol de estructura ausente en el nivel A, cifrado, capas en PDF/A-1). No recorre cada operador de flujo de contenido ni verifica la incrustación de fuentes ni las referencias de espacio de color de cada objeto pintado — esas validaciones requieren un validador de PDF/A dedicado (como veraPDF). Use esta función como comprobación de primera línea y como puerta de regresión en las canalizaciones de compilación. Use CreatePreflightReport o SavePreflightReport cuando desee que la biblioteca dé formato a las listas de incidencias en un informe de texto reutilizable. Use CreatePreflightReportEx o SavePreflightReportEx para la salida de informes en texto, JSON, HTML o CSV, o consulte Preflight Reports para el flujo de trabajo completo de informesLa API complementaria

GetPDFUADiagnostics realiza comprobaciones análogas para PDF/UA (ISO 14289-1) sobre el documento en memoria que se está construyendo, en lugar de sobre un archivo externoAl producir salida PDF/A con esta biblioteca, llame a

SetPDFAMode antes de añadir cualquier contenido. El guardián del lado de generación dentro de SetPDFAMode bloquea las operaciones prohibidas por la parte elegida, de modo que un documento construido así normalmente superará CheckFileCompliance automáticamente

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

Preflight Reports, CreatePreflightReport, CreatePreflightReportEx, SavePreflightReport, SavePreflightReportEx, ComparePreflightReports, SetPDFAMode, GetPDFUADiagnostics, GetStringListCount, GetStringListItem, SetPDFUAMode

La prueba de conformidad 3 audita PDF/X (ISO 15930): identificación de edición, intención de salida, geometría de página, fuentes incrustadas y el conjunto de características prohibidas; para PDF/X-6 también valida indicadores de anotaciones y apariencias fijas, apariencias de AcroForm y firma, exclusiones de XFA y apariencias generadas por el visor, colocación de acciones, cadenas de acciones, el conjunto de acciones con nombre permitidas y cada valor UseBlackPtComp

La prueba de conformidad 4 audita los metadatos de identificación de PDF/VT-3, su base de la familia PDF/X-6, el grafo DPartRoot y DPart, los nombres y valores DPM, el nivel de registro, el orden de páginas y la cobertura exacta de hojas; las comprobaciones compuestas comparten una pasada de analizador

La prueba de conformidad 5 audita la colocación de marcadores PDF/R-1, la versión y el cifrado, los objetos indirectos de generación cero, los diccionarios y filtros restringidos, los programas de página de un solo flujo, las bandas ráster ordenadas, las codificaciones de imagen, la cobertura de páginas y la resolución efectiva; puede reutilizar una pasada de análisis de canalización de validación compartida

La prueba de conformidad 6 audita el fundamento PDF/X y la identificación XMP de PDF/VCR-1, la raíz de plantilla directa única, los campos declarados, el campo de selección de páginas opcional y cada marcador de posición de reemplazo PassThrough de hoja, el enlace de páginas, los MCID y las cajas delimitadoras; puede reutilizar una pasada de análisis de canalización de validación compartida

La prueba de conformidad 7 audita la identificación y los metadatos de ciclo de vida de PDF/E-1, los identificadores de trailer, el cifrado permitido, las intenciones de salida y los espacios de color de dispositivo, los operadores de contenido, las fuentes, las anotaciones, los formularios, el contenido opcional, las acciones, las referencias a archivos externos, los estados de gráficos y las restricciones de flujos 3D; puede reutilizar una pasada de análisis de canalización de validación compartida