Import af SVG Form XObject

THotPDF.ImportSVGFormXObject parser SVG én gang og registrerer ét genanvendeligt PDF Form XObject, mens THPDFPage.DrawSVGFormXObject placerer det i enhver størrelse og valgfrit opretter sidelinkannoteringer

Deklaration

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

Vektorprofil

Tekst- og malegrænser

Tekst understøtter solid fyld, fed- og kursiv-varianter, fontstørrelse, transformationer, forankring, opacitet og geometrisk klipning; gradient-tekstmaling fejler lukket, og hver tekst- eller tspan-node forbliver et uafhængigt positioneret run snarere end en komplet SVG-tekstflow-layoutmotor

Dokumenttekst-imports bevarer det valgte fed/kursiv-skriftsnit gennem stilbevidste glyph-kontroller og fallback-layout, fastholder målte ink-grænser og afviser reelt uafklarede glyffer

UTF-8-tekst og hexadecimal eller decimal XML-tegnreferencer bevarer de samme Unicode-skalare i Delphi og FPC, inklusive supplerende skalare repræsenteret ved UTF-16-surrogatpar

Det selvstændige HPDFBuildSVGFormData-overload uden tekstbygger bruger målte Helvetica-, Times- og Courier Base 14-fremskridt og afviser tegn uden for WinAnsi i stedet for at erstatte med spørgsmålstegn; overloadet med THPDFSVGTextRunBuilder accepterer kalder-leverede indlejrede tekstformer og metrikker

Gradienter bevarer den afgrænsede vektorbåndstilnærmelse; transparente ressourcer kræver PDF 1.4 og afvises af strict PDF/A-1-profilen

Stroke-stile

stroke-dasharray, stroke-dashoffset og stroke-miterlimit virker gennem præsentationsattributter, indlejret CSS, inline-stile og nedarvning, inklusive grupper og fragment-kun use-instanser

Dash-arrays accepterer tal adskilt af komma eller mellemrum og understøttede længder; procentdele bruger den normaliserede viewport-diagonal, beregnet som sqrt((viewWidth * viewWidth + viewHeight * viewHeight) / 2)

Arrays med ulige længde gentages til et mønster med lige længde, hver delkurve starter mønsteret forfra, og positive eller negative offsets wrappes rundt om det komplette mønster; none og arrays med kun nul giver solide streger

Malede dash-segmenter med længden nul bevarer runde eller kvadratiske endemærker; almindelige solide streger, gradient-stroke-mønstre, klip, masker og isolerede opacitetsgrupper deler de valgte stroke-indstillinger

Standard mitre-grænsen er 4; SVG 2-værdier mellem 0 og 1 accepteres og bruger bevel-samlinger, hvor en miter ville overskride grænsen, mens gradient- og gennemsigtighedsressourcers grænser bevarer skarpe samlinger inden for den valgte grænse

Native rendering bruger afgrænset dash-geometri til at bevare offsets, brøkdellængder og arrays længere end GDI-pen-grænsen, med adaptiv kurveudfladning og sammenhængende malede samlinger på tværs af segmentgrænser

Kalibrering af dash med pathLength ligger stadig uden for denne profil; figurer, der kombinerer et ikke-solidt dash-array med pathLength, fejler lukket i stedet for lydløst at bruge ukalibrerede længder

Stroke-semantikken følger SVG 2 stroke-modellen inden for de parser- og rendererbudgetter, der er beskrevet nedenfor

Tekstformningskonfiguration

Indlejret SVG-tekst bruger det importerende dokuments ShapingFeatures-, AutoShapeArabic-, AutoShapeSyriac-, AutoShapeNko-, AutoShapeAdlam- og AutoShapeHanifiRohingya-indstillinger sammen med dets GSUB-script- og sprogvalg samt font-fallback-kæder

Disse indstillinger gælder både ved målte fremskridt og genererede tekst-appearances uden at ændre kalderens konfiguration; formning forbliver opt-in og kræver en font, der leverer de anmodede glyffer og OpenType-tabeller

Hver genereret tekst-appearance accepterer højst 256 distinkte formningsfontvalg og 64 MiB kumulativ rå fontdata; ikke-understøttet fontdata eller en overskredet grænse fejler importen atomært

Objekt- og gruppeopacitet

opacity anvendes én gang på det komplette malede resultat af sin node og nedarves ikke af efterkommere; fill-opacity og stroke-opacity bevarer deres separate nedarvede maleværdier

To overlappende uigennemsigtige røde rektangler inde i <g opacity="0.5"> forbliver lige gennemsigtige i deres overlap, mens to uafhængigt gennemsigtige rektangler bliver mørkere, hvor de overlapper

