Uvoz SVG Form XObjecta

THotPDF.ImportSVGFormXObject raščlanjuje SVG jednom i registrira jedan ponovno upotrebljiv PDF Form XObject, dok ga THPDFPage.DrawSVGFormXObject smješta u bilo kojoj veličini i neobavezno stvara bilješke 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

Tekst i granice bojanja

Tekst podržava punu ispunu, podebljane i kurzivne varijante, veličinu fonta, transformacije, sidrenje, neprozirnost i geometrijsko klipiranje; gradijentno bojanje teksta propada zatvoreno, a svaki čvor teksta ili tspan ostaje neovisno pozicioniran niz umjesto kompletnog motora SVG protoka teksta

Uvozi teksta dokumenta zadržavaju odabrano podebljano i iskošeno lice kroz provjere glifova osjetljive na stil i raspored rezerve, čuvaju izmjerene granice tinta i odbijaju stvarno nerazriješene glifove

UTF-8 tekst i heksadecimalne ili decimalne XML reference znakova čuvaju iste Unicode skalare na Delphiju i FPC-u, uključujući dopunske skalare prikazane UTF-16 surrogate parovima

Samostalno preopterećenje HPDFBuildSVGFormData bez graditelja teksta koristi izmjerene napredke Helvetica, Times i Courier Base 14 i odbija znakove izvan WinAnsi umjesto da ih zamijeni upitnicima; preopterećenje s THPDFSVGTextRunBuilder prihvaća ugrađene tekstualne forme i metrike koje dostavlja pozivatelj

Gradijenti zadržavaju ograničenu aproksimaciju vektorskim pojasima; transparentni resursi zahtijevaju PDF 1.4 i odbacuje ih strogi PDF/A-1 profil

Stilovi poteza

stroke-dasharray, stroke-dashoffset i stroke-miterlimit rade kroz atribute prezentacije, ugrađeni CSS, inline stilove i nasljeđivanje, uključujući grupe i samo-fragmentne instance use

Dash nizovi prihvaćaju brojeve odvojene zarezom ili praznim znakom te podržane duljine; postoci koriste normaliziranu dijagonalu viewporta, izračunatu kao sqrt((viewWidth * viewWidth + viewHeight * viewHeight) / 2)

Nizovi neparne duljine ponavljaju se da oblikuju uzorak parne duljine, svaki podput ponovno pokreće uzorak, a pozitivni ili negativni pomaci omotavaju se oko kompletnog uzorka; none i nizovi od samih nula daju pune poteze

Naslikane crtice nulte duljine zadržavaju okrugle ili kvadratne oznake kapa; obični potezi punom bojom, obrasci gradijentnih poteza, klipiranja, maske i izolirane grupe neprozirnosti dijele odabrane postavke poteza

Zadana miter granica je 4; vrijednosti SVG 2 između 0 i 1 prihvaćaju se i koriste bevel spojeve tamo gdje miter premašuje granicu, dok granice resursa gradijenata i transparentnosti zadržavaju oštre spojeve unutar odabrane granice

Nativno renderiranje koristi ograničenu dash geometriju da zadrži pomake, razlomljene duljine i nizove dulje od GDI ograničenja pera, uz adaptivno poravnjavanje krivulja i kontinuirana naslikana spajanja preko granica segmenata

Kalibriranje crtica s pathLength ostaje izvan ovog profila; oblici koji kombiniraju dash niz koji nije pun s pathLength propadaju zatvoreno umjesto da nečujno koriste nekalibrirane duljine

Semantika poteza slijedi SVG 2 model poteza unutar proračuna parsera i renderera opisanih u nastavku

Konfiguracija oblikovanja teksta

Ugrađeni SVG tekst koristi postavke ShapingFeatures, AutoShapeArabic, AutoShapeSyriac, AutoShapeNko, AutoShapeAdlam i AutoShapeHanifiRohingya dokumenta koji uvozi, zajedno s njegovim odabirima GSUB scripta i jezika te lancima rezerve fontova

Ove se postavke primjenjuju i tijekom mjerenih napredaka i tijekom generiranih tekstualnih appearancea bez izmjene konfiguracije pozivatelja; oblikovanje ostaje opt-in i zahtijeva font koji dostavlja tražene glifove i OpenType tablice

Svaki generirani tekstualni appearance prihvaća najviše 256 različitih odabira fontova za oblikovanje i 64 MiB kumulativnih sirovih podataka fontova; nepodržani podaci fonta ili prekoračena granica atomski obaraju uvoz

Neprozirnost objekata i grupa

opacity primjenjuje se jednom na kompletan naslikani rezultat svog čvora i ne nasljeđuju je potomci; fill-opacity i stroke-opacity zadržavaju svoje odvojene naslijeđene vrijednosti bojanja

Dva preklapajuća neprozirna crvena pravokutnika unutar <g opacity="0.5"> ostaju jednako poluprozirna na svom preklopu, dok dva neovisno poluprozirna pravokutnika postaju tamnija tamo gdje se preklapaju

