HTML5-paged-mediaimport
THPDFHTMLImporter.RenderHTML5 konverterar tolerant HTML5-uppmärkning och tryck-CSS till paginerat PDF-innehåll samtidigt som den kompakta äldre RenderHTML-sökvägen bevaras
CSS-längder och importörens Margin, BaseFontSize, ListIndent och BlockSpacing är i punkter, så båda renderarna producerar samma sida oavsett vad THotPDF.Resolution är satt till; din egen ritning före och efter importen använder fortfarande 1/Resolution tum
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 returnerar 1 och HTML5ProfileMilestones rapporterar parser och kaskad, paged-layout, tabeller och formulär samt begränsade resurser
- Den toleranta DOM:en accepterar vanliga uteslutna sluttaggar, bevarar textordning, hoppar över inaktiva dokumentregioner och tillämpar
MaxDOMNodes - Kaskaden stöder typ-, klass-, ID-, likhetsattribut-, ättling- och direkta barnselektorer, källordning, specificitet, inline-deklarationer,
!important,@media printoch@page-marginaler - Paged-layout stöder blockflöde, rubriker, listor, kanter, bakgrunder, boxavstånd, explicita sidbrytningar, tabeller, bilder och automatisk paginering vid överfullt innehåll
- Textinmatningar, knappar, kryssrutor, radioknappar, textområden och select-kontroller renderas som statiska utseenden eller nativa AcroForm-fält när
CreateAcroFormsär aktiverat
Mätta stycken och riktning
Stycken radbryts med det aktuella typsnittets uppmätta steg, inklusive typsnittsbyten, fet- och kursivkörningar, bokstavsavstånd, ordavstånd, explicita radbrytningar och östasiatiska teckengränser; justering och utsmyckning tillämpas separat på varje resulterande rad
direction: ltr, direction: rtl och HTML-attributet dir väljer styckets riktning; dir="auto" använder det första starka tecknets Unicode-riktning
På Windows löses tvåriktade skriptkörningar med Uniscribe och ordnas om över stilgränser, medan den befintliga PDF-textmotorn hanterar glyf-shaping inom varje körning; dokumentets riktning, visarinställningar och sparade sidtexttillstånd återställs efter raden
Inline-riktningåsidosättningar, bdi och bdo använder för närvarande styckeordningen och ger en hdkLayoutFallback-diagnostik; unicode-bidi ligger utanför denna profil, och skript-shaping följer fortfarande dokumentets shaping-konfiguration
Styckesfragmentering
widows och orphans är ärvda positiva heltal, båda med standardvärdet 2; pagineringen använder de uppmätta radrutorna i stället för ett uppskattat antal tecken
Importören flyttar ett stycke eller justerar dess delning så att det begärda minsta antalet rader lämnas före och efter ett sidbryte; break-inside: avoid håller ihop ett stycke när det får plats på en ny sida
När en sida inte rymmer den begärda begränsningen går renderingen vidare genom att mildra begränsningen och registrera hdkPaginationConstraint; varje sidfragment får sin egen bakgrund och kant
Valfri avstavning
hyphens: none undertrycker diskretionära avstavningar, och standardvärdet hyphens: manual använder U+00AD eller ­; ett synligt bindestreck genereras endast när den valda avstavningen används
hyphens: auto anropar dessutom OnHyphenate med ordet och det ärvda HTML-värdet lang; utan en callback behålls manuella avstavningar och en layoutfallback rapporteras, eftersom ingen språkordlista medföljer
Avstavningspositioner räknar UTF-16-kodenheter från ordets början; ogiltiga positioner, positioner utanför intervallet, positioner som delar surrogat och grundläggande positioner som delar kombinationstecken ignoreras
THPDFHTMLHyphenationEvent = procedure(
Sender: TObject;
const WordText, Language: WideString;
var BreakPositions: TArray<Integer>
) of object;
Avgränsade flex- och grid-rutor
display: flex stöder row, row-reverse, column och column-reverse; radbarn använder explicita bredder eller delar återstående bredd, och positiva flex-grow-värden viktar extra utrymme
Rader stöder justify-content-värdena start, end, center, space-between, space-around och space-evenly, plus start-, end-, center- och stretch-justering längs tväraxeln; kolumnflödet stöder naturlig vertikal layout och genererar en diagnostik för distribuerad fast höjd eller tväraxeljustering som inte stöds
display: grid stöder positiva spår med fast längd och fr-kolumnspår, inklusive avgränsad repeat(n, tracks) med upp till 64 kolumner; celler placeras i källordning och fyller en rad i taget
grid-column: span N och grid-column-end: span N låter ett barn uppta på varandra följande spår och mellanrummen dem emellan; ett objekt som inte får plats på den aktuella raden flyttas till nästa rad, och spann större än antalet spår ger en layoutfallback
flex-wrap: wrap påbörjar en ny rad när nästa objekts explicita bredd och mellanrum inte får plats; varje rad tillämpar oberoende flex-grow och justify-content, medan row-reverse och RTL vänder positionerna inom varje rad utan att flytta objekt mellan rader
gap accepterar en eller två längder, med oberoende åsidosättanden i row-gap och column-gap; parallella rader stannar på en sida och kontrolleras före målning
Parallella barn stöder textblock med inline-styling, rekursivt nästlade vanliga blockbehållare med utfyllnad, kanter och bakgrunder, nästlade flex- och grid-behållare, bilder samt statiska eller nativa formulärkontroller
Bilder använder byte från callback eller data-URI, behåller sitt inneboende sidförhållande när ingen höjd anges och avkodas en gång per DOM-nod; preflight och fallback återanvänder samma cachade bild utan att förbruka en extra resursförfrågan
Alla underordnade rutor mäts innan någon parallell rad målas, så innehåll som inte stöds eller är för stort faller tillbaka på vertikalt sidflöde utan att upprepa tidigare målade rader; nästlad planering avgränsas till 64 nivåer och förbrukar den befintliga layoutoperationsbudgeten
Radbrytningsbara barn utan explicit bredd upptar en hel rad; tabeller och listor inuti parallella barn, flex-basis och krympning, wrap-reverse, inbyggd spårstorleksbestämning, grid-radspår och radspann samt explicit grid-placering ligger fortfarande utanför denna profil och ger observerbar diagnostik
Diagnostik för CSS som inte stöds
Diagnostics exponerar poster med Kind, Subject, Value och MessageText; OnDiagnostic tar emot samma information under renderingen
Okända egenskaper, värden som inte stöds, selektorer som inte stöds och at-regler som inte stöds ignoreras med en diagnostik, inklusive deklarationer i i övrigt oanvända stilmallsregler; pseudoselektorer hoppas över i stället för att behandlas som vanliga typselektorer
StrictCSS, avstängt som standard, höjer EHPDFHTMLUnsupportedCSS vid en diagnostik; tidigare innehåll kan redan ha genererats, så anropare som kräver allt-eller-inget-import bör använda ett separat dokument
MaxDiagnostics har standardvärdet 256 och avgränsar de lagrade posterna; DiagnosticCount och callback-leverans förblir observerbara efter att lagringsgränsen nåtts, och en icke-positiv gräns stänger av postlagringen
Begränsade resurser
Externa stilmallar, bilder och @font-face-teckensnitt är inaktiverade om inte OnResource levererar deras byte, så HTML-importen öppnar aldrig en fil eller nätverksanslutning implicit
@font-face stöder en url(...)-källa, valfri format('truetype') eller format('opentype'), ett familjealias, normal eller kursiv stil samt vikten normal, bold, 400 eller 700; font-display accepterar standardpolicyerna eftersom offlineimport läser in resurserna synkront
Teckensnitt måste vara inbäddningsbara TrueType- eller OpenType-sfnt-resurser med ett ASCII-Windows-familjenamn på högst 31 tecken; WOFF, typsnittssamlingar, local(...), variabla deskriptorer och källistor ger diagnostik
Accepterade teckensnitt registreras privat i processminnet på Windows och förblir ägda av dokumentet tills det förstörs, så att importören frigörs före EndDoc utan att den uppskjutna typsnittsinbäddningen ogiltigförklaras
data:-resurser och callbackresultat delar gränserna MaxResources, MaxResourceBytes och MaxTotalResourceBytes
MaxDecodedImageBytes har standardvärdet 128 MiB och avgränsar oberoende den avkodade bildcachen till fyra byte per pixel; BMP- och PNG-dimensioner kontrolleras före avkodning, och varje godtagen bild kontrolleras innan den behålls
MaxDOMNodes, MaxCSSRules och MaxLayoutOperations avgränsar oberoende parsing, kaskadkonstruktion och layoutarbete
THPDFHTMLResourceEvent = procedure(
Sender: TObject;
const URI: WideString;
ResourceKind: THPDFHTMLResourceKind;
var Data: TBytes;
var ContentType: string;
var Handled: Boolean
) of object;
Statistik
THPDFHTMLImportStatistics rapporterar profilversionen, parsade noder, CSS-regler, layoutoperationer, sidbrytningar, tabeller, formulärkontroller, resursförfrågningar, accepterade och avvisade laddningar, accepterade resursbyte, uppmätta textrader, avstavade rader, diagnostik, flex-behållare och grid-behållare
OnLineLayout tar emot radens nollbaserade sid- och styckeradindex, origo, uppmätt bredd och höjd, logisk text, riktning och avstavningsflagga efter att den faktiska PDF-texten har genererats
Varje RenderHTML5-anrop återställer statistikposten, och budgetöverträdelser höjer EHPDFHTMLImportBudget
Exempel
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 även: THPDFPage.TextOutHTML, Declarative Layout DOM, AcroForm Support