RichEdit- en RTF-paginatie-import
THotPDF.ImportRTF laadt RTF in Windows RichEdit en THotPDF.ImportRichEdit pagineert een bestaande besturing naar PDF-pagina's
Rendermodel
Paginatie gebruikt EM_FORMATRANGE met een begrensd paginarechthoek en verzendt elke pagina via een uitgebreid metabestand
Tekst, lettertypewijzigingen, alineaopmaak, vectorlijnen en andere GDI-bewerkingen blijven PDF-tekst- of vectoroperatoren wanneer de RichEdit- en EMF-pijplijnen ze zo blootleggen
RTF-pict-gegevens en door RichEdit ondersteunde statische OLE-weergaven worden via hetzelfde EMF-pad vervoerd, dus er is geen rasterisatie van hele pagina's vereist
Threading en levenscyclus
- Roep beide API's alleen aan op de GUI-hoofdthread van het proces
- Roep
BeginDocaan vóór import zodat er een huidige pagina bestaat UseCurrentPagebepaalt of de eerste geïmporteerde pagina de huidige pagina hergebruikt of een nieuwe pagina toevoegt- De RTF-streampositie wordt hersteld na een begrensde lezing
- De RichEdit-opmaakcache wordt vrijgemaakt na succes, annulering of een fout
Beveiliging en budgetten
THPDFRTFImportOptions.Default beperkt invoer tot 16 MiB, tekst tot 4.000.000 tekens, uitvoer tot 1.000 pagina's en geaccumuleerde EMF-gegevens tot 256 MiB
Ingebouwde OLE is standaard uitgeschakeld en vereist AllowOLE=True; het inschakelen ervan moet worden beperkt tot vertrouwde RTF omdat Windows RichEdit het geïnstalleerde OLE-handlersoppervlak bezit
CancellationToken wordt tussen pagina's gecontroleerd en retourneert risCancelled zonder extra pagina's te renderen
Resultaatrapportage
THPDFRTFImportStatistics rapporteert invoerbytes, karakterbereik, gerenderde en toegevoegde pagina's, geaccumuleerde metabestandbytes, OLE-aanwezigheid, afkapping en een stabiele THPDFRTFImportStatus
Budgetuitputting, ongeldige paginageometrie, aanroepen vanaf de verkeerde thread, paginatie zonder voortgang en renderfouten retourneren False met een specifieke status
Voorbeeld
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)]
);
Zie ook: THotPDF.ImportRTF, THotPDF.ImportRichEdit, SVG Form XObject-import