Importazione con paginazione da RichEdit e RTF
THotPDF.ImportRTF carica RTF in un RichEdit Windows e THotPDF.ImportRichEdit impagina un controllo esistente in pagine PDF
Modello di rendering
La paginazione usa EM_FORMATRANGE con un rettangolo di pagina limitato ed emette ogni pagina attraverso un enhanced metafile
Testo, cambi di font, formattazione dei paragrafi, righe vettoriali e altre operazioni GDI restano operatori PDF di testo o vettoriali quando le pipeline RichEdit ed EMF li espongono così
I dati pict RTF e le presentazioni OLE statiche supportate dal RichEdit viaggiano sullo stesso percorso EMF, quindi non serve rasterizzazione dell'intera pagina
Threading e ciclo di vita
- Chiama entrambe le API solo sul GUI thread principale del processo
- Chiama
BeginDocprima di importare così esiste una pagina corrente UseCurrentPagecontrolla se la prima pagina importata riusa la pagina corrente o ne aggiunge una nuova- La posizione dello stream RTF viene ripristinata dopo una lettura limitata
- La cache di formato del RichEdit viene rilasciata dopo successo, cancellazione o fallimento
Sicurezza e budget
THPDFRTFImportOptions.Default limita l'input a 16 MiB, il testo a 4.000.000 di caratteri, l'output a 1.000 pagine e i dati EMF accumulati a 256 MiB
L'OLE incorporato è disabilitato per default e richiede AllowOLE=True; abilitarlo andrebbe limitato a RTF fidati perché il RichEdit Windows possiede la superficie dei gestori OLE installati
CancellationToken viene controllato tra le pagine e restituisce risCancelled senza renderizzare pagine aggiuntive
Report dei risultati
THPDFRTFImportStatistics riporta byte di input, intervallo di caratteri, pagine renderizzate e aggiunte, byte di metafile accumulati, presenza OLE, troncamento e uno THPDFRTFImportStatus stabile
Esaurimento del budget, geometria di pagina non valida, chiamate dal thread sbagliato, paginazione senza progresso e fallimenti di rendering restituiscono False con uno stato specifico
Esempio
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)]
);
Vedi anche: THotPDF.ImportRTF, THotPDF.ImportRichEdit, Importazione di SVG Form XObject