THPDFRenderDocAccess Record
renderer를 문서 서비스에 묶습니다. 참조 해석, 스트림 읽기, 이미지 디코딩, 폰트 찾기, 레이어 가시성 평가가 여기에 속합니다
선언
THPDFRenderDocAccess= record
Context: Pointer;
SharedCache: THPDFRendererSharedCache;
ShareRenderCaches: boolean;
// v2.375.0 generic indirect-ref resolver (any object type). The typed
// Resolve* fields below predate it and return nil for non-matching
// types, which silently dropped indirect refs to arrays (e.g. a
// /ColorSpace entry pointing at a [/Separation ...] array object)
ResolveObject: function(Context: Pointer; Obj: THPDFObject): THPDFObject;
ResolveDictionary: function(Context: Pointer; Obj: THPDFObject): THPDFDictionaryObject;
ResolveStream: function(Context: Pointer; Obj: THPDFObject): THPDFStreamObject;
ReadDecodedStreamBytes: function(Context: Pointer; Stream: THPDFStreamObject; out Bytes: TBytes): boolean;
AcquireDecodedImageStream: function(Context: Pointer;
Stream: THPDFStreamObject): IHPDFDecodedBitmapHandle;
DecodeImageStream: function(Context: Pointer; Stream: THPDFStreamObject): TBitmap;
BeginProgressiveImageDecode: function(Context: Pointer;
Stream: THPDFStreamObject;
CancellationToken: THPDFCancellationToken): IHPDFProgressiveImageDecoder;
DecodeImageRegion: function(Context: Pointer; Stream: THPDFStreamObject;
RegionLeft, RegionTop, RegionRight, RegionBottom,
DesiredWidth, DesiredHeight: Integer): TBitmap;
AcquireDecodedImageRegion: function(Context: Pointer;
Stream: THPDFStreamObject; RegionLeft, RegionTop, RegionRight,
RegionBottom, DesiredWidth,
DesiredHeight: Integer): IHPDFDecodedBitmapHandle;
// v2.425.0 inline-image decoder: builds a throwaway stream from the raw
// ID..EI bytes and the normalised BI key set, then decodes it without the
// ObjectNumber-keyed cache (inline images have no object number). Returns
// a TBitmap the caller owns, or nil on failure. Nil hook = inline images
// are not rendered (legacy behaviour)
DecodeInlineImage: function(Context: Pointer; const Bytes: TBytes;
const Keys: THPDFInlineImgKeys): TBitmap;
// Colour-key /Mask array of an image XObject as a soft mask, white where
// the image shows and black where it is masked out. Returns a TBitmap the
// caller owns, or nil when the image has no usable colour-key mask; a nil
// hook draws such images unmasked
DecodeColorKeyMask: function(Context: Pointer;
Stream: THPDFStreamObject): TBitmap;
// Look up a font dictionary by resource key in a Resources dict, following
// indirect refs at both /Resources and /Font levels. Returns nil if absent
ResolveFontDict: function(Context: Pointer; PageObj: THPDFDictionaryObject;
const FontKey: AnsiString): THPDFDictionaryObject;
// v2.377.0 optional-content visibility oracle: evaluates an /OC property
// object (OCG or OCMD) against the document's layer states. Nil hook or
// a True result means the content is drawn
EvalOCVisibility: function(Context: Pointer; PropObj: THPDFObject): boolean;
CancellationToken: THPDFCancellationToken;
ColourIntent: Integer;
FallbackPolicy: THPDFRenderFallbackPolicy;
FallbackDiagnosticLimit: Integer;
OverprintPreview: boolean;
ProofICCProfile: TBytes;
OutputICCProfile: TBytes;
BlackPointCompensation: boolean;
SeparationPlate: AnsiString;
end;
유닛
HPDFPageRenderer
필드
| 필드 | 목적 |
|---|---|
Context | 호출자가 공급하는 context 포인터. 모든 콜백의 첫 인자로 넘어가며 문서가 자기 자신을 여기 묶습니다 |
SharedCache | ShareRenderCaches가 켜져 있을 때 여러 페이지가 공유할 수 있는 renderer 캐시 |
ShareRenderCaches | 문서가 동시 renderer끼리 decode 캐시를 공유하게 허용하면 True |
ResolveObject | 어떤 객체 타입이든 다루는 범용 간접 참조 resolver. 타입별 resolver는 맞지 않는 타입에 nil을 반환해서 추가됐습니다 |
ResolveDictionary | 간접 참조를 dictionary 객체로 해석합니다. 다른 타입은 nil |
ResolveStream | 간접 참조를 stream 객체로 해석합니다 |
ReadDecodedStreamBytes | 스트림을 완전히 디코딩해 byte 배열로 읽습니다 |
AcquireDecodedImageStream | image XObject를 공유 reference-counted bitmap 핸들로 디코딩합니다 |
DecodeImageStream | image XObject를 호출자 소유 비트맵으로 디코딩합니다 |
BeginProgressiveImageDecode | 큰 이미지 스트림용 취소 가능 progressive 디코더를 시작합니다 |
DecodeImageRegion | 이미지의 하위 영역을 요청한 픽셀 크기로 디코딩합니다 |
AcquireDecodedImageRegion | 공유 reference-counted bitmap 핸들을 반환하는 region 변형 |
DecodeInlineImage | raw ID..EI 바이트와 정규화된 BI 키 집합으로 inline image를 디코딩하며 객체 번호 캐시는 우회합니다. nil hook이면 inline image를 그리지 않습니다 |
DecodeColorKeyMask | image XObject의 컬러 키 /Mask 배열을 이미지 크기의 흑백 soft mask로 바꿉니다. 이미지에 쓸 만한 컬러 키 마스크가 없으면 nil이며, nil hook은 이런 이미지를 마스크 없이 그립니다 |
ResolveFontDict | 리소스 키로 폰트 사전을 찾습니다. /Resources와 /Font 수준의 간접 참조를 따라가며, 없으면 nil |
EvalOCVisibility | /OC property 객체를 문서 레이어 상태 기준으로 평가합니다. nil hook이거나 True이면 콘텐츠를 그립니다 |
CancellationToken | 긴 decode 작업 중 확인하는 cancellation token |
ColourIntent | 렌더링된 graphics state에 적용되는 색 처리 intent |
FallbackPolicy | 지원하지 않는 기능을 무시할지, 보고할지, 엄격한 실패로 다룰지 선택 |
FallbackDiagnosticLimit | 폴백하는 동안 모으는 diagnostic 메시지 수를 제한합니다 |
OverprintPreview | overprint preview 시뮬레이션을 켭니다 |
ProofICCProfile | 색 파이프라인의 proofing 쪽에 쓰는 ICC profile 바이트 |
OutputICCProfile | 출력 디바이스를 기술하는 ICC profile 바이트 |
BlackPointCompensation | ICC 변환에서 black point compensation을 켭니다 |
SeparationPlate | 분리할 separation plate 이름. 비어 있으면 평범하게 렌더링합니다 |
사용 참고 사항
- THotPDF는 내부
MakeRenderDocAccess헬퍼로 모든 hook을 묶습니다. 애플리케이션은 레코드를 채우는 대신 완성된 레코드를 받습니다 - 커스텀 render backend는 문서에 직접 손대지 않고
THPDFPageRenderBackendRequest에서 이 hook들을 읽습니다 DecodeInlineImage나EvalOCVisibility를 nil로 두면 inline image를 건너뛰고 optional content를 모두 그리는 구버전 동작으로 돌아갑니다