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; de lo contrario conservan las comprobaciones de la parte 1; las comprobaciones heredadas de PDF/UA-1 descritas aquí no se supone que apliquen 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 usan PDF/UA-2 e ISO 14289-2 y declaran fullCertification=false y el ámbito sin verificar

Use CheckFilePDFUACompliance o RunPDFUAValidationPipelineTask para forzar una parte de destino, y GetPDFUAReadValidationCoverageJSON para examinar los límites de capacidad

Descripción

Lee un archivo PDF externo y lo valida frente a una norma de conformidad ISO elegida. El valor devuelto es cero (el archivo pasa limpiamente la prueba elegida) o un manejador StringListID distinto de cero que enumera cada incidencia detectada. Cada entrada de la lista es un código corto, dos puntos y un mensaje legible, exactamente el mismo formato de código que usa GetPDFUADiagnostics. Enumere el resultado con GetStringListCount y GetStringListItemLa 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 aplicarLa 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 en el rango

10xxx para que permanezcan 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 falla la prueba 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 comprueba.

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 — PDF/R-1 intercambio restringido de imágenes ráster.
6 — PDF/VCR-1 plantillas de reemplazo de contenido variable.
7 — PDF/E-1 intercambio de documentos de ingeniería
OptionsBanderas de bits que modifican la prueba.

0 — Predeterminado: informa cada incidencia encontrada en el documento.
1 — Se detiene tras la primera incidencia y regresa de inmediato. Útil cuando quien llama solo necesita una señal de aprobado/reprobado

Valores devueltos

0El archivo es conforme a la norma elegida
Non-zeroUn manejador StringListID cuyas entradas describen cada incumplimiento detectado. El manejador 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 (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
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 entrada /OutputIntents. Todas las partes de PDF/A requieren una intención de salida para que el espacio de color de renderizado quede definido sin ambigüedad
00011El catálogo no tiene entrada /MarkInfo. Se requiere solo para la conformidad de nivel a (PDF/A-1a, 2a, 3a); el PDF etiquetado debe declararse
00012El catálogo no tiene 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)

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 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
10003Falta el diccionario /MarkInfo del catálogo 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 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
10005Falta 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 la barra de su ventana en lugar del nombre de archivo
10006La entrada /Lang del catálogo falta o está vacía. ISO 14289-1 §7.2 (con referencia 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 incluye 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 marca el etiquetado como sabidamente propenso a contener 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 reasignada
10010El archivo está cifrado, pero el bit 10 de la clave de permisos /P de cifrado (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 archivos conformes; el XFA estático está permitido
10012Se detectó un Reference XObject (un Form XObject con 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 archivos conformes. La línea de detalle informa cuántas anotaciones se encontraron
10014Una 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 en tales páginas siga el árbol de estructura, lo cual se señala con /Tabs /S. La línea de detalle informa el 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 incluya una descripción accesible para que los lectores de pantalla puedan anunciar el destino del enlace. La línea de detalle informa el número de anotaciones Link infractoras
10016A uno o más FileSpec de archivos incrustados les falta la clave de nombre de archivo /F. ISO 14289-1 §7.11 exige que todo FileSpec de archivo incrustado incluya tanto /F como /UF
10017A uno o más FileSpec de archivos incrustados les falta la clave de nombre de archivo Unicode /UF. ISO 14289-1 §7.11 exige que todo FileSpec de archivo incrustado incluya 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) incluya 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 impedir ajustes automáticos de estado basados en información de uso
10020Una o más fuentes no 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 omiten 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 incluya /CIDToGIDMap (ya sea como un flujo que asigna CIDs a índices de glifos, 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 NOTA 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 (ni el H fuertemente estructurado). ISO 14289-1 §7.4.2: "Si se usan etiquetas de encabezado, H1 debe ser el primero"
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, omitiendo H2. ISO 14289-1 §7.4.2 exige que las secuencias descendentes de encabezados avancen en orden numérico estricto sin omitir 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 el conteo
10027Una o más anotaciones Widget tienen una entrada /StructParent, pero el valor no se resuelve a través de StructTreeRoot/ParentTree hacia 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 (entero sin procesar / diccionario MCR) o nombra una etiqueta que no es Form
10028Una o más fuentes TrueType no simbólicas tienen un /Encoding (o el /BaseEncoding de un 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
10029Una o más fuentes TrueType simbólicas incluyen una entrada /Encoding en el diccionario de fuente. El cuarto párrafo de ISO 14289-1 §7.21.6 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 Tabla 347)
10031Una o más anotaciones Link incluyen 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 apunten a un destino estable
10033Dos o más elementos de estructura Note comparten el mismo valor de /ID. La línea de detalle informa el número de pares duplicados detectados. ISO 14289-1 §7.9 exige que los ID de Note sean únicos dentro del documento
10034Uno o más programas TrueType no simbólicos (FontDescriptor con la bandera Symbolic desactivada y flujo FontFile2 presente) incrustan una tabla cmap cuya única subtabla es la entrada simbólica (3,0) de Microsoft. 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 renderizar los puntos de código declarados por su /Encoding
10035Una o más fuentes TrueType no simbólicas declaran un /Encoding con un arreglo /Differences que contiene nombres de glifos que no son miembros de Adobe Glyph List 2.0. .notdef está en la lista blanca porque la especificación lo permite implícitamente. El tercer párrafo de ISO 14289-1 §7.21.6 exige que cada entrada Differences pertenezca a AGL
10036Uno o más anchos de una fuente TrueType simple 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 el arreglo /Widths coincida con las métricas de glifos incrustadas
10037Uno o más anchos de 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 el arreglo /W coincida con las métricas de glifos incrustadas
10038El /CharSet de un descriptor de fuente Type 1 omite uno o más nombres de glifos presentes en su programa de fuente incrustado. ISO 14289-1 §7.21.4.2 exige que la entrada enumere cada glifo incrustado
10039El /CIDSet de un descriptor de fuente CID omite uno o más CIDs que se corresponden con glifos de 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 independientemente del modo de renderizado de 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 Tabla 274
10043A uno o más diccionarios de datos de recorte multimedia les falta el arreglo obligatorio /Alt (pares de cadena de idioma + texto alternativo). ISO 14289-1 §7.18.6 convierte en obligatoria esta clave opcional de ISO 32000-1 Tabla 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 contienen más de un hijo H (encabezado genérico) directo. ISO 14289-1 §7.4.4 lo prohíbe explícitamente; divida la sección o reemplace las etiquetas H por los niveles numerados H1..H6

Observaciones

La prueba PDF/A está pensada como una autoverificación rápida antes de la entrega. Detecta las incidencias a nivel de documento que descalifican un archivo de plano (versión de PDF incorrecta, OutputIntent faltante, árbol de estructura faltante en el nivel A, cifrado, capas en PDF/A-1). No recorre cada operador del flujo de contenido ni verifica la incrustación de fuentes o las referencias de espacios de color de cada objeto pintado; esas validaciones requieren un validador PDF/A dedicado (como veraPDF). Use esta función como verificación de primera línea y como compuerta de regresión en las canalizaciones de compilación. Use CreatePreflightReport o SavePreflightReport cuando desee que la biblioteca formatee las listas de incidencias en un informe de texto reutilizable. Use CreatePreflightReportEx o SavePreflightReportEx para generar 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á generando, en lugar de sobre un archivo externoAl producir salida PDF/A con esta biblioteca, llame a

SetPDFAMode antes de agregar cualquier contenido. La protección del lado de generación dentro de SetPDFAMode bloquea las operaciones prohibidas por la parte elegida, de modo que un documento generado así normalmente pasará 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