Import af HTML5-sidemedier
THPDFHTMLImporter.RenderHTML5 konverterer tolerant HTML5-opmærkning og print-CSS til sideinddelt PDF-indhold og bevarer samtidig den kompakte ældre RenderHTML-sti
CSS-længder og importørens Margin, BaseFontSize, ListIndent og BlockSpacing er i punkter, så begge renderere producerer samme side uanset hvad THotPDF.Resolution er sat til; din egen tegning før og efter importen bruger stadig 1/Resolution tomme
Deklaration
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, sidelayout, tabeller og formularer samt afgrænsede ressourcer
- Den tolerante DOM accepterer almindelige udeladte slut-tags, bevarer tekstrækkefølgen, springer inaktive dokumentområder over og håndhæver
MaxDOMNodes - Kaskaden understøtter type-, klasse-, ID-, ligeheds-attribut-, efterkommer- og direkte-børn-selektorer, kilderækkefølge, specificitet, inline-deklarationer,
!important,@media printog@page-margener - Sidelayoutet understøtter blokflow, overskrifter, lister, kanter, baggrunde, boksafstand, eksplicitte sideskift, tabeller, billeder og automatisk overløbspaginering
- Tekstinput, knapper, afkrydsningsfelter, radioknapper, tekstområder og valgcontrolelementer gengives som statiske appearances eller oprindelige AcroForm-felter, når
CreateAcroFormser aktiveret
Målte afsnit og retning
Afsnit ombrydes med den aktuelle fonts målte fremskridt, inklusive fontskift, fed- og kursiv-runs, bogstavafstand, ordafstand, eksplicitte linjeskift og østasiatiske tegngrænser; justering og dekoration anvendes separat på hver resulterende linje
direction: ltr, direction: rtl og HTML-attributten dir vælger afsnitsretning; dir="auto" bruger det første stærke tegns Unicode-retning
I Windows opløses tovejsscript-runs med Uniscribe og omordnes på tværs af stilgrænser, mens den eksisterende PDF-tekstmotor håndterer glyph-formning inden for hvert run; dokumentets retning, viewer-præferencer og gemt sideteksttilstand gendannes efter linjen
Inline retningsoverstyringer, bdi og bdo bruger i øjeblikket afsnitsordning og giver en hdkLayoutFallback-diagnostik; unicode-bidi ligger uden for denne profil, og scriptformning følger stadig dokumentets formningskonfiguration
Afsnitsfragmentering
widows og orphans er nedarvede positive heltal, begge med standardværdien 2; pagineringen bruger de målte linjebokse i stedet for et anslået antal tegn
Importøren flytter et afsnit eller justerer dets opsplitning, så det ønskede minimum antal linjer efterlades før og efter et sideskift; break-inside: avoid holder et afsnit samlet, når det kan være på en frisk side
Når en side ikke kan rumme den anmodede begrænsning, gør renderingen fremskridt ved at lempe begrænsningen og registrere hdkPaginationConstraint; hvert sidefragment får sin egen baggrund og kant
Valgfri orddeling
hyphens: none undertrykker diskretionære brud, og standarden hyphens: manual bruger U+00AD eller ­; en synlig bindestreg udsendes kun, når det valgte brud anvendes
hyphens: auto kalder derudover OnHyphenate med ordet og den nedarvede HTML-lang-værdi; uden et callback bevarer den manuelle brud og rapporterer et layout-fallback, fordi ingen sprogordbog følger med
Brudpositioner tæller UTF-16-kodeenheder fra ordets start; ugyldige, uden for intervallet liggende, surrogat-delende og enkle kombinationsmærke-delende positioner ignoreres
THPDFHTMLHyphenationEvent = procedure(
Sender: TObject;
const WordText, Language: WideString;
var BreakPositions: TArray<Integer>
) of object;
Afgrænsede flex- og grid-bokse
display: flex understøtter row, row-reverse, column og column-reverse; rækkebørn bruger eksplicitte bredder eller deler den resterende bredde, og positive flex-grow-værdier vægter ekstra plads
Rækker understøtter justify-content start, end, center, space-between, space-around og space-evenly plus start-, end-, center- og stretch-tværaksejustering; kolonneflow understøtter naturligt lodret layout og udsender en diagnostik for ikke-understøttet fordeling med fast højde eller tværaksejustering
display: grid understøtter positive fastlængde- og fr-kolonnespor, inklusive afgrænset repeat(n, tracks) med op til 64 kolonner; celler placeres i kilderækkefølge og udfylder én række ad gangen
grid-column: span N og grid-column-end: span N lader et barn optage på hinanden følgende spor og deres mellemrum; et element, der ikke passer i den aktuelle række, flyttes til næste række, og spans større end antallet af spor giver et layout-fallback
flex-wrap: wrap starter en ny linje, når næste elements eksplicitte bredde og mellemrum ikke passer; hver linje anvender uafhængigt flex-grow og justify-content, mens row-reverse og RTL vender positionerne inden i hver linje uden at flytte elementer mellem linjer
gap accepterer én eller to længder med uafhængige row-gap- og column-gap-tilsidesættelser; parallelle rækker forbliver på én side og kontrolleres før maling
Parallelle børn understøtter tekstblokke med inline-styling, rekursivt nestede almindelige blokcontainere med padding, kanter og baggrunde, nestede flex- og grid-containere, billeder samt statiske eller native formularcontrolelementer
Billeder bruger callback-leverede eller data URI-bytes, bevarer deres iboende aspektforhold, når ingen højde er angivet, og afkodes én gang pr. DOM-node; preflight og fallback genbruger det samme cachede billede uden at bruge endnu en ressourceanmodning
Alle børnebokse måles, før nogen parallel række males, så ikke-understøttet eller for stort indhold falder tilbage til lodret sideflow uden at gentage tidligere malede rækker; nested planlægning er afgrænset til 64 niveauer og forbruger det eksisterende layoutoperationsbudget
Ombrydende børn uden eksplicit bredde optager én komplet linje; tabeller og lister inde i parallelle børn, flex basis og shrink, wrap-reverse, iboende sporstørrelsessætning, grid-rækkespor og række-spans samt eksplicit grid-placering forbliver uden for denne profil og giver observerbar diagnostik
Diagnostik af ikke-understøttet CSS
Diagnostics eksponerer poster med Kind, Subject, Value og MessageText; OnDiagnostic modtager de samme oplysninger under renderingen
Ukendte egenskaber, ikke-understøttede værdier, ikke-understøttede selektorer og ikke-understøttede at-rules ignoreres med en diagnostik, inklusive deklarationer i ellers ubrugte stylesheet-regler; pseudo-selektorer springes over i stedet for at behandles som almindelige type-selektorer
StrictCSS, deaktiveret som standard, udløser EHPDFHTMLUnsupportedCSS ved en diagnostik; tidligere indhold kan allerede være udsendt, så kaldere, der kræver alt-eller-intet-import, bør bruge et separat dokument
MaxDiagnostics har standardværdien 256 og afgrænser gemte poster; DiagnosticCount og callback-levering forbliver observerbare, efter at lagergrænsen er nået, og en ikke-positiv grænse deaktiverer postlageret
Afgrænsede ressourcer
Eksterne stylesheets, billeder og @font-face-fonts er deaktiveret, medmindre OnResource leverer deres bytes, så HTML-import aldrig åbner en fil- eller netværksforbindelse implicit
@font-face understøtter én url(...)-kilde, valgfri format('truetype') eller format('opentype'), et familiealias, normal eller italic stil og normal-, bold-, 400- eller 700-vægt; font-display accepterer standardpolicyerne, fordi offline-import indlæser ressourcer synkront
Fonts skal være indlejrbare TrueType- eller OpenType-sfnt-ressourcer med et ASCII Windows-familienavn på højst 31 tegn; WOFF, fontsamlinger, local(...), variable deskriptorer og kildelister giver diagnostik
Accepterede fonts registreres privat i proceshukommelsen i Windows og forbliver ejet af dokumentet, indtil det destrueres, så at frigive importøren før EndDoc invaliderer ikke udskudt fontindlejring
data:-ressourcer og callback-resultater deler grænserne MaxResources, MaxResourceBytes og MaxTotalResourceBytes
MaxDecodedImageBytes har standardværdien 128 MiB og afgrænser uafhængigt det afkodede billedcache til fire bytes pr. pixel; BMP- og PNG-dimensioner kontrolleres før afkodning, og hvert accepteret billede kontrolleres, før det bevares
MaxDOMNodes, MaxCSSRules og MaxLayoutOperations afgrænser uafhængigt parsing, opbygning af kaskaden og layoutarbejde
THPDFHTMLResourceEvent = procedure(
Sender: TObject;
const URI: WideString;
ResourceKind: THPDFHTMLResourceKind;
var Data: TBytes;
var ContentType: string;
var Handled: Boolean
) of object;
Statistik
THPDFHTMLImportStatistics rapporterer profilversion, parsete noder, CSS-regler, layoutoperationer, sideskift, tabeller, formularkontroller, ressourceanmodninger, accepterede og afviste indlæsninger, accepterede ressourcebytes, målte tekstlinjer, orddelte linjer, diagnostik, flex-containere og grid-containere
OnLineLayout modtager linjens nulbaserede side- og afsnitslinjeindeks, oprindelse, målt bredde og højde, logisk tekst, retning og orddelingsflag, efter den faktiske PDF-tekst er udsendt
Hvert RenderHTML5-kald nulstiller statistikposten, og budgetoverskridelser udløser 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, AcroForm-understøttelse