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
- Geometrija uključuje putanje s eliptičnim lukovima, pravokutnike, zaobljene pravokutnike, krugove, elipse, crte, polilinije, poligone, transformacije, grupe, simbole i samo-fragmentne reference
use - Boje uključuju čvrste RGB boje, neprozirnost ispune i obrisa, pravila ispune, kape i spojeve linija, naslijeđene dash nizove i pomake, miter granice, linearno i radijalno gradijentne vektorske pojaseve, gradijentne poteze poduprte obojenim tiling uzorcima i putanje klipiranja
- Neprozirnost objekata i grupa koristi izolirane vektorske transparency Forms, pa se preklapajući potomci kompozitiraju prije nego što se primijeni njihova okolna neprozirnost
- Maske postaju Form resursi transparency grupa s PDF Alpha ili Luminosity mekim maskama, uključujući klipiranje regije maske,
maskUnits,maskContentUnitsi ograničene ugniježđene reference maski - CSS uključuje ugrađene tipke, klase, ID-ove i složene selektore, atribute prezentacije, ugrađene stilove, specifičnost, izvorni redoslijed i
!important - Uvozi dokumenta ugrađuju Unicode podskupove fontova i
ToUnicodemape kroz nativni autoring motor, koriste konfigurirane lance rezerve fontova, poravnavaju rezervne nizove na zajedničku alfabetičku osnovnu liniju i računaju sidrenje teksta iz stvarnih napredaka glifova - Ugrađene PNG i JPEG slike postaju višekratno upotrebljivi Image XObjecti, čuvaju PNG alfu kao meku masku i podržavaju
preserveAspectRatio="none", centriranimeeti centriranislice - HTTP, HTTPS i veze pošte zadržavaju se kao bilješke veza PDF-a svjesne smještanja bez da postanu dio ponovno upotrebljivog Form toka
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