GetPDFUADiagnosticsA

PDF/UA & Accessibility

Описание

Завершающая A обозначает точку входа DLL типа ANSI (char); интерфейс ActiveX/COM предоставляет только форму Unicode. Поведение идентично GetPDFUADiagnostics, а строковые аргументы интерпретируются с использованием текущей кодовой страницы SetAnsiMode

Возвращает список возможных нарушений соответствия PDF/UA-1 (ISO 14289-1), обнаруженных в текущем документе и разделённых переводами строк. Каждая строка содержит один код нарушения, затем двоеточие и понятное человеку описание. Если нарушений не найдено, возвращает пустую строку.

Синтаксис

Delphi

Function DLGetPDFUADiagnosticsA(InstanceID: Integer): PAnsiChar;

DLL

const char * DLGetPDFUADiagnosticsA(int InstanceID);

Issue codes

PDF-VERSION-LOWВерсия PDF документа (по заголовку файла) ниже 1.7, а PDF/UA-1 определён относительно ISO 32000-1:2008 (PDF 1.7). Вызовите SetPDFUAMode, чтобы автоматически поднять версию до 1.7
MARKED-FALSEMarkInfo/Marked не равен true; документ не является тегированным PDF
LANG-MISSINGThe document catalog /Lang entry is absent or empty. ISO 14289-1 §7.3 requires a natural language declaration.
DISPLAYDOCTITLE-FALSEViewerPreferences/DisplayDocTitle is not true. Required by ISO 14289-1 §7.1 so the document title is shown in the title bar.
DOCINFO-TITLE-MISSINGЗапись /Title словаря информации документа отсутствует или пуста. PDF/UA-1 требует заголовок документа, чтобы ассистивные технологии могли озвучить его при открытии. Проверка дополняет DISPLAYDOCTITLE-FALSE: та удостоверяет, что заголовок показан в просмотрщике, эта — что само значение заголовка существует. Задайте его вызовом SetInformation с ключом Title
XMP-NO-PDFUAIDThe XMP metadata stream does not contain a pdfuaid:part entry. Required by ISO 14289-1 §7.2.
ANNOT-NO-CONTENTS:NN non-exempt annotations (excluding Widget, PrinterMark, and TrapNet subtypes) are missing a Contents entry. Required by ISO 14289-1 §7.18.1.
EMBED-NO-AFR:NN embedded files are missing an AFRelationship entry in their file specification dictionary. Required by ISO 14289-1 §7.11.
FIGURE-NO-ALT:NN Figure or Formula structure elements have no Alt text value. ISO 14289-1 §7.5 and ISO 32000-1 §14.9.3 require alternative descriptions for both graphical figures and mathematical formulas.
HEADING-LEVEL-SKIP:NN heading level jumps were detected in document order (e.g. an H1 immediately followed by an H3, skipping H2). ISO 14289-1 §7.1 and WCAG 2.x Success Criterion 1.3.1 require headings to nest without gaps.
STRUCT-UNCLOSED:NN элементов структуры остались открытыми, потому что EndTag вызывался не то число раз; в корне дерева структуры их не будет
TABLE-TH-NO-SCOPE:NN TH (table header cell) structure elements have no Scope attribute. ISO 32000-1 §14.8.4.3.4 Table 337 defines Scope (Row, Column, or Both) as the attribute that describes which data cells each header cell applies to. Without it, assistive technology cannot reliably associate headers with data cells in complex or multi-header tables. Call SetStructElemScope (or AddTagAttribute with Owner='Table', Name='Scope') immediately after tagging each TH element.
FORM-NO-TOOLTIP:NN interactive form fields (Widget annotations) are missing a TU (tooltip / accessible name) entry. ISO 14289-1 §7.18.4 requires all interactive form fields to carry a TU entry so assistive technology can announce the field's purpose to the user. /TU is the accessible name that screen readers read aloud; it is distinct from /T (the partial field name used programmatically). Set the TU value when creating or loading form fields.
LIST-STRUCT:NN LI or LBody structure elements appear outside their required parent. ISO 32000-1 §14.8.4.4 requires LI to be a direct child of L (list), and LBody to be a direct child of LI (list item). Malformed list nesting prevents assistive technology from navigating lists correctly. Check the BeginTag / EndTag call sequence for all list-related elements.
ROLEMAP-UNMAPPED:NN custom structure element types appear in the document but have no entry in the /RoleMap dictionary. ISO 14289-1 §7.1 and ISO 32000-1 §14.7.3 require that every non-standard structure type be mapped to a standard PDF type so assistive technology can determine how to handle the element. Call AddRoleMap for each custom type before saving. The issue description lists the unmapped type names.
SUSPECTS-TRUEMarkInfo/Suspects is set to true. ISO 14289-1 §7.1 requires files claiming PDF/UA conformance to have a Suspects value of false. A true value marks the tagging as known to contain errors. Call SetMarkInfo after the document is fully tagged to reset Suspects to false.
ROLEMAP-STANDARD-REMAP:NN standard structure types appear as the "custom" key in /RoleMap and would be remapped on save. ISO 14289-1 §7.1 forbids remapping standard tags defined in ISO 32000-1 §14.8.4 (P, H1..H6, Figure, Table, etc.). The detail line lists the offending standard tag names. Remove the affected AddRoleMap calls.
DC-TITLE-MISSINGВ потоке метаданных XMP отсутствует или пуста запись Dublin Core dc:title. ISO 14289-1 §7.1 требует, чтобы поток Metadata содержал запись dc:title, однозначно идентифицирующую документ. Эта проверка выполняется отдельно от DOCINFO-TITLE-MISSING, который проверяет только запись /Info /Title. Вызовите SetPDFUAMode, чтобы скопировать заголовок /Info в пакет XMP.
TRAPNET-ANNOT:NN TrapNet annotations were found on document pages. ISO 14289-1 §7.18.2 explicitly forbids TrapNet in PDF/UA-1 conforming files. Remove the offending annotations before saving.
ANNOT-PAGE-NO-TABS-S:NN pages carry one or more annotations but their page dictionary does not set /Tabs /S. ISO 14289-1 §7.18.3 requires tab order on such pages to follow the structure tree, signalled by /Tabs /S. Set /Tabs /S in the page dictionary for every page that contains annotations.
ENCRYPT-NO-ACCESSДокумент зашифрован, PDFUAMode активен, но бит 10 ключа разрешений шифрования /P (маска $200, извлечение для доступности) сброшен. ISO 14289-1 §7.16 требует, чтобы каждый зашифрованный соответствующий файл разрешал извлечение для доступности. Если PDFUAMode установлен до вызова Encrypt, бит включается автоматически; при обратном порядке вызовов словарь шифрования уже записан со старым значением /P — вызовите Encrypt ещё раз, чтобы словарь был записан заново
FIRST-HEADING-NOT-H1Первый по порядку документа заголовочный элемент — не H1 (в сильно структурированных документах тег H тоже считается уровнем 1). ISO 14289-1 §7.4.2 требует, чтобы первый заголовочный тег не-сильно-структурированного документа был H1; строка с деталями называет проблемный уровень
WIDGET-NO-STRUCTPARENT:NN Widget-аннотаций без записи /StructParent. ISO 14289-1 §7.18.4 требует, чтобы Widget-аннотации были вложены в структурный тег Form; без /StructParent Widget вообще недостижим из дерева структуры. Строка деталей сообщает количество. Проверка частичная — полная верификация, что разрешённый родитель имеет /S = Form, пока не реализована
LIST-NO-NUMBERING:NN элементов структуры L (list) без атрибута ListNumbering. ISO 14289-1 §7.6 требует, чтобы каждый тег L объявлял стиль нумерации этим атрибутом (допустимые значения по ISO 32000-1 Table 347: None, Disc, Circle, Square, Decimal, UpperRoman, LowerRoman, UpperAlpha, LowerAlpha). Вызывайте SetStructElemListNumbering после открытия каждого тега L
MULTIPLE-H-CHILDREN:NN structure tree nodes contain more than one direct H (generic heading) child. ISO 14289-1 §7.4.4 forbids that — split the parent section or replace the H tags with numbered H1..H6 sequences.

Возвращаемое значение

A newline-separated string of issue descriptions, or an empty string if no compliance issues are detected.

Примечания

Диагностический инструмент для разработчиков: проверяет текущее состояние документа в памяти и сообщает о проблемах, способных привести к провалу валидации PDF/UA-1. Вызывайте после загрузки или сборки документа, чтобы найти проблемы до сохранения

Когда активен SetPDFUAMode и документ сохраняется, часть проблем (ANNOT-NO-CONTENTS, EMBED-NO-AFR) автоматически исправляется при сохранении. GetPDFUADiagnostics сообщает состояние до сохранения; проблемы, которые будут исправлены при сохранении, всё равно перечисляются, если присутствуют

Функция не изменяет документ

Пример

var
  Diag: WideString;
begin
  PDFlib.SetPDFUAMode('en-US');
  // ... build document
  Diag := PDFlib.GetPDFUADiagnostics;
  if Diag <> '' then
    ShowMessage('PDF/UA issues found:'#10 + Diag);
end;

См. также

SetPDFUAMode, SetDocumentLanguage, SetEmbeddedFileAFRelationship