RichEdit and RTF Pagination Import

THotPDF.ImportRTF loads RTF into Windows RichEdit and THotPDF.ImportRichEdit paginates an existing control into PDF pages

Rendering model

A paginação usa EM_FORMATRANGE com um retângulo de página limitado e emite cada página através de um enhanced metafile

O texto, as mudanças de fonte, a formatação de parágrafos, as linhas vetoriais e as restantes operações GDI continuam a ser operadores PDF de texto ou vetoriais sempre que os pipelines do RichEdit e de EMF os exponham dessa forma

Os dados pict de RTF e as apresentações OLE estáticas suportadas pelo RichEdit seguem o mesmo caminho EMF, pelo que não é necessário rasterizar páginas inteiras

Threading and lifecycle

Segurança e orçamentos

THPDFRTFImportOptions.Default limita a entrada a 16 MiB, o texto a 4 000 000 de carateres, a saída a 1000 páginas e os dados EMF acumulados a 256 MiB

O OLE incorporado está desativado por predefinição e exige AllowOLE=True; a sua ativação deve limitar-se a RTF de confiança, porque o RichEdit do Windows controla a superfície de handlers OLE instalados

CancellationToken é verificado entre páginas e devolve risCancelled sem renderizar mais páginas

Result reporting

THPDFRTFImportStatistics regista os bytes de entrada, o intervalo de carateres, as páginas renderizadas e adicionadas, os bytes acumulados de metafile, a presença de OLE, o truncamento e um THPDFRTFImportStatus estável

Budget exhaustion, invalid page geometry, wrong-thread calls, no-progress pagination, and rendering failures return False with a specific status

Exemplo

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)]
  );

Ver também: THotPDF.ImportRTF, THotPDF.ImportRichEdit, SVG Form XObject Import