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
- Tolerantni DOM prihvata uobičajena izostavljena završna tagova, čuva redosled teksta, preskače neaktivne regione dokumenta i sprovodi
MaxDOMNodes - Kaskada podržava tip, klasu, ID, atribut jednakosti, potomstvo i direktne-child selektore, redosled izvora, specifičnost, inline deklaracije,
!important,@media printi@pagemargine - Pažni raspored podržava blok tok, naslove, liste, ivice, pozadine, razmak kutija, eksplicitne prekide stranice, tabele, slike i automatsku paginaciju prelivanja
- Unosi teksta, dugmad, polja za potvrdu, radio dugmad, područja teksta i upravljački okviri izbora prikazuju se kao statički izgledi ili izvorna AcroForm polja kada je
CreateAcroFormsomogućen
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