HTML5-innlasting av paginert media

THPDFHTMLImporter.RenderHTML5 konverterer tolerant HTML5-oppmerking og utskrifts-CSS til paginert PDF-innhold samtidig som den kompakte eldre RenderHTML-banen bevares

CSS-lengder og importørens Margin, BaseFontSize, ListIndent og BlockSpacing er i punkter, så begge rendererne produserer samme side uansett hva THotPDF.Resolution er satt til; din egen tegning før og etter importen bruker fortsatt 1/Resolution tomme

Deklarasjon

function RenderHTML5(
  const HTML: WideString;
  const AuthorStyleSheet: WideString = ''
): Boolean;

function HPDFRenderHTML5Document(
  Doc: THotPDF;
  const HTML: WideString;
  const AuthorStyleSheet: WideString = '';
  MarginPt: Single = 72;
  const FontName: AnsiString = 'Arial';
  FontSize: Single = 12
): Boolean;

Profilkontrakt

HTML5ProfileVersion returnerer 1, og HTML5ProfileMilestones rapporterer parser- og kaskade, paginert layout, tabeller og skjemaer samt avgrensede ressurser

Målte avsnitt og retning

Avsnitt brytes ved hjelp av gjeldende fonts målte bredder, inkludert fontbytter, fete og kursiv runer, bokstavavstand, ordavstand, eksplisitte linjeskift og østasiatiske tegngrenser; justering og dekorasjon anvendes separat på hver resulterende linje

direction: ltr, direction: rtl og HTML-attributten dir velger avsnittretning; dir="auto" bruker det første sterke tegnets Unicode-retning

På Windows løses toveis skriptruner med Uniscribe og sorteres om på tvers av stilgrenser, mens den eksisterende PDF-tekstmotoren håndterer glyf-shaping innenfor hver run; dokumentets retning, visningspreferanser og lagret sideteksttilstand gjenopprettes etter linjen

Inline retningsoverstyringer, bdi og bdo bruker foreløpig avsnittsorden og produserer en hdkLayoutFallback-diagnostikk; unicode-bidi er utenfor denne profilen, og skript-shaping følger fortsatt dokumentets shaping-konfigurasjon

Avsnittfragmentering

widows og orphans er arvede positive heltall, begge med standardverdien 2; pagineringen bruker målte linjebokser i stedet for et estimert antall tegn

Importøren flytter et avsnitt eller justerer splittingen slik at ønsket minimum antall linjer gjenstår før og etter et sideskift; break-inside: avoid holder et avsnitt samlet når det passer på en fersk side

Når en side ikke kan innfri den etterspurte begrensningen, gjør renderingen fremgang ved å slakke begrensningen og registrere hdkPaginationConstraint; hvert sidefragment mottar sin egen bakgrunn og ramme

Valgfri orddeling

hyphens: none undertrykker vilkårlige brytninger, og standardverdien hyphens: manual bruker U+00AD eller ­; en synlig bindestrek sendes bare ut når den valgte brytningen brukes

hyphens: auto kaller i tillegg OnHyphenate med ordet og den arvede HTML lang-verdien; uten en callback beholder den manuelle brytninger og rapporterer en layout-fallback, fordi ingen språkordbok følger med

Brytningsposisjoner teller UTF-16-kodeenheter fra ordets start; ugyldige, utenfor gyldig område, surrogatsplittende og enkle kombinerende-tegn-splittende posisjoner ignoreres

THPDFHTMLHyphenationEvent = procedure(
  Sender: TObject;
  const WordText, Language: WideString;
  var BreakPositions: TArray<Integer>
) of object;

Avgrensede flex- og grid-bokser

display: flex støtter row, row-reverse, column og column-reverse; rad-barn bruker eksplisitte bredder eller deler gjenværende bredde, og positive flex-grow-verdier vekter tilleggsområdet

Rader støtter justify-content start, end, center, space-between, space-around og space-evenly, pluss start-, end-, center- og stretch-tverraksejustering; kolonneflyt støtter naturlig vertikal layout og sender en diagnostikk for ustøttet fasthøyde-fordeling eller tverraksejustering

display: grid støtter positive fastlengde- og fr-kolonnespor, inkludert avgrenset repeat(n, tracks) med opptil 64 kolonner; celler plasseres i kildeorden, fyller én rad om gangen

grid-column: span N og grid-column-end: span N lar et barn okkupere sammenhengende spor og mellomliggende mellomrom; et element som ikke passer i gjeldende rad flyttes til neste rad, og spenn større enn sporantallet gir en layout-fallback

flex-wrap: wrap starter en ny linje når neste elements eksplisitte bredde og mellomrom ikke passer; hver linje anvender uavhengig flex-grow og justify-content, mens row-reverse og RTL reverserer posisjoner innenfor hver linje uten å flytte elementer mellom linjer

gap godtar én eller to lengder, med uavhengige row-gap- og column-gap-overstyringer; parallelle rader forblir på én side og sjekkes før maling

