RichEdit と RTF ページ分割インポート
THotPDF.ImportRTF は RTF を Windows RichEdit にロードし、THotPDF.ImportRichEdit は既存のコントロールを PDF ページにページ分割します
レンダリングモデル
ページ分割は、境界付きページ矩形を持つ EM_FORMATRANGE を使用し、拡張メタファイルを通じて各ページを出力します
テキスト、フォント変更、段落書式、ベクタールール、その他の GDI 操作は、RichEdit と EMF パイプラインがそのように公開する場合は常に 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 を必要とします。Windows RichEdit がインストールされた OLE ハンドラーサーフェスを所有するため、それを有効にすることは信頼された RTF に限定する必要があります
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 インポート