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
- Chame ambas as APIs apenas na thread principal GUI do processo
- Chame
BeginDocantes de importar para que uma página atual exista UseCurrentPagecontrola se a primeira página importada reutiliza a página atual ou anexa uma nova página- A posição do stream RTF é restaurada após uma leitura limitada
- O cache de formato RichEdit é liberado após sucesso, cancelamento ou falha
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