Importação de paginação RichEdit e RTF

THotPDF.ImportRTF carrega RTF no RichEdit do Windows e THotPDF.ImportRichEdit pagina um controle existente em páginas PDF

Modelo de renderização

A paginação usa EM_FORMATRANGE com um retângulo de página limitado e emite cada página por meio de um metarquivo aprimorado

Texto, mudanças de fonte, formatação de parágrafo, regras vetoriais e outras operações GDI permanecem operadores de texto ou vetor PDF sempre que os pipelines RichEdit e EMF os expõem dessa forma

Dados pict de RTF e apresentações OLE estáticas suportadas pelo RichEdit são transportados pelo mesmo caminho EMF, portanto nenhuma rasterização de página inteira é necessária

Threading e ciclo de vida

Segurança e orçamentos

THPDFRTFImportOptions.Default limita a entrada a 16 MiB, o texto a 4.000.000 caracteres, a saída a 1.000 páginas e os dados EMF acumulados a 256 MiB

OLE embutido é desativado por padrão e exige AllowOLE=True; habilitá-lo deve ser limitado a RTF confiável porque o RichEdit do Windows possui a superfície do manipulador OLE instalado

CancellationToken é verificado entre páginas e retorna risCancelled sem renderizar páginas adicionais

Relatório de resultados

THPDFRTFImportStatistics relata bytes de entrada, faixa de caracteres, páginas renderizadas e adicionadas, bytes de metarquivo acumulados, presença de OLE, truncamento e um THPDFRTFImportStatus estável

Esgotamento de orçamento, geometria de página inválida, chamadas em thread errada, paginação sem progresso e falhas de renderização retornam False com um status específico

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

Veja também: THotPDF.ImportRTF, THotPDF.ImportRichEdit, Importação de Form XObject SVG