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가 필요합니다. 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 가져오기