CheckFileComplianceA
Konformität, Dokumentprüfung
Beschreibung
Das abschließende A kennzeichnet den ANSI-DLL-Einstiegspunkt (char); die ActiveX/COM-Oberfläche stellt nur die Unicode-Form bereit. Das Verhalten ist identisch mit CheckFileCompliance, und Zeichenfolgenargumente werden mit der aktuellen Codepage von SetAnsiMode interpretiert
Liest eine externe PDF-Datei und validiert sie anhand eines ausgewählten ISO-Konformitätsstandards. Der zurückgegebene Wert ist entweder null, wenn die Datei die gewählte Prüfung ohne Beanstandung besteht, oder ein von null verschiedenes Handle StringListID, das jedes erkannte Problem aufführt. Jeder Listeneintrag besteht aus einem kurzen Code, einem Doppelpunkt und einer lesbaren Meldung — exakt dasselbe Codeformat, das GetPDFUADiagnostics verwendet. Enumerieren Sie das Ergebnis mit GetStringListCount und GetStringListItem
Der PDF/A-Test deckt alle sechs Konformitätsmodi ab (PDF/A-1a, PDF/A-1b, PDF/A-2a, PDF/A-2b, PDF/A-3a, PDF/A-3b) und liest die XMP-Einträge pdfaid:part/pdfaid:conformance, um den anzuwendenden Regelsatz zu bestimmen
Der PDF/UA-1-Test (hinzugefügt in v3.56.0) prüft ein externes PDF gegen ISO 14289-1 und gibt Diagnosecodes im Bereich 10xxx aus, damit sie sich visuell von den PDF/A-Codes 00xxx unterscheiden.
Syntax
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);
Parameter
| InputFileName | Vollständiger Pfad der zu validierenden PDF-Datei. Die Datei wird schreibgeschützt geöffnet und nicht geändert |
|---|---|
| Password | Zum Öffnen der Datei verwendetes Kennwort. Für unverschlüsselte Dokumente eine leere Zeichenfolge übergeben. Beachten Sie, dass ein verschlüsseltes Dokument den PDF/A-Test mit Code 00006 unabhängig davon nicht besteht, ob das richtige Kennwort angegeben wurde — PDF/A verbietet Verschlüsselung |
| ComplianceTest | Der zu prüfende Standard. 1 — PDF/A nach ISO 19005-1/-2/-3, alle sechs Konformitätsstufen. 2 — PDF/UA-1 nach ISO 14289-1:2014, barrierefreie PDF-Datei |
| Options | Bitflags, die die Prüfung ändern. 0 — Standard: Jedes im Dokument gefundene Problem melden. 1 — Nach dem ersten Problem anhalten und sofort zurückkehren. Nützlich, wenn der Aufrufer nur ein Bestanden-/Fehlgeschlagen-Signal benötigt |
Rückgabewerte
| 0 | Die Datei entspricht dem ausgewählten Standard. |
|---|---|
| Non-zero | Ein Handle StringListID, dessen Einträge jede erkannte Nichtkonformität beschreiben. Das Handle bleibt gültig, bis das Dokument geschlossen oder ReleaseStringList aufgerufen wird. |
PDF/A-Problemcodes (ComplianceTest = 1)
| 00002 | Die PDF-Version überschreitet das von der Konformitätsstufe erlaubte Maximum (PDF/A-1 ist auf 1.4, PDF/A-2 und PDF/A-3 sind auf 1.7 begrenzt). Die Detailzeile nennt die beanstandete Version und das erlaubte Maximum |
|---|---|
| 00003 | Der Catalog enthält /OCProperties (optionale Inhalte/Ebenen), die in PDF/A-1 verboten sind. PDF/A-2 und PDF/A-3 erlauben Ebenen und lösen diese Prüfung nicht aus |
| 00005 | Das XMP-Paar pdfaid:part+pdfaid:conformance fehlt, ist fehlerhaft oder enthält einen Wert außerhalb von 1A, 1B, 2A, 2B, 3A, 3B. Die Bibliothek kann den Regelsatz nicht bestimmen; daher ist dies unabhängig von Options ein schwerwiegendes Problem |
| 00006 | Das Dokument ist verschlüsselt. PDF/A verbietet Verschlüsselung in jedem Teil |
| 00007 | Der Katalog enthält keinen Eintrag /OutputIntents. Alle PDF/A-Teile erfordern einen Output Intent, damit der Rendering-Farbraum eindeutig definiert ist |
| 00011 | Der Catalog besitzt keinen Eintrag /MarkInfo. Nur für Konformitätsstufe a (PDF/A-1a, 2a, 3a) erforderlich — Tagged PDF muss sich selbst deklarieren. |
| 00012 | Der Catalog besitzt keinen Eintrag /StructTreeRoot. Er ist nur für Konformitätsstufe a erforderlich. Ein Tagged-PDF-Dokument muss einen logischen Strukturbaum besitzen. |
PDF/UA-1-Problemcodes (ComplianceTest = 2)
| 10001 | Der XMP-Metadatenstream enthält kein pdfuaid:part oder der Wert ist nicht 1. ISO 14289-1 §5 verlangt, dass eine konforme Datei sich über diese Eigenschaft identifiziert; ISO 14289-1 §6.2 verbietet eine Konformitätsangabe ohne sie |
|---|---|
| 10002 | Der Dokumentkatalog besitzt keinen /Metadata-Stream. In diesem Stream wird die Konformitätserklärung für PDF/UA-1 aufgezeichnet; ohne ihn kann sich die Datei nicht als barrierefrei ausweisen. |
| 10003 | Das Wörterbuch /MarkInfo des Katalogs fehlt oder /Marked ist nicht true. ISO 14289-1 §7.1 verlangt, dass jede konforme Datei sich als getaggt deklariert, damit Hilfstechnologien sich auf den Strukturbaum verlassen können. |
| 10004 | Der Catalog besitzt keinen Eintrag /StructTreeRoot. Eine PDF/UA-1-Datei muss einen logischen Strukturbaum enthalten, der Lesereihenfolge und Semantik des Dokuments beschreibt. |
| 10005 | Das Wörterbuch /ViewerPreferences fehlt oder sein Eintrag /DisplayDocTitle ist nicht true. ISO 14289-1 §7.1 verlangt, dass konforme Reader den Dokumenttitel statt des Dateinamens in ihrer Fensterleiste anzeigen. |
| 10006 | Der Katalogeintrag /Lang fehlt oder ist leer. ISO 14289-1 §7.2 verlangt unter Verweis auf ISO 32000-1 §14.9.2, dass jede konforme Datei ihre natürliche Sprache deklariert, damit Screenreader die richtige Stimme und die passenden Ausspracheregeln auswählen |
| 10007 | Der XMP-Metadatenstream enthält keinen nicht leeren Dublin-Core-Eintrag dc:title. ISO 14289-1 §7.1 verlangt "einen Eintrag dc:title, der das Dokument eindeutig bezeichnet" |
| 10008 | Im Wörterbuch /MarkInfo ist /Suspects auf true gesetzt. Nach ISO 14289-1 §7.1 müssen Dateien, die PDF/UA-Konformität beanspruchen, für Suspects den Wert false aufweisen — der Wert true kennzeichnet die Tag-Struktur als bekanntermaßen fehlerhaft |
| 10009 | Die Dokumentzuordnung /RoleMap ordnet mindestens einen Standardstrukturtyp neu zu. ISO 14289-1 §7.1: Standard-Tags gemäß ISO 32000-1 §14.8.4 (P, H1..H6, Figure, Table usw.) dürfen nicht neu zugeordnet werden. Die Detailzeile nennt das erste neu zugeordnete Standard-Tag |
| 10010 | Die Datei ist verschlüsselt, aber Bit 10 des Berechtigungsschlüssels /P für die Verschlüsselung (Maske 512, "Extract for accessibility") ist nicht gesetzt. ISO 14289-1 §7.16 verlangt, dass jede verschlüsselte konforme Datei die Extraktion für Barrierefreiheit erlaubt, damit Hilfstechnologien auf den Inhalt zugreifen können |
| 10011 | Es wurde ein dynamisches XFA-Formular erkannt: Das XFA-XDP-Paket enthält <dynamicRender>required</dynamicRender>. ISO 14289-1 §7.15 verbietet dynamische XFA-Formulare in konformen Dateien; statisches XFA ist zulässig |
| 10012 | Ein Reference XObject (ein Form XObject mit einem Eintrag /Ref) wurde erkannt. ISO 14289-1 §7.20 verbietet Reference XObjects, da sie einem PDF erlauben, ein anderes PDF per Verweis einzubetten, ohne den referenzierten Inhalt für Hilfstechnologien zugänglich zu machen. |
| 10013 | Mindestens eine TrapNet-Anmerkung wurde erkannt. ISO 14289-1 §7.18.2 verbietet TrapNet ausdrücklich in konformen Dateien. Die Detailzeile meldet die Anzahl gefundener Anmerkungen |
| 10014 | Mindestens eine Seite enthält Anmerkungen, setzt jedoch nicht /Tabs /S im Seitenwörterbuch. ISO 14289-1 §7.18.3 verlangt, dass die Tabulatorreihenfolge auf solchen Seiten dem Strukturbaum folgt, signalisiert durch /Tabs /S. Die Detailzeile meldet die Anzahl der betroffenen Seiten. |
| 10015 | Bei einer oder mehreren Link-Anmerkungen fehlt eine nicht leere Alternativbeschreibung in /Contents. ISO 14289-1 §7.18.5 verlangt für jede Link-Anmerkung eine barrierefreie Beschreibung, damit Screenreader das Linkziel ansagen können. Die Detailzeile meldet die Anzahl der betroffenen Link-Anmerkungen |
| 10016 | In einem oder mehreren FileSpec-Wörterbüchern eingebetteter Dateien fehlt der Dateinamenschlüssel /F. ISO 14289-1 §7.11 verlangt, dass jede FileSpec einer eingebetteten Datei sowohl /F als auch /UF enthält |
| 10017 | Bei einem oder mehreren FileSpec-Wörterbüchern eingebetteter Dateien fehlt der Unicode-Dateinamenschlüssel /UF. ISO 14289-1 §7.11 verlangt, dass jedes FileSpec einer eingebetteten Datei sowohl /F als auch /UF enthält. |
| 10018 | Mindestens einem Konfigurationswörterbuch optionaler Inhalte fehlt eine nicht leere Textzeichenfolge /Name. ISO 14289-1 §7.10 verlangt, dass jedes OCG-Konfigurationswörterbuch (der Standardeintrag D und jedes Wörterbuch in OCProperties/Configs) einen nicht leeren /Name besitzt. |
| 10019 | Mindestens ein Konfigurationswörterbuch für optionalen Inhalt enthält den verbotenen Schlüssel /AS. ISO 14289-1 §7.10 verbietet /AS ausdrücklich in jedem OCG-Konfigurationswörterbuch, um automatische Zustandsanpassungen anhand von Verwendungsinformationen zu verhindern |
| 10020 | Eine oder mehrere vom Dokument referenzierte Nicht-Standard-14-Schriften betten ihr Schriftprogramm nicht ein (kein Eintrag FontFile, FontFile2 oder FontFile3 im FontDescriptor). ISO 14289-1 §7.21.4.1 verlangt, dass jede zum Rendern verwendete Schrift ihr Programm einbettet. Type-3-Schriften überspringen diese Prüfung, da ihre Glyphen Inline-CharProcs sind |
| 10021 | Bei einem oder mehreren CIDFontType2-Nachfolgern fehlt der Eintrag /CIDToGIDMap. ISO 14289-1 §7.21.3.2 verlangt, dass jede eingebettete Type-2-CIDFont eine /CIDToGIDMap enthält, entweder als Stream zur Zuordnung von CIDs zu Glyphenindizes oder als Name Identity |
| 10022 | Eine oder mehrere Standard-14-Schriften (Helvetica, Times, Courier, Symbol, ZapfDingbats und ihre fetten/schrägen Varianten) werden ohne eingebettetes Schriftprogramm referenziert. ISO 14289-1 §7.21.4 NOTE 5 stellt klar, dass für die 14 standardmäßigen Type-1-Schriften keine Ausnahme von der Einbettung besteht |
| 10023 | Bei einer oder mehreren Schriften fehlt eine CMap /ToUnicode, und sie entsprechen nicht der Ausnahmeliste in §7.21.7. Die Ausnahmeliste umfasst die vordefinierten MacRomanEncoding / MacExpertEncoding / WinAnsiEncoding, Type-0-Schriften, deren untergeordnete CIDFont die Adobe-Zeichensammlungen GB1 / CNS1 / Japan1 / Korea1 verwendet, sowie nicht symbolische TrueType-Schriften |
| 10024 | Das erste Überschriftselement in Dokumentreihenfolge ist nicht H1 oder das stark strukturierte H. ISO 14289-1 §7.4.2 verlangt: "Wenn Überschriften-Tags verwendet werden, muss H1 das erste sein" |
| 10025 | In der Dokumentreihenfolge wurden eine oder mehrere übersprungene Überschriftenebenen erkannt, beispielsweise H1 unmittelbar gefolgt von H3 unter Auslassung von H2. ISO 14289-1 §7.4.2 verlangt, dass absteigende Überschriftenfolgen in strikter numerischer Reihenfolge ohne Auslassung dazwischenliegender Ebenen verlaufen |
| 10026 | Mindestens einer Widget-Anmerkung fehlt ein Eintrag /StructParent. ISO 14289-1 §7.18.4 verlangt, dass Widget-Anmerkungen in einem Form-Struktur-Tag verschachtelt sind; ohne /StructParent kann das Widget nicht vom Strukturbaum aus erreicht werden. Die Detailzeile meldet die Anzahl |
| 10027 | Eine oder mehrere Widget-Anmerkungen besitzen einen Eintrag /StructParent, dessen Wert sich über StructTreeRoot/ParentTree nicht in ein Strukturelement mit /S = Form auflösen lässt. ISO 14289-1 §7.18.4 verlangt, dass jede Widget-Anmerkung in einem Struktur-Tag Form verschachtelt ist. Mögliche Ursachen: Der Eintrag /ParentTree fehlt vollständig, verweist auf ein Nicht-StructElem, etwa eine rohe Ganzzahl oder ein MCR-Wörterbuch, oder bezeichnet einen anderen Tag als Form. |
| 10028 | Eine oder mehrere nicht symbolische TrueType-Schriften verfügen über /Encoding oder das /BaseEncoding eines Encoding-Wörterbuch's, das weder MacRomanEncoding noch WinAnsiEncoding ist. ISO 14289-1 §7.21.6 beschränkt die Codierung nicht symbolischer TrueType-Schriften auf diese beiden vordefinierten Namen |
| 10029 | Eine oder mehrere symbolische TrueType-Schriftarten besitzen einen Eintrag /Encoding im Schriftwörterbuch. Der vierte Absatz von ISO 14289-1 §7.21.6 verbietet dies — die Kodierung symbolischer TrueType-Schriftarten darf nur über die 'cmap'-Tabelle des eingebetteten Schriftprogramms ausgedrückt werden. |
| 10030 | Einem oder mehreren L-Strukturelementen (Liste) fehlt das Attribut ListNumbering. ISO 14289-1 §7.6 verlangt, dass jedes L-Tag seinen Nummerierungsstil über dieses Attribut deklariert. Gültige Werte sind None, Disc, Circle, Square, Decimal, UpperRoman, LowerRoman, UpperAlpha und LowerAlpha (ISO 32000-1, Tabelle 347). |
| 10031 | Mindestens eine Linkanmerkung enthält ein URI-Aktionswörterbuch, dessen Eintrag /IsMap den Wert true hat. ISO 14289-1 §7.18.5 verbietet /IsMap = true für eine URI-Aktion, sofern nicht an anderer Stelle im Inhalt eine gleichwertige Funktion ohne Schlüssel /IsMap bereitgestellt wird. Autoren mit einem berechtigten IsMap-Anwendungsfall sollten diese Diagnose selbst unterdrücken |
| 10032 | Einem oder mehreren Note-Strukturelementen fehlt der Eintrag /ID. ISO 14289-1 §7.9 verlangt, dass jedes Note-Tag eine eindeutige /ID deklariert, damit Querverweise auf einem stabilen Ziel landen können. |
| 10033 | Zwei oder mehr Note-Strukturelemente verwenden denselben Wert /ID. Die Detailzeile meldet die Anzahl der erkannten Duplikatpaare. ISO 14289-1 §7.9 verlangt, dass Note-IDs innerhalb des Dokuments eindeutig sind. |
| 10034 | Mindestens ein nicht symbolisches TrueType-Programm (FontDescriptor mit gelöschtem Flag Symbolic, FontFile2-Stream vorhanden) bettet eine cmap-Tabelle ein, deren einzige Untertabelle der symbolische Microsoft-Eintrag (3,0) ist. ISO 14289-1 §7.21.6 erster Absatz verlangt mindestens eine nicht symbolische cmap-Untertabelle, damit das Programm die von seiner /Encoding deklarierten Codepoints rendern kann. |
| 10035 | Eine oder mehrere nicht symbolische TrueType-Schriftarten deklarieren ein /Encoding mit einem /Differences-Array, das Glyphennamen enthält, die keine Mitglieder der Adobe Glyph List 2.0 sind. .notdef ist zugelassen, da die Spezifikation es implizit erlaubt. Der dritte Absatz von ISO 14289-1 §7.21.6 verlangt, dass jeder Differences-Eintrag in AGL enthalten ist. |
| 10042 | Einem oder mehreren Media-Clip-Datenwörterbüchern (erkennbar an /S /MCD, optional /Type /MediaClip) fehlt der erforderliche Inhaltstypeintrag /CT. ISO 14289-1 §7.18.6 erhebt diesen in ISO 32000-1 Tabelle 274 optionalen Schlüssel zur Pflicht. |
| 10043 | In einem oder mehreren Mediaclip-Datenwörterbüchern fehlt das erforderliche Array /Alt (Paare aus Sprachzeichenfolge und Alternativtext). ISO 14289-1 §7.18.6 erklärt diesen in ISO 32000-1, Tabelle 274, optionalen Schlüssel für obligatorisch, damit Hilfstechnologien eine Beschreibung eingebetteter Multimedia-Inhalte ausgeben können |
| 10044 | Ein oder mehrere Strukturbaumknoten enthalten mehr als ein direktes untergeordnetes H-Element (allgemeine Überschrift). ISO 14289-1 §7.4.4 verbietet dies ausdrücklich — teilen Sie den Abschnitt oder ersetzen Sie die H-Tags durch nummerierte Ebenen H1..H6. |
Anmerkungen
Der PDF/A-Test ist als schnelle Selbstprüfung vor der Auslieferung gedacht. Er erkennt Probleme auf Dokumentebene, die eine Datei unmittelbar disqualifizieren (falsche PDF-Version, fehlender OutputIntent, fehlender Strukturbaum auf A-Ebene, Verschlüsselung, Ebenen in PDF/A-1). Er durchläuft nicht jeden Inhaltsstromoperator und prüft auch nicht für jedes gezeichnete Objekt die Einbettung von Schriften oder Farbraumreferenzen — diese Prüfungen erfordern einen speziellen PDF/A-Validator wie veraPDF. Verwenden Sie diese Funktion als erste Prüfung und als Regressionstor in Build-Pipelines. Verwenden Sie CreatePreflightReport oder SavePreflightReport, wenn die Bibliothek die Problemlisten als wiederverwendbaren Textbericht formatieren soll. Verwenden Sie CreatePreflightReportEx oder SavePreflightReportEx für Berichtsausgaben als Text, JSON, HTML oder CSV, oder lesen Sie unter Preflight-Berichte den vollständigen Berichtsablauf nach
Die zugehörige API GetPDFUADiagnostics führt entsprechende Prüfungen für PDF/UA-1 (ISO 14289-1) am aktuell im Speicher erstellten Dokument statt an einer externen Datei durch
Rufen Sie beim Erzeugen einer PDF/A-Ausgabe mit dieser Bibliothek SetPDFAMode auf, bevor Sie Inhalte hinzufügen. Die erzeugungsseitige Schutzprüfung in SetPDFAMode blockiert die vom ausgewählten Teil verbotenen Vorgänge, sodass ein auf diese Weise erstelltes Dokument CheckFileCompliance normalerweise automatisch besteht
Beispiel
// 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;Siehe auch
Preflight Reports, CreatePreflightReport, CreatePreflightReportEx, SavePreflightReport, SavePreflightReportEx, ComparePreflightReports, SetPDFAMode, GetPDFUADiagnostics, GetStringListCount, GetStringListItem, SetPDFUAMode