Імпорт сторінкування RichEdit і RTF
THotPDF.ImportRTF завантажує RTF у Windows RichEdit, а THotPDF.ImportRichEdit розбиває наявний елемент керування на сторінки PDF
Модель рендерингу
Сторінкування використовує EM_FORMATRANGE з обмеженим прямокутником сторінки та випромінює кожну сторінку через розширений метафайл
Текст, зміни шрифтів, форматування абзаців, векторні правила та інші операції GDI залишаються текстовими або векторними операторами PDF, коли конвеєри RichEdit та EMF надають їх таким чином
Дані pict RTF і статичні презентації OLE, підтримувані RichEdit, переносяться тим самим шляхом EMF, тому рівнеформатна растеризація сторінки не потрібна
Потоки та життєвий цикл
- Викликайте обидва API лише з головного потоку GUI процесу
- Викличте
BeginDocперед імпортом, щоб поточна сторінка існувала UseCurrentPageкерує, чи перевикористовує перша імпортована сторінка поточну чи додає нову сторінку- Позиція потоку RTF відновлюється після обмеженого читання
- Кеш форматування RichEdit звільняється після успіху, скасування чи помилки
Безпека та бюджети
THPDFRTFImportOptions.Default обмежує введення до 16 МБ, текст до 4 000 000 символів, вивід до 1 000 сторінок та накопичені дані EMF до 256 МБ
Вбудований OLE вимкнено за замовчуванням і він вимагає AllowOLE=True; його ввімкнення слід обмежити довіреним RTF, оскільки Windows RichEdit володіє встановленою поверхнею обробників OLE
CancellationToken перевіряється між сторінками та повертає risCancelled без рендерингу додаткових сторінок
Звітування результату
THPDFRTFImportStatistics звітує вхідні байти, діапазон символів, відмальовані та додані сторінки, накопичені байти метафайла, наявність OLE, обрізання та стабільний THPDFRTFImportStatus
Вичерпання бюджету, недійсна геометрія сторінки, виклики з неправильного потоку, сторінкування без прогресу та помилки рендерингу повертають False із конкретним статусом
Приклад
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)]
);
Дивіться також: THotPDF.ImportRTF, THotPDF.ImportRichEdit, Імпорт форм-об'єктів SVG