Bezpieczne renderowanie kolorowych glifów SVG

DrawRegisteredColorGlyph tłumaczy ograniczony dokument glifów OpenType SVG na ograniczony, wielokrotnego użytku PDF Form XObject, bez uruchamiania przeglądarki, silnika skryptów ani zewnętrznego runtime SVG

Profil natywny

Profil przyjmuje kontenery svg i g oraz geometrię path, rect, circle, ellipse, line, polyline i polygon

Dane ścieżek obsługują komendy absolutne i relatywne: move, line, horizontal, vertical, cubic, smooth cubic, quadratic, smooth quadratic, elliptical arc i close, przy czym segmenty kwadratowe i łuki są konwertowane do ograniczonych krzywych sześciennych PDF

Kolory jednolite i ograniczone gradienty wektorowe mogą być dziedziczone przez grupy razem z regułami wypełnienia, stylami stroke jednolitymi lub gradientowymi, nieprzezroczystością, ścieżkami clip, miękkimi maskami Alpha lub Luminosity, widocznością, transformacjami i lokalnym ponownym użyciem #id

Węzły obrazów PNG i JPEG są przyjmowane wyłącznie jako ograniczone ładunki danych Base64 i rejestrowane jako Image XObject, przy czym alpha PNG trafia do miękkiej maski

Dokumenty z tabeli SVG, zwykłe UTF-8 i kompresowane gzip, używają tej samej ograniczonej ścieżki

Bezpieczeństwo i fallback

Parser ogranicza wejście skompresowane do 8 MiB, wejście rozwinięte do 32 MiB, wygenerowane operatory PDF do 16 MiB, elementy do 4 096, zagnieżdżenie do 64, a wartości ścieżek do 100 000

Typy dokumentów, skrypty, atrybuty zdarzeń, zasoby zewnętrzne, nieobsługiwane typy mediów danych, @import, zewnętrzne referencje url(), zewnętrzne cele use i nieobsługiwane elementy kończą się błędem fail-closed przed rejestracją

Rozwijanie gradientów, lokalne ponowne użycie, maskowanie, zagnieżdżanie i wygenerowane operatory podlegają tym samym budżetom parsera; maski używają ograniczonych grup przezroczystości, odrzucają rekurencyjne referencje i dopuszczają najwyżej osiem aktywnych referencji masek

Obrazy są ograniczone do 128 węzłów, 16 384 pikseli na wymiar i łącznie 16 777 216 pikseli; pełne granice zasobów i tekstu opisuje profil Importu SVG jako Form XObject

Gdy natywna walidacja nie zwróci bezpiecznego wyniku, OnColorGlyphRasterize odbiera oryginalny zasób SVG i nadal odpowiada za szerszy zestaw funkcji SVG wymagany przez aplikację

Rozmieszczanie

Viewport SVG jest mapowany jednolitą skalą zachowującą proporcje do kwadratu żądanego rozmiaru fontu, konwertuje skierowane w dół współrzędne Y SVG na skierowane w górę Y PDF i kotwiczy Form XObject na linii bazowej glifu