Nestede grupper komponerer i rækkefølge: to omsluttende opaciteter på 0,5 giver en effektiv 0,25 over en uigennemsigtig efterkommer, og en efterkommeres eksplicitte opacitet på 1 tilsidesætter ikke dens omsluttende gruppe

Rod-SVG-noder, containere, links, fragmentreferencer, tekst, billeder og figurer bruger samme objektopacitetsvej; fragment-kun use-referencer bevarer både instansens og den refererede nodes stilarter

Fill- og stroke-alfa forbliver uafhængige, også i deres overlap inde i et translucent objekt, og gradientstop-alfa kombineres med den relevante male-alfa før objektkomponering

Klip- og maskeeffekter hører til deres node i stedet for at nedarves som efterkommer-maleindstillinger; linkgeometrien forbliver placeringsbevidst, og isolerede Form-grænser bevarer konservativt transformerede streger og ender

Importøren bevarer vektoroperatorer, indlejrede tekst-Forms, billedressourcer, mønstre og masker inde i isolerede grupper; den fladgør ikke hele SVG'en til en bitmap

Den understøttede adfærd følger SVG-modellen for objekt- og gruppeopacitet; de øvrige afgrænsede tekst-, gradient- og geometrirestriktioner på denne side gælder stadig

Sikkerhed og budgetter

Importøren accepterer almindelig eller gzip-komprimeret SVG op til 8 MiB, afgrænser udvidet input til 32 MiB, kombinerede main-, pattern-, maske- og gruppeoperatorer til 16 MiB, noder til 4.096, nestning til 64 niveauer, CSS-regler til 256 og stiværdier til 100.000

Indlejrede billeder accepterer kun strict Base64 data:image/png;base64,- og data:image/jpeg;base64,-payloads med højst 128 billeder, 16.384 pixels pr. dimension og 16.777.216 afkodede pixels på tværs af alle billeder; dimensionerne kontrolleres før native dekodning

Teksten er afgrænset til 128 runs og 65.536 UTF-16-enheder pr. run, og gradient-stroke-mønstre, masker og isolerede opacitetsgrupper til 128 ressourcer hver; rekursive maskereferencer fejler lukket

Dash-arrays indeholder højst 64 kildeposter før ulige-array-udvidelse; positive poster skal være mindst 0,000001 brugerenheder, individuelle længder og den normaliserede cyklus må ikke overstige 1.000.000.000, absolutte offsets må ikke overstige 1.000.000.000, og mitre-grænser skal ligge mellem 0 og 1.000.000

Faktiske nestede gennemsigtighedseffekter er begrænset til otte niveauer for at matche den native renderer, uafhængigt af SVG-trædybdegrænsen; almindelige nestede containere uden gennemsigtighedseffekter forbruger ikke denne ramme

Grænser for gennemsigtighedseffekter skal være endelige, og hver koordinat skal forblive inden for en absolut værdi på 1.000.000.000; imports uden for denne afgrænsede koordinatprofil fejler, før gruppe- eller maskeregistrering

Fejlede imports ruller genererede objekter, indlejrede tekst-Forms, registry-poster samt versions- og device-farvetilstand tilbage, så kaldere kan genbruge samme dokument og bevare en omsluttende graftransaktion

Scripts, hændelseshåndteringer, DTD'er, foreignObject, ikke-understøttede datamediatyper, JavaScript-URL'er og eksterne male- eller billedressource-URL'er fejler lukket

Fragmentreferencer som url(#gradient), url(#clip) og href="#symbol" forbliver inde i det parsede dokument og udløser aldrig fil- eller netværksadgang

Statistik

THPDFSVGImportStatistics rapporterer noder, CSS-regler, gradienter, gradient-strokes, masker, billeder, links, tekstruns, isolerede opacitetsgrupper gennem GroupCount samt kombinerede genererede main-, pattern-, maske- og gruppeoperatorbyte

HPDFBuildSVGFormData eksponerer den afgrænsede parser separat gennem THPDFSVGFormData og THPDFSVGLinkInfo for kaldere, der behøver Form-indhold, iboende dimensioner, opacitetsressourcer, billed-payloads, pattern- og maskestrømme, tekstressourcenavne eller linkmetadata før registrering; Groups leverer de isolerede gruppeoperatorstrømme og konservative Form-grænser

Eksempel

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

Se også: THotPDF.ImportSVGFormXObject, THPDFPage.DrawSVGFormXObject, HTML5-paged-mediaimport