HTML5 uvoz pobliskog medija

THPDFHTMLImporter.RenderHTML5 pretvara tolerantan HTML5 zapis i print CSS u paginirani PDF sadržaj uz očuvanje kompaktnog nasleđenog puta RenderHTML

CSS dužine i Margin, BaseFontSize, ListIndent i BlockSpacing uvoznika izraženi su u point-ovima, pa oba renderera proizvode istu stranicu bez obzira na THotPDF.Resolution; vaše sopstveno crtanje pre i posle uvoza i dalje koristi 1/Resolution inča

Deklaracija

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;

Ugovor profila

HTML5ProfileVersion vraća 1 i HTML5ProfileMilestones izveštava o parseru i kaskadi, pažnom rasporedu, tabelama i formama i ograničenim resursima

Mereni pasusi i smer

Pasusi se prelome koristeći izmerena napredovanja trenutnog fonta, uključujući promene fonta, bold i italic nizove, razmak slova, razmak reči, eksplicitne prelome redova i granice istočnoazijskih znakova; poravnanje i dekoracija primenjuju se odvojeno na svaki dobijeni red

direction: ltr, direction: rtl i HTML atribut dir biraju smer pasusa; dir="auto" koristi Unicode smer prvog jakog znaka

Na Windows-u, dvosmerni skript nizovi se razrešavaju pomoću Uniscribe-a i preuređuju preko granica stilova, dok postojeći PDF tekstualni engine radi oblikovanje glifova unutar svakog niza; smer dokumenta, viewer preferences i sačuvano stanje teksta stranice vraćaju se nakon reda

Inline izmeni smera, bdi i bdo trenutno koriste redosled pasusa i proizvode hdkLayoutFallback dijagnostiku; unicode-bidi je van ovog profila, a oblikovanje skripte i dalje prati konfiguraciju oblikovanja dokumenta

Fragmentacija pasusa

widows i orphans su nasleđeni pozitivni celobrojni, oba podrazumevano 2; paginacija koristi izmerene kutije redova umesto procenjenog broja znakova

Uvoznik pomera pasus ili prilagođava njegov split da ostavi traženi minimalni broj redova pre i posle preloma stranice; break-inside: avoid drži pasus na okupu kada staje na svežu stranicu

Kada stranica ne može da izdrži traženo ograničenje, renderovanje napreduje opuštanjem ograničenja i beleženjem hdkPaginationConstraint; svaki fragment stranice dobija svoju pozadinu i ivicu

Opciona dividiranje

hyphens: none suzbija diskrecione prelome, a podrazumevani hyphens: manual koristi U+00AD ili ­; vidljiva crtica emituje se samo kada se koristi izabrani prelom

hyphens: auto dodatno poziva OnHyphenate sa rečju i nasleđenom HTML vrednošću lang; bez callback-a zadržava ručne prelome i prijavljuje layout fallback, jer se jezički rečnik ne isporučuje uz biblioteku

Pozicije preloma broje UTF-16 code jedinice od početka reči; neispravne, van-opsega, surrogate-razdvajajuće i osnovne combining-mark-razdvajajuće pozicije se ignorišu

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

Ograničeni flex i grid kutije

display: flex podržava row, row-reverse, column i column-reverse; deca u redu koriste eksplicitne širine ili dele preostalu širinu, a pozitivne flex-grow vrednosti odmeravaju dodatni prostor

Redovi podržavaju justify-content start, end, center, space-between, space-around i space-evenly, plus start, end, center i stretch poravnanje po uporednoj osi; tok u koloni podržava prirodan vertikalni raspored i emituje dijagnostiku za nepodržanu raspodelu fiksne visine ili poravnanje po uporednoj osi

display: grid podržava pozitivne kolone fiksne dužine i fr kolone, uključujući ograničeni repeat(n, tracks) sa najviše 64 kolone; ćelije se postavljaju po redosledu izvora, popunjavajući jedan red za drugim

grid-column: span N i grid-column-end: span N dozvoljavaju detetu da zauzme uzastopne kolone i njihove međupraznine; stavka koja ne staje u tekući red prelazi u sledeći red, a span veći od broja kolona proizvodi layout fallback

flex-wrap: wrap započinje novi red kada se eksplicitna širina i razmak sledeće stavke ne uklapaju; svaki red nezavisno primenjuje flex-grow i justify-content, dok row-reverse i RTL obrću pozicije unutar svakog reda bez premeštanja stavki između redova

gap prihvata jednu ili dve dužine, sa nezavisnim row-gap i column-gap izmenama; paralelni redovi ostaju na jednoj stranici i proveravaju se pre iscrtavanja