Ugniježđene grupe kompozitiraju redoslijedom: dvije okolne neprozirnosti od 0,5 daju učinkovitih 0,25 nad neprozirnim potomkom, a eksplicitna neprozirnost potomka od 1 ne nadjačava njegovu okružujuću grupu

Korijenski SVG čvorovi, kontejneri, veze, reference fragmenata, tekst, slike i oblici koriste isti put neprozirnosti objekta; samo-fragmentne reference use čuvaju stilove i instance i referenciranog čvora

Alfa ispune i obrisa ostaje neovisna, uključujući na njihovom preklopu unutar poluprozirnog objekta, a alfa gradijentnih stopova kombinira se s relevantnom alfom bojanja prije kompozitiranja objekta

Učinci klipiranja i maski pripadaju svom čvoru umjesto da se nasljeđuju kao postavke bojanja potomaka; geometrija veza ostaje svjesna smještanja, a granice izoliranih Forma konzervativno zadržavaju transformirane poteze i kape

Uvoznik zadržava vektorske operatore, ugrađene tekstualne forme, slikovne resurse, uzorke i maske unutar izoliranih grupa; ne spljoštava cijeli SVG u bitmap

Podržano ponašanje slijedi SVG model neprozirnosti objekata i grupa; ostala ograničenja teksta, gradijenata i geometrije na ovoj stranici i dalje vrijede

Sigurnost i proračuni

Uvoznik prihvaća obični ili gzip-komprimirani SVG do 8 MiB, omeđuje prošireni ulaz na 32 MiB, kombinirane glavne, pattern, mask i group operatore na 16 MiB, čvorove na 4 096, ugniježđenje na 64 razine, CSS pravila na 256 i vrijednosti putanja na 100 000

Ugrađene slike prihvaćaju samo stroge Base64 korisne sadržaje data:image/png;base64, i data:image/jpeg;base64,, s najviše 128 slika, 16.384 piksela po dimenziji i 16.777.216 dekodiranih piksela ukupno; dimenzije se provjeravaju prije nativnog dekodiranja

Tekst je ograničen na 128 nizova i 65.536 UTF-16 jedinica po nizu, a obrasci gradijentnih poteza, maske i izolirane grupe neprozirnosti na 128 resursa svaki; rekurzivne reference maski propadaju zatvoreno

Dash nizovi sadrže najviše 64 izvorna unosa prije proširenja niza neparne duljine; pozitivni unosi moraju biti najmanje 0,000001 korisničkih jedinica, pojedinačne duljine i normalizirani ciklus ne smiju premašiti 1.000.000.000, apsolutni pomaci ne smiju premašiti 1.000.000.000, a miter granice moraju ostati između 0 i 1.000.000

Stvarni ugniježđeni učinci transparentnosti ograničeni su na osam razina kako bi odgovarali nativnom rendereru, neovisno o ograničenju dubine SVG stabla; obični ugniježđeni kontejneri bez učinaka transparentnosti ne troše taj dopušteni broj

Granice učinaka transparentnosti moraju biti konačne i svaka koordinata mora ostati unutar apsolutne vrijednosti 1.000.000.000; uvozi izvan ovog ograničenog koordinatnog profila propadaju prije registracije grupe ili maske

Neuspjeli uvozi vraćaju generirane objekte, ugrađene tekstualne forme, unose registra te stanje verzije i boja uređaja, pa pozivatelji mogu ponovno koristiti isti dokument i očuvati okolnu transakciju grafa

Skripte, rukovatelji događajima, DTD-ovi, foreignObject, nepodržani data media tipovi, JavaScript URL-ovi i vanjski URL-ovi boja ili slikovnih resursa ne uspijevaju zatvoreno

Reference na fragmente kao što su url(#gradient), url(#clip) i href="#symbol" ostaju unutar raščlanjenog dokumenta i nikad ne pokreću pristup datoteci ili mreži

Statistika

THPDFSVGImportStatistics izvještava o čvorovima, CSS pravilima, gradijentima, gradijentnim potezima, maskama, slikama, vezama, tekstualnim nizovima, izoliranim grupama neprozirnosti preko GroupCount te kombiniranim generiranim glavnim, pattern, mask i group operator bajtovima

HPDFBuildSVGFormData izlaže omeđeni raščlanjivač zasebno kroz THPDFSVGFormData i THPDFSVGLinkInfo za pozivatelje koji trebaju sadržaj Forma, intrinzične dimenzije, resurse neprozirnosti, korisne sadržaje slika, tokove uzoraka i maski, nazive tekstualnih resursa ili metapodatke veza prije registracije; Groups pruža tokove operatora izoliranih grupa i konzervativne granice Forma

Primjer

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 također: THotPDF.ImportSVGFormXObject, THPDFPage.DrawSVGFormXObject, Uvoz HTML5 paged media-a