Безопасный рендеринг цветных глифов 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 якорится на базовой линии глифа