RichEdit ve RTF Sayfalandırma İçe Aktarımı
THotPDF.ImportRTF, RTF'yi Windows RichEdit'e yükler; THotPDF.ImportRichEdit ise mevcut bir control'ü PDF sayfalarına sayfalandırır
Render modeli
Sayfalandırma, sınırlı bir sayfa dikdörtgeniyle EM_FORMATRANGE kullanır ve her sayfayı enhanced metafile üzerinden çıkarır
Metin, yazı tipi değişimleri, paragraf biçimlendirme, vektör çizgiler ve diğer GDI işlemleri, RichEdit ve EMF pipeline'ları onları bu şekilde sunduğunda PDF metni veya vektör operator'leri olarak kalır
RTF pict verisi ve RichEdit'in desteklediği statik OLE sunumları aynı EMF yoluyla taşınır; böylece tüm sayfayı rasterleştirmek gerekmez
Threading ve yaşam döngüsü
- Her iki API'yi de yalnızca process'in GUI ana thread'inde çağırın
- İçe aktarmadan önce
BeginDocçağırın ki geçerli bir sayfa mevcut olsun UseCurrentPage, ilk içe aktarılan sayfanın geçerli sayfayı yeniden kullanacağını mı yoksa yeni bir sayfa ekleyeceğini mi kontrol eder- RTF stream konumu, sınırlı bir okumanın ardından geri yüklenir
- RichEdit format cache'i başarı, iptal veya hata sonrasında serbest bırakılır
Güvenlik ve bütçeler
THPDFRTFImportOptions.Default, girdiyi 16 MiB ile, metni 4,000,000 karakterle, çıktıyı 1,000 sayfayla ve birikmiş EMF verisini 256 MiB ile sınırlar
Gömülü OLE varsayılan olarak devre dışıdır ve AllowOLE=True gerektirir; etkinleştirmek güvenilir RTF ile sınırlı tutulmalıdır, çünkü Windows RichEdit kurulu OLE handler yüzeyinin sahibidir
CancellationToken sayfalar arasında kontrol edilir ve ek sayfalar render etmeden risCancelled döndürür
Sonuç raporlama
THPDFRTFImportStatistics, girdi baytlarını, karakter aralığını, render edilen ve eklenen sayfaları, birikmiş metafile baytlarını, OLE varlığını, kesilme durumunu ve kararlı bir THPDFRTFImportStatus değerini raporlar
Bütçe tükenmesi, geçersiz sayfa geometrisi, yanlış thread'den yapılan çağrılar, ilerleme göstermeyen sayfalandırma ve render hataları belirli bir status ile False döndürür
Örnek
Options := THPDFRTFImportOptions.Default;
Options.PageWidth := 612;
Options.PageHeight := 792;
Options.MarginLeft := 54;
Options.MarginRight := 54;
Document.BeginDoc;
RTFStream.Position := 0;
if not Document.ImportRTF(RTFStream, Options, Statistics) then
raise Exception.CreateFmt(
'RTF import failed with status %d',
[Ord(Statistics.Status)]
);
Ayrıca bkz.: THotPDF.ImportRTF, THotPDF.ImportRichEdit, SVG Form XObject Import