SVG-Form-XObject-import

THotPDF.ImportSVGFormXObject parset SVG eenmaal en registreert één herbruikbare PDF-Form-XObject, terwijl THPDFPage.DrawSVGFormXObject deze op elke grootte plaatst en optioneel pagina-koppelingsannotaties maakt

Declaratie

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
);

Vector-profiel

Tekst- en verfgrenzen

Tekst ondersteunt effen vulling, vet- en cursiefvarianten, lettergrootte, transformaties, ankers, opaciteit en geometrische clipping; gradienttekstverf faalt gesloten, en elke tekst- of tspan-node blijft een onafhankelijk gepositioneerde reeks in plaats van een volledige SVG-tekstflow-layout-engine

Tekstimports van documenten behouden het gekozen vette of cursieve font door stijlbewuste glyphcontroles en fallback-layout, bewaren gemeten inkgrenzen en weigeren echt onopgeloste glyphs

UTF-8-tekst en hexadecimale of decimale XML-tekensverwijzingen behouden dezelfde Unicode-scalars op Delphi en FPC, inclusief aanvullende scalars die door UTF-16-surroogparen worden weergegeven

De zelfstandige HPDFBuildSVGFormData-overload zonder tekstbouwer gebruikt gemeten Helvetica-, Times- en Courier-Base-14-advances en weigert tekens buiten WinAnsi in plaats van vraagtekens te substitueren; de overload met THPDFSVGTextRunBuilder accepteert door de aanroeper geleverde ingesloten tekstvormen en metrics

Gradients behouden de begrensde vectorbandbenadering; transparante resources vereisen PDF 1.4 en worden door het strikte PDF/A-1-profiel geweigerd

Lijnstijlen

stroke-dasharray, stroke-dashoffset en stroke-miterlimit werken via presentatiekenmerken, ingesloten CSS, inline-stijlen en overerving, inclusief groepen en fragment-alleen-use-instanties

Dash-arrays accepteren door komma's of witruimte gescheiden getallen en ondersteunde lengtes; percentages gebruiken de genormaliseerde viewport-diagonaal, berekend als sqrt((viewWidth * viewWidth + viewHeight * viewHeight) / 2)

Arrays met oneven lengte herhalen zich tot een patroon met even lengte, elk subpad start het patroon opnieuw en positieve of negatieve offsets lopen rond over het volledige patroon; none en all-zero-arrays leveren effen lijnstreken op

Nul-lange geschilderde streepjes behouden ronde of vierkante kapmerken; gewone effen lijnstreken, gradientlijnstreekpatronen, clips, maskers en geïsoleerde opaciteitsgroepen delen de gekozen lijnstreekinstellingen

De standaard miter-limiet is 4; SVG 2-waarden tussen 0 en 1 worden geaccepteerd en gebruiken afgeschuinde verbindingen waar een miter de limiet zou overschrijden, terwijl gradient- en transparantie-resourcegrenzen scherpe verbindingen behouden binnen de gekozen limiet

Native rendering gebruikt begrensde dash-geometrie om offsets, fractionele lengtes en arrays langer dan de GDI-penlimiet te behouden, met adaptieve curve-flattening en doorlopende geschilderde verbindingen over segmentgrenzen heen

Dashkalibratie met pathLength blijft buiten dit profiel; vormen die een niet-effen dash-array combineren met pathLength falen gesloten in plaats van stilletjos ongekalibreerde lengtes te gebruiken

De lijnstreeksemantiek volgt het SVG 2-lijnstreekmodel binnen de hieronder beschreven parser- en rendererbudgetten

Tekst-shapingconfiguratie

Ingesloten SVG-tekst gebruikt de instellingen ShapingFeatures, AutoShapeArabic, AutoShapeSyriac, AutoShapeNko, AutoShapeAdlam en AutoShapeHanifiRohingya van het importerende document, samen met diens GSUB-script- en taalselecties en font-fallbackketens

Deze instellingen gelden tijdens zowel gemeten advances als gegenereerde tekstappearances zonder de configuratie van de aanroeper te wijzigen; shaping blijft opt-in en vereist een font dat de gevraagde glyphs en OpenType-tabellen levert

Elke gegenereerde tekstappearance accepteert maximaal 256 verschillende shaping-fontselecties en 64 MiB cumulatieve ruwe fontdata; niet-ondersteunde fontdata of een overschreden limiet laat de import atomisch falen

Object- en groepsopaciteit

opacity is eenmaal van toepassing op het volledige geschilderde resultaat van zijn node en wordt niet geërfd door afstammelingen; fill-opacity en stroke-opacity behouden hun afzonderlijke overgeërfde verfwaarden

Twee overlappende ondoorzichtig rode rechthoeken binnen <g opacity="0.5"> blijven in hun overlapping even doorschijnend, terwijl twee onafhankelijk doorschijnende rechthoeken donkerder worden waar ze overlappen

