Import podziału na strony z RichEdit i RTF
THotPDF.ImportRTF ładuje RTF do Windows RichEdit, a THotPDF.ImportRichEdit dzieli istniejącą kontrolkę na strony PDF
Model renderowania
Podział na strony używa EM_FORMATRANGE z ograniczonym prostokątem strony i emituje każdą stronę przez enhanced metafile
Tekst, zmiany fontów, formatowanie akapitów, linie wektorowe i inne operacje GDI pozostają tekstem lub operatorami wektorowymi PDF, gdy pipeline'y RichEdit i EMF wystawiają je w ten sposób
Dane pict RTF i statyczne prezentacje OLE obsługiwane przez RichEdit są przenoszone tą samą ścieżką EMF, więc rasterizacja całej strony nie jest potrzebna
Wątki i cykl życia
- Wywołuj oba API tylko na głównym wątku GUI procesu
- Wywołaj
BeginDocprzed importem, żeby istniała bieżąca strona UseCurrentPagedecyduje, czy pierwsza importowana strona ponownie użyje bieżącej strony, czy doda nową- Pozycja strumienia RTF jest przywracana po ograniczonym odczycie
- Pamięć podręczna formatowania RichEdit jest zwalniana po sukcesie, anulowaniu lub porażce
Bezpieczeństwo i budżety
THPDFRTFImportOptions.Default ogranicza wejście do 16 MiB, tekst do 4 000 000 znaków, wyjście do 1 000 stron, a narastające dane EMF do 256 MiB
OLE osadzone jest domyślnie wyłączone i wymaga AllowOLE=True; włączaj je tylko dla zaufanego RTF, bo Windows RichEdit wystawia powierzchnię zainstalowanych handlerów OLE
CancellationToken jest sprawdzany między stronami i zwraca risCancelled bez renderowania kolejnych stron
Raportowanie wyniku
THPDFRTFImportStatistics raportuje bajty wejścia, zakres znaków, strony wyrenderowane i dodane, narastające bajty metafile, obecność OLE, ucięcie i stabilny THPDFRTFImportStatus
Wyczerpanie budżetu, nieprawidłowa geometria strony, wywołania z niewłaściwego wątku, podział bez postępu i porażki renderowania zwracają False ze specyficznym statusem
Przykład
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)]
);
Zobacz też: THotPDF.ImportRTF, THotPDF.ImportRichEdit, Import Form XObject z SVG