Importación de paginación RichEdit y RTF
THotPDF.ImportRTF carga RTF en RichEdit de Windows y THotPDF.ImportRichEdit pagina un control existente en páginas PDF
Modelo de renderizado
La paginación usa EM_FORMATRANGE con un rectángulo de página acotado y emite cada página mediante un metarchivo mejorado
El texto, los cambios de fuente, el formato de párrafo, las reglas vectoriales y otras operaciones GDI siguen siendo operadores de texto o vectoriales PDF siempre que las canalizaciones RichEdit y EMF los expongan de esa manera
Los datos pict de RTF y las presentaciones OLE estáticas admitidas por RichEdit se transportan por la misma ruta EMF, por lo que no se requiere rasterización de página completa
Subprocesos y ciclo de vida
- Llame a ambas APIs solo en el subproceso principal GUI del proceso
- Llame a
BeginDocantes de importar para que exista una página actual UseCurrentPagecontrola si la primera página importada reutiliza la página actual o añade una página nueva- La posición del flujo RTF se restaura después de una lectura acotada
- La caché de formato RichEdit se libera después del éxito, la cancelación o el fallo
Seguridad y presupuestos
THPDFRTFImportOptions.Default limita la entrada a 16 MiB, el texto a 4.000.000 de caracteres, la salida a 1.000 páginas y los datos EMF acumulados a 256 MiB
El OLE incorporado está deshabilitado de forma predeterminada y requiere AllowOLE=True; habilitarlo debe limitarse a RTF de confianza porque RichEdit de Windows es propietario de la superficie de controladores OLE instalada
CancellationToken se comprueba entre páginas y devuelve risCancelled sin renderizar páginas adicionales
Informe de resultados
THPDFRTFImportStatistics informa de los bytes de entrada, el intervalo de caracteres, las páginas renderizadas y añadidas, los bytes de metarchivo acumulados, la presencia de OLE, la truncación y un THPDFRTFImportStatus estable
El agotamiento del presupuesto, la geometría de página no válida, las llamadas desde el subproceso equivocado, la paginación sin progreso y los fallos de renderizado devuelven False con un estado específico
Ejemplo
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)]
);
Véase también: THotPDF.ImportRTF, THotPDF.ImportRichEdit, Importación de Form XObject SVG