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

InputFileNameRuta completa del archivo PDF que se validará. El archivo se abre en modo de solo lectura y no se modifica
PasswordContraseñ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
ComplianceTestEl 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)
OptionsIndicadores 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

0El archivo cumple la norma elegida
Non-zeroIdentificador 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)

00002La 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
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
00005El 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
00006El documento está cifrado. PDF/A prohíbe el cifrado en todas sus partes
00007Catalog 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
00011El Catalog no tiene entrada /MarkInfo. Solo se exige para conformidad de nivel a (PDF/A-1a, 2a, 3a): un PDF etiquetado debe declararlo
00012El 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)

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 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
10003Falta 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
10004El 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
10005Falta /ViewerPreferences o /DisplayDocTitle no es true. ISO 14289-1 §7.1 exige mostrar el título en vez del nombre de archivo
10006La 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
10007El 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"
10008El 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
10009El /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
10010El 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
10011Se 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
10012Se detectó un Reference XObject con /Ref. ISO 14289-1 §7.20 lo prohíbe porque incrusta otro PDF sin exponerlo a tecnología asistencial
10013Se 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
10014Una 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
10015Una 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
10016Uno 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
10017Falta la clave Unicode /UF en uno o más FileSpec. ISO 14289-1 §7.11 exige tanto /F como /UF
10018Falta 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
10019Uno 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
10020Una 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
10021Falta /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
10022Se 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
10023A 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
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 utiliza alguna etiqueta de encabezado, H1 debe ser la primera"
10025Se 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
10026Una 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
10027Una 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
10028Una 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
10029Una 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
10030Uno 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)
10031Una 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
10032Uno o más elementos Note carecen de /ID. ISO 14289-1 §7.9 exige un /ID único para destinos estables de referencias cruzadas
10033Dos o más elementos Note comparten /ID. El detalle indica pares duplicados; ISO 14289-1 §7.9 exige IDs únicos
10034Una 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
10035Una 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
10042Uno o más diccionarios de clip /S /MCD, opcionalmente /Type /MediaClip, carecen de /CT. ISO 14289-1 §7.18.6 lo exige
10043Uno 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
10044Uno 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