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

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