Безопасный рендеринг цветных глифов SVG

DrawRegisteredColorGlyph переводит ограниченный документ глифов OpenType SVG в ограниченный переиспользуемый PDF Form XObject, не запуская браузер, script engine или внешний SVG runtime

Нативный профиль

Профиль принимает контейнеры svg и g, а также геометрию path, rect, circle, ellipse, line, polyline и polygon

Данные path поддерживают абсолютные и относительные команды move, line, horizontal, vertical, cubic, smooth cubic, quadratic, smooth quadratic, elliptical arc и close, при этом сегменты quadratic и arc конвертируются в ограниченные кубические кривые PDF

Сплошные цвета и ограниченные векторные градиенты могут наследоваться через группы вместе с fill rules, стилями stroke — сплошными или градиентными, opacity, clip path, soft mask Alpha или Luminosity, видимостью, трансформациями и локальным переиспользованием #id

Узлы изображений PNG и JPEG принимаются только как ограниченные Base64 data payload и регистрируются как Image XObject, при этом alpha PNG сохраняется в soft mask

Документы таблицы SVG в обычном UTF-8 и с gzip-сжатием идут одним и тем же ограниченным путём

Безопасность и fallback

Парсер ограничивает сжатый ввод 8 MiB, развёрнутый ввод 32 MiB, сгенерированные PDF-операторы 16 MiB, элементы — 4,096, вложенность — 64, а значения path — 100,000

Типы документов, скрипты, event-атрибуты, внешние ресурсы, неподдерживаемые data media types, @import, внешние ссылки url(), внешние цели use и неподдерживаемые элементы жёстко отклоняются до регистрации

Развёртывание градиентов, локальное переиспользование, masking, вложенность и сгенерированные операторы подчиняются тем же бюджетам парсера; mask используют ограниченные группы прозрачности, отклоняют рекурсивные ссылки и допускают не более восьми активных ссылок mask

Изображения ограничены 128 узлами, 16,384 пикселями по измерению и 16,777,216 пикселями суммарно; полные границы ресурсов и текста смотрите в профиле импорта SVG Form XObject

Если нативная валидация не даёт безопасного результата, OnColorGlyphRasterize получает исходный SVG-ассет и дальше сам отвечает за любой более широкий набор возможностей SVG, нужный приложению

Размещение

Viewport SVG отображается в квадрат размера запрошенного font-size с равномерным сохранением пропорций, направленная вниз Y-координата SVG переводится в направленную вверх Y-координату PDF, а Form XObject якорится на базовой линии глифа