Paralelna deca podržavaju tekstualne blokove sa inline stilizovanjem, rekurzivno ugnježđene obične blok kontejnere sa paddingom, ivicama i pozadinama, ugnježđene flex i grid kontejnere, slike te statičke ili nativne kontrole forme

Slike koriste callback-om dostavljene ili data URI bajtove, zadržavaju svoj intrinzični odnos širine i visine kada visina nije zadata i dekoduju se jednom po DOM čvoru; preflight i fallback ponovo koriste istu keširanu sliku bez trošenja novog zahteva za resurs

Sve podređene kutije mere se pre nego što se bilo koji paralelni red nacrta, pa nepodržani ili preveliki sadržaj pada na vertikalni tok stranice bez ponavljanja ranije nacrtanih redova; ugnježđeno planiranje je ograničeno na 64 nivoa i troši postojeći budžet layout operacija

Omotavajuća deca bez eksplicitne širine zauzimaju jednu kompletnu liniju; tabele i liste unutar paralelne dece, flex basis i shrink, wrap-reverse, intrinzičko dimenzionisanje kolona, grid redovi i row spanovi te eksplicitno grid postavljanje ostaju van ovog profila i proizvode uočljivu dijagnostiku

Nepodržana CSS dijagnostika

Diagnostics izlaže slogove sa Kind, Subject, Value i MessageText; OnDiagnostic prima iste informacije tokom renderovanja

Nepoznata svojstva, nepodržane vrednosti, nepodržani selektori i nepodržana at-pravila ignorišu se uz dijagnostiku, uključujući deklaracije u inače nekorišćenim pravilima stil tabake; pseudo selektori se preskaču umesto da se tretiraju kao obični tip selektori

StrictCSS, podrazumevano isključen, podiže EHPDFHTMLUnsupportedCSS pri dijagnostici; prethodni sadržaj je možda već emitovan, pa pozivaoci koji zahtevaju sve-ili-ništa uvoz treba da koriste poseban dokument

MaxDiagnostics je podrazumevano 256 i ograničava zadržane slogove; DiagnosticCount i dostava callback-a ostaju uočljivi nakon dostizanja limita skladištenja, a nepozitivan limit onemogućava skladištenje slogova

Ograničeni resursi

Spoljni stil tabake, slike i @font-face fontovi su onemogućeni osim ako OnResource ne isporuči njihove bajtove, tako uvoz HTML-a nikada ne otvara fajl ili mrežnu vezu implicitno

@font-face podržava jedan url(...) izvor, opcione format('truetype') ili format('opentype'), alias porodice, normalan ili italic stil te normal, bold, 400 ili 700 težinu; font-display prihvata standardne politike jer offline uvoz učitava resurse sinhrono

Fontovi moraju biti ugradivi TrueType ili OpenType sfnt resursi sa ASCII Windows imenom porodice od najviše 31 znaka; WOFF, kolekcije fontova, local(...), variable deskriptori i spiskovi izvora proizvode dijagnostiku

Prihvaćeni fontovi registruju se privatno u memoriji procesa na Windows-u i ostaju u vlasništvu dokumenta dok se ne uništi, pa oslobađanje uvoznika pre EndDoc ne poništava odloženo ugrađivanje fontova

data: resursi i rezultati povratnog poziva dele limite MaxResources, MaxResourceBytes i MaxTotalResourceBytes

MaxDecodedImageBytes je podrazumevano 128 MiB i nezavisno ograničava keš dekodovanih slika na četiri bajta po pikselu; BMP i PNG dimenzije se proveravaju pre dekodovanja, a svaka prihvaćena slika se proverava pre zadržavanja

MaxDOMNodes, MaxCSSRules i MaxLayoutOperations nezavisno ograničavaju rad parsiranja, izgradnje kaskade i rasporeda

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

Statistika

THPDFHTMLImportStatistics izveštava o verziji profila, parsiranim čvorovima, CSS pravilima, operacijama rasporeda, prekidima stranice, tabelama, upravljačkim okvirima forme, zahtevima resursa, prihvaćenim i odbijenim učitavanjima, prihvatljivim bajtovima resursa, merenim tekstualnim redovima, dividiranim redovima, dijagnostici te flex i grid kontejnerima

OnLineLayout prima indekse stranice i linije pasusa od nule, poreklo, izmerenu širinu i visinu, logički tekst, smer i zastavicu dividiranja nakon što je stvarni PDF tekst emitovan

Svaki poziv RenderHTML5 resetuje zapis statistike i kršenje budžeta podiže EHPDFHTMLImportBudget

Primer

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;

Pogledajte takođe: THPDFPage.TextOutHTML, DOM deklarativnog rasporeda, Podrška za AcroForm