Geneste groepen compositeren in volgorde: twee omhullende opaciteiten van 0,5 geven een effectieve 0,25 bovenop een ondoorzichtig afstammeling, en de expliciete opaciteit 1 van een afstammeling overschrijft zijn omhullende groep niet

Hoofd-SVG-nodes, containers, koppelingen, fragmentreferenties, tekst, afbeeldingen en vormen gebruiken hetzelfde objectopaciteitspad; fragment-alleen-use-referenties behouden zowel de stijlen van de instantie als van de gerefereerde node

Vul- en lijn-alfa blijven onafhankelijk, ook op hun overlapping binnen een doorschijnend object, en gradientstop-alfa combineert met de relevante verfalfa vóór objectcompositie

Clip- en maskereffecten horen bij hun node in plaats van als verfinstellingen van afstammelingen te worden geërfd; koppelingsgeometrie blijft plaatsingsbewust en geïsoleerde Form-grenzen behouden conservatief getransformeerde lijnstreken en kappen

De importer behoudt vectoroperators, ingesloten tekst-Forms, afbeeldingsresources, patronen en maskers binnen geïsoleerde groepen; hij zet niet de volledige SVG om naar een bitmap

Het ondersteunde gedrag volgt het SVG-object- en groepsopaciteitsmodel; de overige begrensde tekst-, gradient- en geometriebeperkingen op deze pagina gelden nog steeds

Veiligheid en budgetten

De importer accepteert gewone of gzip-gecomprimeerde SVG tot 8 MiB, begrenst uitgebreide invoer op 32 MiB, gecombineerde hoofd-, patroon-, mask- en groepsoperators op 16 MiB, knooppunten op 4.096, nesting op 64 niveaus, CSS-regels op 256 en padwaarden op 100.000

Ingesloten afbeeldingen accepteren alleen strikte Base64-payloads data:image/png;base64, en data:image/jpeg;base64,, met maximaal 128 afbeeldingen, 16.384 pixels per dimensie en 16.777.216 gedecodeerde pixels over alle afbeeldingen; dimensies worden vóór native decodering gecontroleerd

Tekst is begrensd op 128 reeksen en 65.536 UTF-16-eenheden per reeks, en gradientlijnstreekpatronen, maskers en geïsoleerde opaciteitsgroepen op elk 128 resources; recursieve maskverwijzingen falen gesloten

Dash-arrays bevatten maximaal 64 bronvermeldingen vóór oneven-array-uitbreiding; positieve vermeldingen zijn minstens 0,000001 user units, afzonderlijke lengtes en de genormaliseerde cyclus mogen niet boven 1.000.000.000 uitkomen, absolute offsets niet boven 1.000.000.000, en miter-limieten moeten tussen 0 en 1.000.000 blijven

Echt geneste transparantie-effecten zijn beperkt tot acht niveaus om de native renderer te volgen, onafhankelijk van de SVG-boomdieptelimiet; gewone geneste containers zonder transparantie-effecten verbruiken deze toelage niet

Grenzen van transparantie-effecten moeten eindig zijn en elke coördinaat moet binnen een absolute waarde van 1.000.000.000 blijven; imports buiten dit begrensde coördinatenprofiel falen vóór groeps- of maskregistratie

Mislukte imports rollen gegenereerde objecten, ingesloten tekst-Forms, registry-items en versie- en device-kleurstatus terug, zodat aanroepers hetzelfde document kunnen hergebruiken en een omhullende grafiektransactie kunnen behouden

Scripts, gebeurtenishandlers, DTD's, foreignObject, niet-ondersteunde data-mediatypes, JavaScript-URL's en externe verf- of afbeeldingsresource-URL's falen gesloten

Fragmentreferenties zoals url(#gradient), url(#clip) en href="#symbol" blijven binnen het geparste document en veroorzaken nooit bestands- of netwerktoegang

Statistieken

THPDFSVGImportStatistics meldt knooppunten, CSS-regels, gradiënten, gradientlijnstreken, maskers, afbeeldingen, koppelingen, tekststromen, geïsoleerde opaciteitsgroepen via GroupCount en gecombineerde gegenereerde hoofd-, patroon-, mask- en groepsoperatorbytes

HPDFBuildSVGFormData stelt de begrensde parser afzonderlijk bloot via THPDFSVGFormData en THPDFSVGLinkInfo voor aanroepers die Form-inhoud, intrinsieke dimensies, opaciteitresources, afbeeldingspayloads, patroon- en maskstreams, tekstresourcenamen of koppelingsmetadata vóór registratie nodig hebben; Groups levert de geïsoleerde groepsoperatorstreams en conservatieve Form-grenzen

Voorbeeld

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
);

Zie ook: THotPDF.ImportSVGFormXObject, THPDFPage.DrawSVGFormXObject, HTML5-import van gepagineerde media