RichEdit and RTF Pagination Import
THotPDF.ImportRTF načte RTF do ovladače RichEdit systému Windows a THotPDF.ImportRichEdit rozdělí existující ovladač na stránky PDF
Rendering model
Paginalizace používá EM_FORMATRANGE s ohraničeným obdélníkem stránky a emituje každou stránku prostřednictvím vylepšeného metafile
Text, změny fontů, formátování odstavců, vektorové čáry a další operace GDI zůstávají operátory textu nebo vektorů PDF vždy, když je pipeline RichEdit a EMF takto vystaví
Data RTF pict a statické prezentace OLE podporované ovladačem RichEdit jsou přenášeny stejnou cestou EMF, takže není vyžadována rastralizace celé stránky
Threading and lifecycle
- Volejte obě rozhraní pouze na hlavním vlákně GUI procesu
- Před importem zavolejte
BeginDoc, aby existovala aktuální stránka UseCurrentPageřídí, zda první importovaná stránka znovu použije aktuální stránku nebo připojí novou stránku- Pozice streamu RTF se po omezeném čtení obnoví
- Cache formátování RichEdit se uvolní po úspěchu, zrušení nebo selhání
Security and budgets
THPDFRTFImportOptions.Default omezuje vstup na 16 MiB, text na 4 000 000 znaků, výstup na 1 000 stránek a nahromaděná data EMF na 256 MiB
Vložené OLE je ve výchozím stavu zakázáno a vyžaduje AllowOLE=True; jeho povolení by mělo být omezeno na důvěryhodné RTF, protože ovladač RichEdit systému Windows vlastní nainstalovanou plochu handlů OLE
CancellationToken se kontroluje mezi stránkami a vrací risCancelled bez vykreslení dalších stránek
Result reporting
THPDFRTFImportStatistics hlásí vstupní bajty, rozsah znaků, vykreslené a přidané stránky, nahromaděné bajty metafile, přítomnost OLE, zkrácení a stabilní THPDFRTFImportStatus
Vyčerpání rozpočtu, neplatná geometrie stránky, volání z nesprávného vlákna, paginalizace bez pokroku a selhání vykreslování vracejí False se specifickým stavem
Example
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)]
);
See also: THotPDF.ImportRTF, THotPDF.ImportRichEdit, SVG Form XObject Import