Nhập phân trang RichEdit và RTF
THotPDF.ImportRTF nạp RTF vào RichEdit của Windows và THotPDF.ImportRichEdit phân trang một control hiện có thành các trang PDF
Mô hình render
Phân trang dùng EM_FORMATRANGE với một hình chữ nhật trang có giới hạn và phát từng trang qua một enhanced metafile
Văn bản, thay đổi font, định dạng đoạn, quy tắc vector và các thao tác GDI khác vẫn là các toán tử văn bản hoặc vector PDF bất cứ khi nào các pipeline RichEdit và EMF phơi bày chúng theo cách đó
Dữ liệu pict RTF và các bản trình bày OLE tĩnh được RichEdit hỗ trợ được mang qua cùng đường EMF, nên không cần raster hóa toàn trang
Luồng và vòng đời
- Chỉ gọi cả hai API trên luồng chính GUI của tiến trình
- Gọi
BeginDoctrước khi nhập để một trang hiện tại tồn tại UseCurrentPageđiều khiển liệu trang nhập đầu tiên tái sử dụng trang hiện tại hay thêm một trang mới- Vị trí stream RTF được khôi phục sau một lần đọc có giới hạn
- Cache định dạng RichEdit được giải phóng sau thành công, hủy bỏ hoặc thất bại
Bảo mật và ngân sách
THPDFRTFImportOptions.Default giới hạn đầu vào ở 16 MiB, văn bản ở 4.000.000 ký tự, đầu ra ở 1.000 trang và dữ liệu EMF tích lũy ở 256 MiB
OLE nhúng bị vô hiệu hóa theo mặc định và yêu cầu AllowOLE=True; bật nó nên được giới hạn ở RTF đáng tin cậy vì RichEdit của Windows sở hữu bề mặt handler OLE đã cài
CancellationToken được kiểm tra giữa các trang và trả về risCancelled mà không render thêm trang
Báo cáo kết quả
THPDFRTFImportStatistics báo cáo byte đầu vào, dải ký tự, số trang đã render và thêm, byte metafile tích lũy, sự hiện diện OLE, cắt ngắn và một THPDFRTFImportStatus ổn định
Cạn kiệt ngân sách, hình học trang không hợp lệ, gọi sai luồng, phân trang không tiến triển và lỗi render trả về False với một trạng thái cụ thể
Ví dụ
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)]
);
Xem thêm: THotPDF.ImportRTF, THotPDF.ImportRichEdit, SVG Form XObject Import