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

InputFileNameRuta completa del archivo PDF que se 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 PDF/A (código 00006) aunque se proporcione la contraseña correcta — PDF/A prohíbe el cifrado
ComplianceTestEl 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)
OptionsBanderas 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

0El archivo cumple con el estándar elegido
Non-zeroUn 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)

00002La 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
00003El 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
00005Falta 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
00006El documento está cifrado. PDF/A prohíbe el cifrado en todas sus partes
00007El 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
00011El 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
00012El 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)

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 informar conformidad sin ella
10002El 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
10003Falta 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
10004El 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
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 el marco de su ventana en lugar del nombre de archivo
10006Falta 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
10007El 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"
10008El 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
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 se deben reasignar. La línea de detalles nombra la primera etiqueta estándar que se reasignó
10010El 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
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; se permite XFA estático
10012Se 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
10013Se 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
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 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
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 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
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 cada FileSpec de archivo incrustado incluya tanto /F como /UF
10017A 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
10018Uno 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
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 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
10021A 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)
10022Se 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
10023A 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
10024El 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"
10025Se 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
10026Una 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
10027Una 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
10028Una 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
10029Una 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
10030A 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)
10031Una 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
10032Uno 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
10033Dos 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
10034Uno 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
10035Una 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
10042Uno 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
10043Uno 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
10044Uno 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