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

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