Import de pagination RichEdit et RTF
THotPDF.ImportRTF charge du RTF dans Windows RichEdit et THotPDF.ImportRichEdit pagine un contrôle existant en pages PDF
Modèle de rendu
La pagination utilise EM_FORMATRANGE avec un rectangle de page borné et émet chaque page via un métafichier amélioré
Le texte, les changements de polices, la mise en forme de paragraphes, les règles vectorielles et autres opérations GDI restent des opérateurs PDF de texte ou de vecteur lorsque les pipelines RichEdit et EMF les exposent ainsi
Les données pict RTF et les présentations OLE statiques prises en charge par RichEdit sont portées par le même chemin EMF, de sorte qu'aucune rasterisation de page complète n'est requise
Threading et cycle de vie
- Appelez les deux API uniquement sur le thread principal GUI du processus
- Appelez
BeginDocavant l'import afin qu'une page courante existe UseCurrentPagecontrôle si la première page importée réutilise la page courante ou ajoute une nouvelle page- La position du flux RTF est restaurée après une lecture bornée
- Le cache de format RichEdit est libéré après succès, annulation ou échec
Sécurité et budgets
THPDFRTFImportOptions.Default limite l'entrée à 16 Mio, le texte à 4 000 000 caractères, la sortie à 1 000 pages et les données EMF cumulées à 256 Mio
L'OLE imbriqué est désactivé par défaut et exige AllowOLE=True ; son activation devrait être limitée au RTF de confiance car Windows RichEdit possède la surface de gestionnaires OLE installée
CancellationToken est vérifié entre les pages et retourne risCancelled sans rendre de pages supplémentaires
Reporting de résultats
THPDFRTFImportStatistics signale les octets d'entrée, la plage de caractères, les pages rendues et ajoutées, les octets de métafichier cumulés, la présence d'OLE, la troncature et un THPDFRTFImportStatus stable
L'épuisement du budget, la géométrie de page invalide, les appels sur le mauvais thread, la pagination sans progression et les échecs de rendu retournent False avec un statut spécifique
Exemple
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)]
);
Voir aussi : THotPDF.ImportRTF, THotPDF.ImportRichEdit, Import SVG Form XObject