Доступная среда для людей с ограниченными возможностями — не просто тренд, а законодательное требование во многих странах. В США действует Закон об американцах с ограниченными возможностями (ADA), в Евросоюзе — Директива о доступности (EN 301 549). Оба документа обязывают государственные учреждения и частные компании предоставлять информацию в форматах, пригодных для восприятия вспомогательными технологиями.
Обычный PDF без учёта доступности — это лишь набор визуальных элементов на странице. Скринридеры (программы, которые озвучивают содержимое экрана и используются людьми с нарушениями зрения) не понимают, где заголовок, где таблица, а где декоративная рамка. Чтобы решить эту проблему, Международная организация по стандартизации (ISO) разработала стандарт PDF/UA (PDF for Universal Accessibility), формально — ISO 14289-1. Это первый полностью доступный стандарт, опубликованный ISO — сам распространяемый файл стандарта соответствует PDF/UA.
Поддержка PDF/UA-1 реализована в генераторе отчётов FastReport .NET с версией 2027.1, что позволяет разработчикам создавать доступные документы без привлечения сторонних инструментов.
Визуально PDF/UA-документ неотличим от обычного PDF: те же страницы, шрифты, цвета и картинки. Отличие скрыто внутри файла — в нём есть «каркас»: структура, которая сообщает скринридеру, где заголовок, где таблица и в каких ячейках что находится, где изображение и что оно изображает, где начинается и заканчивается ссылка и в каком порядке документ нужно читать. Декоративные элементы — линии, рамки, фон страницы — помечаются отдельно, чтобы скринридер их пропускал, а не озвучивал.
Для экспорта отчёта в PDF используется кнопка «Сохранить» на панели инструментов дизайнера: в выпадающем меню выбирается пункт «PDF формат…».
В диалоге экспорта задаются три параметра:
На этом настройка экспорта завершена: сформированный файл уже соответствует стандарту PDF/UA-1.
При экспорте в PDF/UA структура документа формируется автоматически из содержимого отчёта:
| Элемент отчёта | Результат в документе |
| Текстовый объект | Абзац |
| Таблица | Полная структура таблицы: строки, заголовки и данные; первая строка и первый столбец считаются заголовками |
| Картинка | Иллюстрация (Figure) с альтернативным текстом. Если текст не задан, используется имя объекта (не рекомендуется) |
| Гиперссылка | Ссылка: скринридер озвучивает текст ссылки, а не URL |
| Поле цифровой подписи | Элемент формы |
| Линии и фигуры без роли, пустые текстовые объекты, фон страницы, водяной знак, рамки ячеек | Декоративный элемент (Artifact) —скринридер его пропускает |
Такой подход покрывает большинство отчётов без какого-либо дополнительного оформления: достаточно задать PDF/UA в диалоге экспорта.
Автоматическая структура — разумный минимум, но разработчик отчёта может уточнить её. В свойства объектов отчёта добавлена новая категория PDF/UA с двумя свойствами:
| Значение | Назначение |
| H1…H6 | Заголовки документа. Скринридер строит по ним оглавление и позволяет читателю перемещаться по документу |
| P | Обычный абзац (по умолчанию для текстов) |
| Figure | Значимая картинка или диаграмма |
| Table, TR, TD, TH | Структура таблицы |
| Form | Поле формы |
| Link | Ссылка |
SemanticRole = "H1".AltText = "Логотип компании".SemanticRole = "Figure" и AltText с описанием; без роли фигура считается декором и не озвучивается.Важно: если роль задана явно, её пригодность для данного типа объекта не проверяется. Ответственность за корректность назначения ролей полностью переходит к разработчику отчёта.
Тот же результат можно получить программно. В примере ниже заданы стандарт PDF/UA, заголовок и язык документа, роли и альтернативный текст для двух объектов:
// Загрузить отчёт Report report = new Report(); report.Load(@"C:\Reports\Invoice.frx"); // Роли и альтернативный текст ((TextObject)report.FindObject("ReportTitle")).SemanticRole = "H1"; ((PictureObject)report.FindObject("Logo")).AltText = "Логотип компании"; // Экспорт в PDF/UA PDFExport pdfExport = new PDFExport(); pdfExport.PdfCompliance = PDFExport.PdfStandard.Pdf_UA; pdfExport.Title = "Title"; pdfExport.DocumentLanguage = "de-DE"; report.Prepare(); report.Export(pdfExport, "Invoice.pdf");
Любой PDF/UA-документ можно проверить бесплатными валидаторами:
Поддержка PDF/UA-1 в FastReport .NET позволяет формировать доступные документы без привлечения сторонних средств. Разметка структуры выполняется автоматически, и по умолчанию разработчику отчёта не нужно ничего делать, кроме как задать альтернативный текст для значимых изображений и выбрать стандарт PDF/UA в настройках экспорта. При необходимости теги можно дополнительно уточнить через свойства объектов.