RichEdit 與 RTF 分頁匯入
THotPDF.ImportRTF 把 RTF 載入 Windows RichEdit,THotPDF.ImportRichEdit 則把現有控制項分頁成 PDF 頁面
轉譯模型
分頁使用 EM_FORMATRANGE 搭配有界的頁面矩形,並透過加強型中繼檔輸出每一頁
只要 RichEdit 與 EMF 管線以那種方式呈現,文字、字型變更、段落格式、向量線與其他 GDI 操作都會維持成 PDF 文字或向量運算子
RTF pict 資料與 RichEdit 支援的靜態 OLE 展示同樣走 EMF 路徑,因此不需要整頁點陣化
執行緒與生命週期
- 兩個 API 都只能在程序的 GUI 主執行緒呼叫
- 匯入前先呼叫
BeginDoc,確保存在目前頁面 UseCurrentPage決定第一個匯入頁面要重用目前頁面還是附加新頁- 有界讀取之後會還原 RTF 串流位置
- 成功、取消或失敗之後都會釋放 RichEdit 格式快取
安全性與預算
THPDFRTFImportOptions.Default 限制輸入 16 MiB、文字 4,000,000 字元、輸出 1,000 頁,累計 EMF 資料 256 MiB
內嵌 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 Form XObject 匯入