HTML5 Paged-Media-import
THPDFHTMLImporter.RenderHTML5 converteert tolerant HTML5-opmaak en print-CSS naar gepagineerde PDF-inhoud, terwijl het compacte legacy-RenderHTML-pad behouden blijft
CSS-lengtes en de Margin-, BaseFontSize-, ListIndent- en BlockSpacing-waarden van de importer zijn in punten, dus beide renderers leveren bij elke THotPDF.Resolution dezelfde pagina; je eigen tekenwerk vóór en na de import blijft 1/Resolution inch gebruiken
Declaratie
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;
Profielcontract
HTML5ProfileVersion retourneert 1 en HTML5ProfileMilestones rapporteert parser- en cascadetrappen, gepagineerde layout, tabellen en formulieren, en begrensde resources
- De tolerante DOM accepteert veel voorkomende weggelaten eindtags, behoudt de tekstvolgorde, slaat inactieve documentgebieden over en handhaaft
MaxDOMNodes - De cascade ondersteunt type-, class-, ID-, gelijkheidsattribuut-, afstammelings- en directe-kindselectors, bronvolgorde, specificiteit, inline-declaraties,
!important,@media printen@page-marges - Gepagineerde layout ondersteunt blokstroom, koppen, lijsten, randen, achtergronden, boxafstanden, expliciete paginabreken, tabellen, afbeeldingen en automatische overflow-paginering
- Tekstinvoeren, knoppen, selectievakjes, radioknoppen, tekstgebieden en selectebedieningen worden weergegeven als statische verschijningen of als native AcroForm-velden wanneer
CreateAcroFormsis ingeschakeld
Gemeten paragrafen en richting
Paragrafen breken af op de gemeten advances van het huidige font, inclusief fontwisselingen, vette en cursieve reeksen, letterafstand, woordafstand, expliciete regeleinden en Oost-Aziatische tekegrenzen; uitlijning en decoratie worden apart toegepast op elke resulterende regel
direction: ltr, direction: rtl en het HTML-dir-attribuut kiezen de paragrafechtrichting; dir="auto" gebruikt de Unicode-richting van het eerste sterke teken
Op Windows worden bidirectionele scriptreeksen met Uniscribe opgelost en over stijlgrenzen heen geherordend, terwijl de bestaande PDF-tekstengine de glyphshaping binnen elke reeks verzorgt; de richting van het document, de viewer-preferences en de opgeslagen paginatekststatus worden na de regel hersteld
Inline-richtingoverrides, bdi en bdo gebruiken momenteel de paragraafordening en leveren een hdkLayoutFallback-diagnostiek op; unicode-bidi valt buiten dit profiel, en scriptshaping volgt nog steeds de shapingconfiguratie van het document
Paragraaffragmentatie
widows en orphans zijn overgeërfde positieve gehele getallen, beide met defaultwaarde 2; paginering gebruikt de gemeten regelboxen in plaats van een geschat aantal tekens
De importer verplaatst een paragraaf of past diens splitsing aan zodat het gevraagde minimum aantal regels vóór en na een paginabreuk overblijft; break-inside: avoid houdt een paragraaf bij elkaar wanneer die op een frisse pagina past
Wanneer een pagina de gevraagde beperking niet aan kan, komt rendering vooruit door de beperking te verslappen en hdkPaginationConstraint te registreren; elk paginafragment krijgt zijn eigen achtergrond en rand
Optionele afbreking
hyphens: none onderdrukt discretionaire breuken, en de default hyphens: manual gebruikt U+00AD of ­; een zichtbaar koppelteken wordt alleen uitgegeven wanneer de gekozen breuk wordt gebruikt
hyphens: auto roept bovendien OnHyphenate aan met het woord en de overgeërfde HTML-lang-waarde; zonder callback blijven handmatige breuken staan en volgt een layout-fallback, want er wordt geen taalwoordenboek meegeleverd
Breekposities tellen UTF-16-code-eenheden vanaf het begin van het woord; ongeldige, buiten bereik zijnde, surrogaat-splitsende en basis-combining-mark-splitsende posities worden genegeerd
THPDFHTMLHyphenationEvent = procedure(
Sender: TObject;
const WordText, Language: WideString;
var BreakPositions: TArray<Integer>
) of object;
Begrensde flex- en gridboxen
display: flex ondersteunt row, row-reverse, column en column-reverse; kinderen in een rij gebruiken expliciete breedtes of delen de resterende breedte, en positieve flex-grow-waarden wegen de extra ruimte
Rijen ondersteunen justify-content start, end, center, space-between, space-around en space-evenly, plus start-, end-, center- en stretch-uitlijning op de dwarsas; kolomstroom ondersteunt natuurlijke verticale layout en geeft een diagnostiek voor niet-ondersteunde verdeling met vaste hoogte of dwarsasuitlijning
display: grid ondersteunt positieve vaste-lengte- en fr-kolomsporen, inclusief begrensde repeat(n, tracks) met maximaal 64 kolommen; cellen worden in bronvolgorde geplaatst, één rij per keer vullend
grid-column: span N en grid-column-end: span N laten een kind opeenvolgende sporen en hun tussenliggende tussenruimten bezetten; een item dat niet in de huidige rij past, schuift door naar de volgende rij, en spans groter dan het aantal sporen leveren een layout-fallback op
flex-wrap: wrap begint een nieuwe regel wanneer de expliciete breedte en tussenruimte van het volgende item niet passen; elke regel past flex-grow en justify-content onafhankelijk toe, terwijl row-reverse en RTL posities binnen elke regel omdraaien zonder items tussen regels te verplaatsen
gap accepteert één of twee lengtes, met onafhankelijke row-gap- en column-gap-overrides; parallelle rijen blijven op één pagina en worden vóór het tekenen gecontroleerd
Parallelle kinderen ondersteunen tekstblokken met inline-styling, recursief geneste gewone blokcontainers met padding, randen en achtergronden, geneste flex- en gridcontainers, afbeeldingen en statische of native formulierbedieningen
Afbeeldingen gebruiken bytes uit een callback of data-URI, behouden hun intrinsieke aspectratio wanneer geen hoogte is opgegeven en worden één keer per DOM-node gedecodeerd; preflight en fallback hergebruiken dezelfde gecachte afbeelding zonder een extra resourceverzoek te verbruiken
Alle kindboxen worden gemeten voordat een parallelle rij wordt getekend, dus niet-ondersteunde of te grote inhoud valt terug op verticale paginastroom zonder eerder getekende rijen te herhalen; geneste planning is begrensd op 64 niveaus en verbruikt het bestaande layoutbewerkingsbudget
Kinderen die omlopen en geen expliciete breedte hebben, nemen één volledige regel in beslag; tabellen en lijsten binnen parallelle kinderen, flex basis en shrink, wrap-reverse, intrinsieke sporbemating, grid-rijsporen en rijspans, en expliciete gridplaatsing blijven buiten dit profiel en leveren waarneembare diagnostiek op
Diagnostiek voor niet-ondersteunde CSS
Diagnostics stelt records bloot met Kind, Subject, Value en MessageText; OnDiagnostic ontvangt dezelfde informatie tijdens rendering
Onbekende eigenschappen, niet-ondersteunde waarden, niet-ondersteunde selectors en niet-ondersteunde at-rules worden genegeerd met een diagnostiek, inclusief declaraties in verder ongebruikte stylesheet-regels; pseudo-selectors worden overgeslagen in plaats van als gewone typeselectors behandeld
StrictCSS, standaard uit, geeft EHPDFHTMLUnsupportedCSS bij een diagnostiek; eerdere inhoud kan al zijn uitgegeven, dus aanroepers die all-or-nothing-import willen, gebruiken een apart document
MaxDiagnostics staat standaard op 256 en begrenst bewaarde records; DiagnosticCount en callback-levering blijven waarneembaar nadat de opslaglimiet is bereikt, en een niet-positieve limiet schakelt recordopslag uit
Begrensde resources
Externe stylesheets, afbeeldingen en @font-face-fonts zijn uitgeschakeld tenzij OnResource hun bytes levert, zodat HTML-import nooit impliciet een bestand of netwerkverbinding opent
@font-face ondersteunt één url(...)-bron, optioneel format('truetype') of format('opentype'), een familie-alias, normale of cursieve stijl en normaal, bold, 400 of 700 gewicht; font-display accepteert de standaardbeleidsregels omdat offline import resources synchroon laadt
Fonts moeten inbedbare TrueType- of OpenType-sfnt-resources zijn met een ASCII-Windows-familienaam van maximaal 31 tekens; WOFF, fontcollecties, local(...), variable-descriptors en bronlijsten leveren diagnostiek op
Geaccepteerde fonts worden privé geregistreerd in het procesgeheugen op Windows en blijven eigendom van het document totdat het wordt vernietigd, dus het vrijgeven van de importer vóór EndDoc maakt uitgestelde fontinbedding niet ongeldig
data:-resources en callbackresultaten delen de limieten van MaxResources, MaxResourceBytes en MaxTotalResourceBytes
MaxDecodedImageBytes staat standaard op 128 MiB en begrenst de gedecodeerde afbeeldingscache onafhankelijk op vier bytes per pixel; BMP- en PNG-dimensies worden vóór decodering gecontroleerd, en elke geaccepteerde afbeelding wordt gecontroleerd voordat die wordt bewaard
MaxDOMNodes, MaxCSSRules en MaxLayoutOperations begrenzen onafhankelijk parsing, cascadeconstructie en layoutwerk
THPDFHTMLResourceEvent = procedure(
Sender: TObject;
const URI: WideString;
ResourceKind: THPDFHTMLResourceKind;
var Data: TBytes;
var ContentType: string;
var Handled: Boolean
) of object;
Statistieken
THPDFHTMLImportStatistics rapporteert de profielversie, geparste knooppunten, CSS-regels, layoutbewerkingen, paginabreken, tabellen, formulierbedieningen, resourceverzoeken, geaccepteerde en afgewezen ladingen, geaccepteerde resourcebytes, gemeten tekstregels, regels met afbreking, diagnostiek, flexcontainers en gridcontainers
OnLineLayout ontvangt na het uitzenden van de echte PDF-tekst de op nul gebaseerde pagina- en paragraafregelindexen van de regel, de oorsprong, gemeten breedte en hoogte, de logische tekst, de richting en de afbrekingsvlag
Elke RenderHTML5-aanroep reset de statistiekrecord, en budgetoverschrijdingen werpen EHPDFHTMLImportBudget
Voorbeeld
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;
Zie ook: THPDFPage.TextOutHTML, Declaratief-Layout-DOM, AcroForm-ondersteuning