Uvoz SVG Form XObject-a
THotPDF.ImportSVGFormXObject parsira SVG jednom i registruje jedan višekratni PDF Form XObject, dok THPDFPage.DrawSVGFormXObject postavlja ga u bilo kojoj veličini i opciono kreira anotacije veza stranice
Deklaracija
function ImportSVGFormXObject(const Input: TBytes): AnsiString; overload;
function ImportSVGFormXObject(
const Input: TBytes;
out Statistics: THPDFSVGImportStatistics
): AnsiString; overload;
procedure DrawSVGFormXObject(
const FormName: AnsiString;
X, Y, W, H: Single;
AddLinks: Boolean = True
);
Vektorski profil
- Geometrija uključuje putanje sa eliptičnim lukovima, pravougaonike, zaobljene pravougaonike, krugove, elipse, linije, polilinije, poligone, transformacije, grupe, simbole i
usereference samo na fragmente - Boja uključuje pune RGB boje, neprozirnost ispune i poteza, pravila ispune, kapice i spojeve linija, nasleđene nizove crtica i pomeraje, miter limite, linearne i radijalne vektorske trake gradijenata, gradijentne poteze podržane obojenim tiling obrascima i putanje isecanja
- Neprozirnost objekata i grupa koristi izolovane vektorske transparency Forme, pa se preklapajući potomci komponuju pre nego što se primeni njihova obuhvatajuća neprozirnost
- Maske postaju Form resursi transparency grupa sa PDF Alpha ili Luminosity soft maskama, uključujući isecanje regiona maske,
maskUnits,maskContentUnitsi ograničene ugnježđene reference maski - CSS uključuje ugrađene tip, klasa, ID i složene selektore, atribute prezentacije, inline stilove, specifičnost, redosled izvora i
!important - Uvoz dokumenta ugrađuje Unicode podskupove fontova i
ToUnicodemape kroz nativni engine za autorisanje, koristi podešene lance rezerve fontova, poravnava rezervne nizove na zajedničku alfabetičku osnovu i računa usidravanje teksta iz stvarnih napredovanja glifova - Ugrađene PNG i JPEG slike postaju višekratni Image XObject-i, čuvaju PNG alpha kao soft masku i podržavaju
preserveAspectRatio="none", centralisanimeeti centralisanislice - HTTP, HTTPS i mail veze zadržavaju se kao PDF anotacije veza svesne postavljanja bez postajanja delom višekratnog Form toka
Granice teksta i boje
Tekst podržava punu ispunu, bold i italic varijante, veličinu fonta, transformacije, usidravanje, neprozirnost i geometrijsko isecanje; gradijentska boja teksta fail-closed, a svaki tekst ili tspan čvor ostaje nezavisno pozicioniran niz umesto kompletnog SVG engine-a za raspored toka teksta
Uvoz teksta u dokumentu zadržava izabrano bold i italic lice kroz provere glifova svesne stila i raspored rezerve, čuva izmerene granice tinte i odbacuje zaista nerešene glifove
UTF-8 tekst i heksadecimalne ili decimalne XML reference znakova čuvaju iste Unicode skalare u Delphi-ju i FPC-u, uključujući dopunske skalare predstavljene UTF-16 surogat parovima
Samostalni HPDFBuildSVGFormData overload bez text buildera koristi izmerena Helvetica, Times i Courier Base 14 napredovanja i odbacuje znakove van WinAnsi umesto da zamenjuje upitnicima; overload sa THPDFSVGTextRunBuilder prihvata pozivaocem dostavljene ugrađene tekstualne forme i metrike
Gradijenti zadržavaju ograničenu aproksimaciju vektorskim trakama; transparentni resursi zahtevaju PDF 1.4 i odbacuju ih striktni PDF/A-1 profil
Stilovi poteza
stroke-dasharray, stroke-dashoffset i stroke-miterlimit rade kroz atribute prezentacije, ugrađeni CSS, inline stilove i nasleđivanje, uključujući grupe i use instance samo na fragmente
Nizovi crtica prihvataju brojeve razdvojene zapetom ili belim znakovima i podržane dužine; procenti koriste normalizovanu dijagonalu viewporta, računatu kao sqrt((viewWidth * viewWidth + viewHeight * viewHeight) / 2)
Nizovi neparne dužine se ponavljaju da obrazuju obrazac parne dužine, svaka podputanja restartuje obrazac, a pozitivni ili negativni pomeraji obmotavaju se oko kompletnog obrasca; none i svi-nula nizovi daju pune poteze
Crtice nulte dužine zadržavaju round ili square oznake kapica; obični puni potezi, obrasci gradijentnih poteza, isecanja, maske i izolovane grupe neprozirnosti dele izabrana podešavanja poteza
Podrazumevani miter limit je 4; vrednosti SVG 2 između 0 i 1 prihvataju se i koriste bevel spojeve tamo gde bi miter prekoračio limit, dok granice resursa gradijenata i transparentnosti zadržavaju oštre spojeve unutar izabranog limita
Nativno renderovanje koristi ograničenu geometriju crtica da zadrži pomeraje, razlomljene dužine i nizove duže od GDI limita olovke, uz adaptivno spljoštavanje krivih i kontinuirane nacrtane spojeve preko granica segmenata
Kalibracija crtica sa pathLength ostaje van ovog profila; oblici koji kombinuju nepuni niz crtica sa pathLength fail-closed umesto da tiho koriste nekalibrisane dužine
Semantika poteza prati SVG 2 model poteza unutar budžeta parsera i renderera opisanih u nastavku
Konfiguracija oblikovanja teksta
Ugrađeni SVG tekst koristi ShapingFeatures, AutoShapeArabic, AutoShapeSyriac, AutoShapeNko, AutoShapeAdlam i AutoShapeHanifiRohingya podešavanja dokumenta koji uvozi, zajedno sa njegovim izborima GSUB skripte i jezika i lancima rezerve fontova
Ova podešavanja primenjuju se i tokom merenih napredovanja i tokom generisanih tekstualnih izgleda bez menjanja konfiguracije pozivaoca; oblikovanje ostaje opt-in i zahteva font koji dostavlja tražene glifove i OpenType tabele
Svaki generisani tekstualni izgled prihvata najviše 256 različitih izbora fontova za oblikovanje i 64 MiB kumulativnih sirovih podataka fontova; nepodržani podaci fonta ili prekoračen limit atomski obara uvoz
Neprozirnost objekata i grupa
opacity primenjuje se jednom na kompletan nacrtani rezultat svog čvora i ne nasleđuju je potomci; fill-opacity i stroke-opacity zadržavaju svoje odvojene nasleđene vrednosti boje
Dva preklapajuća neprozirna crvena pravougaonika unutar <g opacity="0.5"> ostaju jednako poluprozirna u svom preklapanju, dok dva nezavisno poluprozirna pravougaonika postaju tamnija tamo gde se preklapaju
Ugnježđene grupe se komponuju redom: dve obuhvatajuće neprozirnosti od 0,5 daju efektivnih 0,25 preko neprozirnog potomka, a eksplicitna neprozirnost potomka od 1 ne nadjačava njegovu obuhvatajuću grupu
Korenski SVG čvorovi, kontejneri, veze, reference fragmenata, tekst, slike i oblici koriste istu putanju neprozirnosti objekata; use reference samo na fragmente čuvaju i stilove instance i referenciranog čvora
Fill i stroke alpha ostaju nezavisni, uključujući i na svom preklapanju unutar poluprozirnog objekta, a alpha gradijentskih stopova kombinuje se sa odgovarajućom alpha boje pre komponovanja objekta
Efekti clip-a i maske pripadaju svom čvoru umesto da se nasleđuju kao podešavanja boje potomaka; geometrija veza ostaje svesna postavljanja, a granice izolovanih Forma konzervativno zadržavaju transformisane poteze i kapice
Uvoznik zadržava vektorske operatore, ugrađene tekstualne Forme, resurse slika, obrasce i maske unutar izolovanih grupa; ne spljoštava ceo SVG u bitmapu
Podržano ponašanje prati SVG model neprozirnosti objekata i grupa; ostale ograničene granice teksta, gradijenata i geometrije na ovoj stranici i dalje važe
Bezbednost i budžeti
Uvoznik prihvata običan ili gzip-kompresovani SVG do 8 MiB, ograničava prošireni ulaz na 32 MiB, kombinovane glavne, obrazac, masku i grupu operatore na 16 MiB, čvorove na 4 096, ugnežđivanje na 64 nivoa, CSS pravila na 256 i vrednosti putanja na 100 000
Ugrađene slike prihvataju samo stroge Base64 data:image/png;base64, i data:image/jpeg;base64, sadržaje, sa najviše 128 slika, 16 384 piksela po dimenziji i 16 777 216 dekodovanih piksela na sve slike ukupno; dimenzije se proveravaju pre nativnog dekodovanja
Tekst je ograničen na 128 nizova i 65 536 UTF-16 jedinica po nizu, a obrasci gradijentnih poteza, maske i izolovane grupe neprozirnosti na 128 resursa svaki; rekurzivne reference maski fail-closed
Nizovi crtica sadrže najviše 64 izvorne stavke pre širenja nizova neparne dužine; pozitivne stavke moraju biti najmanje 0,000001 korisničkih jedinica, pojedinačne dužine i normalizovani ciklus ne smeju prekoračiti 1 000 000 000, apsolutni pomeraji ne smeju prekoračiti 1 000 000 000, a miter limiti moraju ostati između 0 i 1 000 000
Stvarni ugnježđeni transparency efekti ograničeni su na osam nivoa da odgovaraju nativnom rendereru, nezavisno od limita dubine SVG stabla; obični ugnježđeni kontejneri bez transparency efekata ne troše ovu dozvolu
Granice transparency efekata moraju biti konačne i svaka koordinata mora ostati unutar apsolutne vrednosti od 1 000 000 000; uvozi van ovog ograničenog koordinatnog profila padaju pre registracije grupe ili maske
Neuspeli uvozi vraćaju generisane objekte, ugrađene tekstualne Forme, unose registra i stanje verzije i boja uređaja, tako da pozivaoci mogu ponovo da koriste isti dokument i sačuvaju obuhvatajuću transakciju grafa
Skripte, rukovaoce događaja, DTD, foreignObject, nepodržani data media tipovi, JavaScript URL-ove i spoljne URL-ove boja ili resursa slika bezbedno ne uspevaju
Reference fragmenata kao što su url(#gradient), url(#clip) i href="#symbol" ostaju unutar parsiranog dokumenta i nikada ne pokreću pristup datotekama ili mreži
Statistika
THPDFSVGImportStatistics prijavljuje čvorove, CSS pravila, gradijente, gradijentne poteze, maske, slike, veze, tekstualne nizove, izolovane grupe neprozirnosti kroz GroupCount i kombinovane generisane bajtove glavnih, obrazac, maska i grupa operatora
HPDFBuildSVGFormData izlaže ograničeni parser zasebno kroz THPDFSVGFormData i THPDFSVGLinkInfo za pozivaoce kojima su potrebni Form sadržaj, intrinzične dimenzije, resursi neprozirnosti, sadržaji slika, tokovi obrazaca i maski, imena tekstualnih resursa ili metapodaci veza pre registracije; Groups pruža tokove operatora izolovanih grupa i konzervativne granice Forma
Primer
Document.BeginDoc;
FormName := Document.ImportSVGFormXObject(SVGBytes, Statistics);
if FormName = '' then
raise Exception.Create('SVG import failed');
Document.CurrentPage.DrawSVGFormXObject(
FormName,
36,
72,
240,
120,
True
);
Document.CurrentPage.DrawSVGFormXObject(
FormName,
320,
72,
120,
60,
False
);
Pogledajte i: THotPDF.ImportSVGFormXObject, THPDFPage.DrawSVGFormXObject, Uvoz HTML5 medija sa stranicama