콘텐츠 연산자 방문자
HotPDF는 디코딩된 콘텐츠 스트림의 모든 연산을 참조 카운트 방문자 인터페이스와 Delphi 이벤트 콜백을 통해 노출하여 호출자가 PDF 토크나이저를 작성할 필요가 없도록 합니다
검사 및 측정
THPDFContentOperatorEventData는 스트림 시작, 연산자, 스트림 종료 단계를 식별하고 현재 소스 연산자가 실행되기 전에 연산 인덱스, 연산자 이름, 피연산자 수, 바이트 범위, 결정적 상태를 보고합니다
상태에는 그래픽 상태, 텍스트 객체, 마크 콘텐츠, 호환성 섹션 깊이가 포함되며, THPDFContentOperatorView는 완전한 소스 스트림을 복사하지 않고 온디맨드 읽기 전용 연산 또는 피연산자 바이트를 제공합니다
변환 또는 거부
콜백은 coaKeep, coaDelete, coaReplace, coaStop, coaReject 중 하나를 선택합니다
삭제 및 대체 동작은 정렬된 비중첩 AST 편집이 되며, 거부는 출력을 게시하지 않고 coaStop은 현재 연산자 뒤에서 성공적으로 완료됩니다
상태 스냅샷은 연산이 대체되어도 원래 소스 순회를 따르므로 반복 검사가 결정적으로 유지됩니다
예산 및 검증
THPDFContentOperatorVisitOptions.Default는 MaxSourceBytes, MaxOperators, MaxLexemes, MaxDepth, MaxReplacementBytes, ValidateOutput을 구성합니다
순회 중 취소를 검사하며, 변환된 출력은 로드된 페이지에 반환되거나 쓰여지기 전에 같은 lexeme, 깊이, 연산자 한계 아래에서 다시 파싱됩니다
잘못된 입력, 유효하지 않은 대체 출력, 콜백 예외, 한계 실패, 명시적 거부는 THPDFContentOperatorVisitStatus와 진단으로 구분됩니다
로드된 페이지 등록
PDF.ContentOperatorVisitor := Visitor;
PDF.OnContentOperator := HandleContentOperator;
Options := THPDFContentOperatorVisitOptions.Default;
if PDF.VisitLoadedPageContentOperators(0, True, Options,
CancellationToken, Statistics) then
UseStatistics(Statistics);
인터페이스 방문자는 둘 다 할당된 경우 이벤트 콜백보다 먼저 실행되며, 둘 다 호출 스레드에서 동기적으로 실행됩니다
ApplyChanges=True인 경우 HotPDF는 완전한 변환 스트림을 먼저 검증한 다음 페이지 콘텐츠를 하나의 그래프 변경으로 대체하고 컴파일된 디스플레이 리스트, 래스터, 디스크, 글꼴 디코더, 썸네일 캐시를 무효화합니다