HTML5 Paged-Media İçe Aktarma
THPDFHTMLImporter.RenderHTML5, tolere edici HTML5 markup'ını ve print CSS'i sayfalandırılmış PDF içeriğine dönüştürür; kompakt eski RenderHTML yolu yerinde kalır
CSS uzunlukları ile importer'ın Margin, BaseFontSize, ListIndent ve BlockSpacing değerleri punto cinsindendir; böylece her iki renderer da THotPDF.Resolution neye ayarlanmışsa olsun aynı sayfayı üretir. Import öncesi ve sonrası kendi çizimleriniz 1/Resolution inç birimini kullanmaya devam eder
Bildirim
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;
Profile sözleşmesi
HTML5ProfileVersion 1 döndürür; HTML5ProfileMilestones ise parser ve cascade, paged layout, tablolar ve formlar ile sınırlı kaynaklar aşamalarını bildirir
- Tolere edici DOM, yaygın atlanmış end tag'leri kabul eder, metin sırasını korur, etkin olmayan belge bölgelerini atlar ve
MaxDOMNodessınırını uygular - Cascade; type, class, ID, eşitlik attribute, descendant ve doğrudan çocuk selector'larını, kaynak sırasını, specificity'yi, inline declaration'ları,
!important,@media printve@pagemargin'lerini destekler - Paged layout; block flow, başlıklar, listeler, border'lar, arka planlar, box aralığı, açık page break'ler, tablolar, image'ler ve otomatik overflow pagination'ı destekler
- Text input'lar, butonlar, check box'lar, radio button'lar, text area'lar ve select kontrolleri,
CreateAcroFormsetkin olduğunda statik görünüşler ya da native AcroForm field'ları olarak render edilir
Ölçülen paragraflar ve yön
Paragraflar, font değişimlerini, kalın ve italik dizileri, harf aralığını, kelime aralığını, açık satır sonlarını ve Doğu Asya karakter sınırlarını kapsayacak şekilde geçerli fontun ölçülen ilerlemeleriyle sarılır; hizalama ve süsleme, oluşan her satıra ayrı ayrı uygulanır
direction: ltr, direction: rtl ve HTML dir attribute'ü paragraf yönünü seçer; dir="auto" ilk güçlü karakterin Unicode yönünü kullanır
Windows'ta çift yönlü betik dizileri Uniscribe ile çözümlenir ve stil sınırları boyunca yeniden sıralanır; her dizi içindeki glyph shaping mevcut PDF metin motoru tarafından halledilir. Belgenin yönü, viewer preferences ve kaydedilen sayfa metin durumu satırdan sonra geri yüklenir
Inline yön override'ları, bdi ve bdo şu anda paragraf sıralamasını kullanır ve bir hdkLayoutFallback teşhisi üretir; unicode-bidi bu profilin dışındadır, betik shaping yine belgenin shaping yapılandırmasını izler
Paragraf parçalanması
widows ve orphans miras alınan pozitif tamsayılardır ve ikisi de varsayılan olarak 2'dir; pagination, tahmini bir karakter sayısı yerine ölçülen satır kutularını kullanır
Importer, page break öncesi ve sonrasında istenen minimum satır sayısını bırakmak için bir paragrafı taşır veya bölünmesini ayarlar; break-inside: avoid, paragraf temiz bir sayfaya sığdığında onu bir arada tutar
Bir sayfa istenen kısıtı barındıramadığında render, kısıtı gevşeterek ve hdkPaginationConstraint kaydederek ilerler; her sayfa parçası kendi arka planını ve border'ını alır
İsteğe bağlı heceleme
hyphens: none isteğe bağlı satır sonlarını bastırır; varsayılan hyphens: manual U+00AD veya ­ kullanır. Görünür bir tire yalnızca seçilen kırılma kullanıldığında yazılır
hyphens: auto ayrıca OnHyphenate'i kelime ve miras alınan HTML lang değeriyle çağırır; callback olmadan manuel kırılmaları korur ve bir layout fallback bildirir, çünkü hiçbir dil sözlüğü paketle gelmez
Kırılma konumları kelimenin başından itibaren UTF-16 kod birimlerini sayar; geçersiz, aralık dışı, vekil ayıran ve temel combining-mark ayıran konumlar yok sayılır
THPDFHTMLHyphenationEvent = procedure(
Sender: TObject;
const WordText, Language: WideString;
var BreakPositions: TArray<Integer>
) of object;
Sınırlı flex ve grid kutuları
display: flex, row, row-reverse, column ve column-reverse destekler; satır çocukları açık genişlikler kullanır veya kalan genişliği paylaşır, pozitif flex-grow değerleri ek alanı tartar
Satırlar justify-content start, end, center, space-between, space-around ve space-evenly değerlerini, ayrıca start, end, center ve stretch çapraz eksen hizalamasını destekler; column akışı doğal dikey yerleşimi destekler ve desteklenmeyen sabit yükseklikli dağıtım veya çapraz eksen hizalaması için teşhis üretir
display: grid, 64 sütuna kadar sınırlı repeat(n, tracks) dahil pozitif sabit uzunluklu ve fr sütun track'lerini destekler; hücreler kaynak sırasına göre yerleştirilir ve tek seferde bir satır doldurur
grid-column: span N ve grid-column-end: span N, bir çocuğun ardışık track'leri ve aralarındaki boşlukları kaplamasına izin verir; mevcut satıra sığmayan öğe sonraki satıra geçer, track sayısından büyük span'lar layout fallback üretir
flex-wrap: wrap, sonraki öğenin açık genişliği ve boşluğu sığmadığında yeni bir satır başlatır; her satır flex-grow ve justify-content değerlerini bağımsız uygular, row-reverse ve RTL ise öğeleri satırlar arasında taşımadan her satır içindeki konumları tersine çevirir
gap bir veya iki uzunluk kabul eder; bağımsız row-gap ve column-gap override'ları vardır. Paralel satırlar tek sayfada kalır ve boyamadan önce denetlenir
Paralel çocuklar; inline stilli metin bloklarını, padding, border ve arka planlı özyinelemeli iç içe normal block container'ları, iç içe flex ve grid container'ları, image'leri ve statik ya da native form kontrollerini destekler
Image'ler callback ile sağlanan veya data URI baytlarını kullanır, yükseklik belirtilmediğinde kendi en-boy oranını korur ve DOM node başına bir kez çözülür; preflight ve fallback başka kaynak isteği harcamadan aynı önbellekteki image'i yeniden kullanır
Tüm çocuk kutular herhangi bir paralel satır boyanmadan önce ölçülür; böylece desteklenmeyen veya aşırı büyük içerik, önceden boyanmış satırları tekrarlamadan dikey sayfa akışına döner. İç içe planlama 64 düzeyle sınırlıdır ve mevcut layout-operation bütçesini harcar
Açık genişliği olmayan sarmalanan çocuklar tam bir satır kaplar; paralel çocuklar içindeki tablolar ve listeler, flex basis ve shrink, wrap-reverse, içsel track boyutlandırma, grid satır track'leri ve satır span'ları ile açık grid yerleşimi bu profilin dışında kalır ve gözlemlenebilir teşhisler üretir
Desteklenmeyen CSS teşhisleri
Diagnostics; Kind, Subject, Value ve MessageText içeren kayıtları açığa çıkarır; OnDiagnostic aynı bilgileri render sırasında alır
Bilinmeyen property'ler, desteklenmeyen değerler, selector'lar ve at-rule'lar bir teşhisle yok sayılır; kullanılmayan stylesheet rule'ları içindeki declaration'lar da buna dahildir. Pseudo selector'lar sıradan type selector'ı gibi işlenmek yerine atlanır
Varsayılan olarak kapalı olan StrictCSS, bir teşhistte EHPDFHTMLUnsupportedCSS fırlatır; daha önceki içerik çoktan yazılmış olabilir, bu yüzden all-or-nothing import isteyen çağıranlar ayrı bir belge kullanmalı
MaxDiagnostics varsayılan olarak 256'dır ve tutulan kayıtları sınırlar; depolama sınırına ulaşıldıktan sonra DiagnosticCount ve callback teslimi gözlemlenebilir kalır, pozitif olmayan bir sınır kayıt depolamayı devre dışı bırakır
Sınırlı kaynaklar
Harici stylesheet, image ve @font-face fontları, OnResource baytlarını sağlamadıkça devre dışıdır; böylece HTML import hiçbir zaman örtük olarak dosya ya da network bağlantısı açmaz
@font-face; tek bir url(...) kaynağını, isteğe bağlı format('truetype') veya format('opentype') değerini, bir aile takma adını, normal veya italic stili ve normal, bold, 400 ya da 700 ağırlığını destekler. Offline import kaynakları senkron yüklediği için font-display standart politikaları kabul eder
Fontlar, en fazla 31 karakterlik ASCII Windows aile adına sahip gömülebilir TrueType veya OpenType sfnt kaynakları olmalıdır; WOFF, font koleksiyonları, local(...), variable descriptor'lar ve kaynak listeleri teşhis üretir
Kabul edilen fontlar Windows'ta işlem belleğinde özel olarak kaydedilir ve belge yok edilene dek onun mülkiyetinde kalır; böylece EndDoc'ten önce importer'ı serbest bırakmak ertelenmiş font gömmeyi geçersiz kılmaz
data: kaynakları ve callback sonuçları, MaxResources, MaxResourceBytes ve MaxTotalResourceBytes limitlerini paylaşır
MaxDecodedImageBytes varsayılan olarak 128 MiB'dir ve çözülen image önbelleğini piksel başına dört baytla bağımsız olarak sınırlar; BMP ve PNG boyutları çözmeden önce denetlenir, kabul edilen her resim tutulmadan önce denetlenir
MaxDOMNodes, MaxCSSRules ve MaxLayoutOperations; parsing, cascade kurma ve layout işini bağımsız olarak sınırlar
THPDFHTMLResourceEvent = procedure(
Sender: TObject;
const URI: WideString;
ResourceKind: THPDFHTMLResourceKind;
var Data: TBytes;
var ContentType: string;
var Handled: Boolean
) of object;
İstatistikler
THPDFHTMLImportStatistics; profile sürümünü, ayrıştırılan node'ları, CSS rule'larını, layout işlemlerini, page break'leri, tabloları, form kontrollerini, kaynak isteklerini, kabul edilen ve reddedilen yüklemeleri, kabul edilen kaynak baytlarını, ölçülen metin satırlarını, hecelenen satırları, teşhisleri, flex container'ları ve grid container'ları bildirir
OnLineLayout, gerçek PDF metni yazıldıktan sonra satırın sıfır tabanlı sayfa ve paragraf satır indekslerini, orijinini, ölçülen genişlik ve yüksekliğini, mantıksal metnini, yönünü ve heceleme bayrağını alır
Her RenderHTML5 çağrısı istatistik kaydını sıfırlar ve bütçe ihlalleri EHPDFHTMLImportBudget fırlatır
Örnek
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;
Ayrıca bkz: THPDFPage.TextOutHTML, Bildirimsel Layout DOM, AcroForm Desteği