Parallelle barn støtter tekstblokker med inline-styling, rekursivt nestede vanlige beholderbokser med padding, rammer og bakgrunner, nestede flex- og grid-containere, bilder, og statiske eller native skjemakontroller

Bilder bruker callback-leverte eller data-URI-byte, beholder sitt iboende sideforhold når ingen høyde er angitt, og dekodes én gang per DOM-node; preflight og fallback gjenbruker det samme cachete bildet uten å bruke en ny ressursforespørsel

Alle underbokser måles før noen parallelle rad males, så ustøttet eller overdimensjonert innhold faller tilbake til vertikal sideflyt uten å gjenta tidligere malte rader; nestet planlegging begrenses til 64 nivåer og bruker det eksisterende layoutoperasjonsbudsjettet

Ombrytende barn uten eksplisitt bredde opptar én komplett linje; tabeller og lister inne i parallelle barn, flex basis og shrink, wrap-reverse, iboende sporstørrelse, grid-radspor og radspenn, og eksplisitt grid-plassering forblir utenfor denne profilen og produserer observerbar diagnostikk

Diagnostikk for ustøttet CSS

Diagnostics eksponerer poster med Kind, Subject, Value og MessageText; OnDiagnostic mottar samme informasjon under rendering

Ukjente egenskaper, ustøttede verdier, ustøttede velgere og ustøttede at-regler ignoreres med en diagnostikk, inkludert deklarasjoner i ellers ubrukte stilarkregler; pseudo-velgere hoppes over i stedet for å behandles som vanlige typevelgere

StrictCSS, deaktivert som standard, utløser EHPDFHTMLUnsupportedCSS ved en diagnostikk; tidligere innhold kan allerede være sendt ut, så kallere som krever alt-eller-ingenting-import bør bruke et separat dokument

MaxDiagnostics har standardverdien 256 og begrenser beholdte poster; DiagnosticCount og callback-levering forblir observerbare etter at lagringsgrensen er nådd, og en ikke-posytiv grense deaktiverer postlagring

Avgrensede ressurser

Eksterne stilark, bilder og @font-face-fonter deaktiveres med mindre OnResource leverer deres bytes, så HTML-innlasting åpner aldri en fil- eller nettverkstilkobling implisitt

@font-face støtter én url(...)-kilde, valgfri format('truetype') eller format('opentype'), et familienalias, normal eller kursiv stil, og normal, bold, 400 eller 700 vekt; font-display godtar standardpolicyene fordi frakoblet innlasting henter ressurser synkront

Fonter må være innbyggbare TrueType- eller OpenType sfnt-ressurser med et ASCII Windows-familienavn på høyst 31 tegn; WOFF, fontsamlinger, local(...), variable deskriptorer og kildelister produserer diagnostikk

Godtatte fonter registreres privat i prosessminnet på Windows og forblir eid av dokumentet til det ødelegges, så å frigjøre importøren før EndDoc ugyldiggjør ikke utsatt fontinnebygging

data:-ressurser og tilbakeringingsresultater deler grensene for MaxResources, MaxResourceBytes og MaxTotalResourceBytes

MaxDecodedImageBytes har standardverdien 128 MiB og begrenser uavhengig den dekodete bildecachen til fire byte per piksel; BMP- og PNG-dimensjoner sjekkes før dekoding, og hvert godtatt bilde sjekkes før det beholdes

MaxDOMNodes, MaxCSSRules og MaxLayoutOperations begrenser parsing, kaskade-konstruksjon og layout-arbeid uavhengig

THPDFHTMLResourceEvent = procedure(
  Sender: TObject;
  const URI: WideString;
  ResourceKind: THPDFHTMLResourceKind;
  var Data: TBytes;
  var ContentType: string;
  var Handled: Boolean
) of object;

Statistikk

THPDFHTMLImportStatistics rapporterer profilversjonen, analyserte noder, CSS-regler, layout-operasjoner, sideskift, tabeller, skjemakontroller, ressursforespørsler, aksepterte og avviste innlastinger, aksepterte ressurs-bytes, målte tekstlinjer, orddelte linjer, diagnostikk, flex-containere og grid-containere

OnLineLayout mottar linjens nullbaserte side- og avsnittlinjeindekser, origo, målt bredde og høyde, logisk tekst, retning og orddelingsflagg etter at den faktiske PDF-teksten er sendt ut

Hvert RenderHTML5-kall tilbakestiller statistikk-oppføringen, og budsjettbrudd reiser EHPDFHTMLImportBudget

Eksempel

Importer := THPDFHTMLImporter.Create(Doc);
try
  Importer.CreateAcroForms := True;
  Importer.MaxResources := 16;
  Importer.RenderHTML5(
    '<style>@page { margin: 36pt } ' +
    'table { width: 100% }</style>' +
    '<h1>Invoice</h1>' +
    '<table><tr><td>Total</td><td>42</td></tr></table>' +
    '<input name="approved" type="checkbox">'
  );
finally
  Importer.Free;
end;

Se også: THPDFPage.TextOutHTML, Deklarativ layout-DOM, Støtte for AcroForm