HTML5 uvoz medija s paginacijom
THPDFHTMLImporter.RenderHTML5 pretvara tolerantni HTML5 označivački jezik i print CSS u paginirani PDF sadržaj uz očuvanje kompaktne naslijeđene RenderHTML putanje
Duljine u CSS-u te importerovi Margin, BaseFontSize, ListIndent i BlockSpacing izraženi su u točkama, pa oba renderera daju istu stranicu bez obzira na postavku THotPDF.Resolution; vlastito crtanje prije i nakon 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, a HTML5ProfileMilestones izvještava o razrješivaču i kaskadi, paginiranom rasporedu, tablicama i obrascima te ograničenim resursima
- Tolerantni DOM prihvaća uobičajene izostavljene završne oznake, čuva redoslijed teksta, preskače neaktivne regije dokumenta i provodi
MaxDOMNodes - Kaskada podržava selektore tipa, klase, ID-a, atributa jednakosti, potomaka i izravnog djeteta, redoslijed izvora, specifičnost, inline deklaracije,
!important,@media printi margine@page - Paginirani raspored podržava protok blokova, naslove, popise, okvire, pozadine, razmak okvira, eksplicitne lomove stranica, tablice, slike i automatsku paginaciju preljeva
- Tekstualni unosi, gumbi, potvrdni okviri, radio gumbi, tekstualna područja i kontrole odabira renderiraju se kao statični prikazi ili nativna AcroForm polja kada je
CreateAcroFormsomogućen
Mjereni paragrafi i smjer
Paragrafi se prelome koristeći izmjerene napredke trenutnog fonta, uključujući promjene fonta, podebljane i kurzivne nizove, razmak znakova, razmak riječi, eksplicitne prijelome redaka i granice istočnoazijskih znakova; poravnanje i ukrašavanje primjenjuju se zasebno na svaki dobiveni redak
direction: ltr, direction: rtl i HTML atribut dir odabiru smjer paragrafa; dir="auto" koristi Unicode smjer prvog jakog znaka
Na Windowsu se dvosmjerni skriptni nizovi razrješavaju s Uniscribeom i preuređuju preko granica stilova, dok postojeći PDF tekstni motor radi oblikovanje glifova unutar svakog niza; smjer dokumenta, postavke preglednika i spremljeno tekstno stanje stranice vraćaju se nakon retka
Inline nadjačavanja smjera, bdi i bdo trenutačno koriste redoslijed paragrafa i proizvode dijagnostiku hdkLayoutFallback; unicode-bidi je izvan ovog profila, a oblikovanje skripte i dalje slijedi konfiguraciju oblikovanja dokumenta
Fragmentacija paragrafa
widows i orphans su nasljeđeni pozitivni cijeli brojevi, oboje sa zadanom vrijednošću 2; paginacija koristi izmjerene okvire redaka umjesto procijenjenog broja znakova
Uvoznik premješta paragraf ili prilagođava njegovu podjelu da ostavi traženi najmanji broj redaka prije i nakon prijeloma stranice; break-inside: avoid drži paragraf na okupu kada stane na svježu stranicu
Kada stranica ne može zadovoljiti traženo ograničenje, renderiranje napreduje opuštanjem ograničenja i zapisivanjem hdkPaginationConstraint; svaki fragment stranice prima vlastitu pozadinu i okvir
Neobavezna hifenacija
hyphens: none potiskuje diskrecijske prijelome, a zadani hyphens: manual koristi U+00AD ili ­; vidljiva crtica emitira se samo kada se koristi odabrani prijelom
hyphens: auto dodatno poziva OnHyphenate s riječi i naslijeđenom HTML vrijednošću lang; bez povratnog poziva zadržava ručne prijelome i izvještava o padu rasporeda jer se nikakav jezični rječnik ne isporučuje uz paket
Položaji prijeloma broje UTF-16 kodne jedinice od početka riječi; nevažeći i izvan raspona položaji te položaji koji sijeku surrogate parove ili osnovne kombinirajuće oznake ignoriraju se
THPDFHTMLHyphenationEvent = procedure(
Sender: TObject;
const WordText, Language: WideString;
var BreakPositions: TArray<Integer>
) of object;
Ograničeni flex i grid okviri
display: flex podržava row, row-reverse, column i column-reverse; djeca retka koriste eksplicitne širine ili dijele preostalu širinu, a pozitivne vrijednosti flex-grow odmjeravaju dodatni prostor
Retci podržavaju justify-content start, end, center, space-between, space-around i space-evenly, plus poravnanje poprečne osi start, end, center i stretch; tok stupaca podržava prirodni vertikalni raspored i emitira dijagnostiku za nepodržanu distribuciju fiksne visine ili poravnanje poprečne osi
display: grid podržava pozitivne stupčane staze fiksne duljine i fr, uključujući ograničeni repeat(n, tracks) s najviše 64 stupca; ćelije se smještaju u redoslijedu izvora, popunjavajući jedan redak istodobno
grid-column: span N i grid-column-end: span N dopuštaju djetetu da zauzme uzastopne staze i njihove međupraznine; stavka koja ne stane u trenutni redak prelazi na sljedeći redak, a rasponi veći od broja staza proizvode pad rasporeda
flex-wrap: wrap pokreće novi redak kada se eksplicitna širina i razmak sljedeće stavke ne uklapaju; svaki redak neovisno primjenjuje flex-grow i justify-content, dok row-reverse i RTL obrnu položaje unutar svakog retka bez premještanja stavki između redaka
gap prihvaća jednu ili dvije duljine, uz neovisna nadjačavanja row-gap i column-gap; paralelni retci ostaju na jednoj stranici i provjeravaju se prije crtanja
Paralelna djeca podržavaju tekstne blokove s inline stiliziranjem, rekurzivno ugniježđene obične blok kontejnere s paddingom, okvirima i pozadinama, ugniježđene flex i grid kontejnere, slike te statične ili nativne kontrole forme
Slike koriste bajtove dostavljene povratnim pozivom ili data URI, zadržavaju svoj intrinzični omjer slike kada visina nije navedena i dekodiraju se jednom po DOM čvoru; preflight i pad ponovno koriste istu predmemoriranu sliku bez trošenja novog zahtjeva resursa
Svi dječji okviri mjere se prije nego što se bilo koji paralelni redak nacrta, pa nepodržani ili preveliki sadržaj pada na vertikalni tok stranice bez ponavljanja prethodno nacrtanih redaka; ugniježđeno planiranje ograničeno je na 64 razine i troši postojeći proračun operacija rasporeda
Prelomna djeca bez eksplicitne širine zauzimaju jedan kompletan redak; tablice i popisi unutar paralelne djece, flex basis i shrink, wrap-reverse, intrinzičko dimenzioniranje staza, staze i rasponi redaka u gridu te eksplicitno grid postavljanje ostaju izvan ovog profila i proizvode uočljivu dijagnostiku
Dijagnostika nepodržanog CSS-a
Diagnostics izlaže zapise koji sadrže Kind, Subject, Value i MessageText; OnDiagnostic prima iste informacije tijekom renderiranja
Nepoznata svojstva, nepodržane vrijednosti, nepodržani selektori i nepodržana at-pravila ignoriraju se uz dijagnostiku, uključujući deklaracije u inače nekorištenim pravilima stila; pseudo selektori se preskaču umjesto da se tretiraju kao obični selektori tipa
StrictCSS, onemogućen po zadanom, podiže EHPDFHTMLUnsupportedCSS pri dijagnostici; prethodni sadržaj možda je već emitiran, pa pozivatelji kojima treba uvoz sve-ili-ništa trebaju koristiti zaseban dokument
MaxDiagnostics ima zadanu vrijednost 256 i ograničava zadržane zapise; DiagnosticCount i dostava povratnih poziva ostaju uočljivi nakon dostizanja ograničenja pohrane, a nepozitivno ograničenje onemogućuje pohranu zapisa
Ograničeni resursi
Vanjski stilski listovi, slike i @font-face fontovi onemogućeni su osim ako OnResource ne isporučuje njihove bajtove, tako da uvoz HTML-a nikada implicitno ne otvara datoteku ili mrežnu vezu
@font-face podržava jedan izvor url(...), opcionalni format('truetype') ili format('opentype'), alias obitelji, normalan ili kurzivan stil te težine normal, bold, 400 ili 700; font-display prihvaća standardne politike jer izvanmrežni uvoz učitava resurse sinkrono
Fontovi moraju biti ugradivi TrueType ili OpenType sfnt resursi s ASCII Windows nazivom obitelji od najviše 31 znaka; WOFF, zbirke fontova, local(...), opisivači varijabli i liste izvora proizvode dijagnostiku
Prihvaćeni fontovi registriraju se privatno u memoriji procesa na Windowsu i ostaju u vlasništvu dokumenta dok se ne uništi, pa oslobađanje uvoznika prije EndDoc ne poništava odgođeno ugrađivanje fontova
Resursi data: i rezultati povratnih poziva dijele ograničenja MaxResources, MaxResourceBytes i MaxTotalResourceBytes
MaxDecodedImageBytes ima zadanu vrijednost 128 MiB i neovisno ograničava predmemoriju dekodiranih slika na četiri bajta po pikselu; dimenzije BMP-a i PNG-a provjeravaju se prije dekodiranja, a svaka prihvaćena slika provjerava se prije zadržavanja
MaxDOMNodes, MaxCSSRules i MaxLayoutOperations neovisno ograničavaju razrješavanje, izgradnju kaskade i rad rasporeda
THPDFHTMLResourceEvent = procedure(
Sender: TObject;
const URI: WideString;
ResourceKind: THPDFHTMLResourceKind;
var Data: TBytes;
var ContentType: string;
var Handled: Boolean
) of object;
Statistika
THPDFHTMLImportStatistics izvještava o verziji profila, razrješenim čvorovima, CSS pravilima, operacijama rasporeda, lomovima stranica, tablicama, kontrolama forme, zahtjevima resursa, prihvaćenim i odbijenim učitavanjima, prihvaćenim bajtovima resursa, izmjerenim tekstnim retcima, hifeniziranim retcima, dijagnostici te flex i grid kontejnerima
OnLineLayout prima indekse retka stranice i retka paragrafa od nule, ishodište, izmjerenu širinu i visinu, logički tekst, smjer i zastavicu hifenacije nakon što je stvarni PDF tekst emitiran
Svaki poziv RenderHTML5 resetira zapis statistike, a kršenja proračuna podižu EHPDFHTMLImportBudget
Primjer
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đer: THPDFPage.TextOutHTML, Deklarativni layout DOM, AcroForm potpora