Advanced Rendering Semantics

로드된 페이지 렌더링은 transparency group, soft mask, Type 3 glyph procedure, 해상도 인식 가시 이미지 영역 디코딩을 적용하면서 중첩 Form XObject 상태를 보존합니다

Dashed path strokes

네이티브 path 렌더링은 홀수 길이 배열, 소수 길이, round 또는 square cap을 가진 길이 0의 그려지는 dash까지 포함해 완전한 dash 배열과 그 위상을 보존하며, dash 패턴은 subpath마다 다시 시작됩니다

단색 stroke와 gradient pattern stroke 클립은 하나의 한계가 정해진 dash 지오메트리 경로를 공유하고, 연속된 그려지는 구간 내부의 join을 유지하며, 닫힌 윤곽선의 시작점을 넘어 그려지는 구간을 이어 줍니다

dash 길이는 렌더러의 현재 변환 평균 스케일을 유지하고, 곡선 분할은 적응형 디바이스 공간 평탄화를 사용합니다. fill 도색과 보류 중인 클리핑은 계속 원본의 분할되지 않은 path를 사용합니다

Transparency groups

Soft masks

transfer 및 sampled function

/TR2가 /TR보다 우선하고, 단일 함수는 모든 RGB 출력 채널에 적용되며, 네 함수 배열은 처음 세 항목을 독립 적용하면서 /Identity와 /Default 항목을 유지합니다

새 transfer 상태를 적용하면 모든 채널이 원자적으로 교체되므로, identity 항목이 이전 그래픽 상태의 조회 값을 물려받을 수 없습니다

Type 0 sampled function은 1~4 입력/출력 차원, /BitsPerSample 값 1/2/4/8/12/16/24/32, 역/순방향 /Encode 매핑, 독립 /Decode 범위, 다중 선형 보간, 다차원 cubic 보간, 1차원 /Order 3 데이터의 natural cubic spline을 지원합니다

디코딩된 샘플 바이트, 검증된 차원, 매핑, 3차 도함수는 렌더링 스레드당 64MiB로 제한된 8항목 LRU를 공유하고, 과대하거나 malformed인 function은 활성 transfer 조회 테이블을 부분 교체하지 않은 채 실패합니다

Halftone screens

Type 6/10/16 threshold 배열은 정확히 디코딩된 길이, big-endian 16비트 threshold, 가산 구성 요소 비교, 기울어진 screen이나 두 사각형 screen을 펼치지 않는 컴팩트 주기 스트립으로 직접 실행됩니다

Type 5 딕셔너리는 /Gray와 필수 /Default 폴백과 함께 독립 /Red, /Green, /Blue screen을 고르며, 선택된 각 screen은 전역 transfer function을 재정의할 수 있습니다

검증된 threshold 바이트와 정규화된 지오메트리는 렌더러당 64MiB로 제한된 64항목 LRU를 공유하고, malformed 차원, 과대 할당, 중첩 Type 5 딕셔너리, 페이로드 길이 불일치는 활성 screen 상태 전체를 연속톤 모드로 둡니다

Type 3 glyphs

Type 3 CharProc는 폰트 딕셔너리의 현재 리소스 scope, Form 지원, 클리핑, 이미지, pattern, 상한 재귀와 함께 완전한 content operator 엔진으로 실행됩니다

d0와 d1은 glyph 메트릭을 공급하고, d1 procedure는 PDF imaging 모델이 요구하는 대로 호출자가 고른 색을 유지합니다

반복 CharProc는 폰트, glyph, 선형 디바이스 행렬, 색상 상태가 일치하면 디코딩·토큰화된 display list를 재사용합니다. 이동은 동적으로 남아 다른 위치의 반복 문자가 하나의 항목을 공유합니다

렌더러별 LRU는 최대 256항목과 131,072 token을 유지하고, 16,384 token을 넘는 CharProc은 우회하며, 동작을 GetLastType3GlyphCacheStats로 보고합니다

클리핑·다운스케일된 이미지 영역

축 정렬 image XObject는 가시 소스 바운드만 요청하고 가시 디바이스 픽셀 크기를 디코딩 경로에 넘깁니다

soft mask가 붙은 이미지는 그려지는 크기 그대로 통째로 디코딩되고, 마스크도 같은 크기로 디코딩됩니다. 클리핑이 그려지는 부분을 제한하는 동안 마스크가 이미지와 정렬을 유지하기 위해서입니다. JPEG 마스크는 축소 DCT 디코더를 씁니다

렌더링 시 양방향으로 그려지는 크기의 최소 두 배 이상인 디코딩된 region은 그려지거나 캐시되기 전에 면적 평균으로 정확히 그려지는 크기로 축소됩니다. 큰 이미지를 작게 그리면 decode cache에 들어가므로 두 번 그리는 group이나 반복 페이지가 이를 재사용하고, soft mask는 그 크기에서 픽셀 단위로 적용됩니다. stencil image mask는 전체 해상도를 유지하며, 공개 region 디코딩 메서드는 문서화된 크기를 반환합니다

JPEG 2000은 웨이블릿 재구성과 래스터 확장 전에 두 목표 차원을 모두 만족하도록 고른 2의 거듭제곱 해상도 레벨을 선택해 디코더의 네이티브 region API와 결합합니다

tile 주소 지정이 가능한 JPEG 2000 codestream은 THPDFJpeg2000Decoder.LoadTileFromByteArray로 검증된 tile 하나를 직접 디코딩할 수도 있고, tile 격자 메타데이터와 출력 바이트 한도는 디코더가 노출합니다

네이티브 region이 여러 독립 tile과 겹치면 LoadRegionFromByteArrayParallel은 워커별 전용 OpenJPEG 상태를 할당하고 완성된 래스터를 결정론적 행 우선 순서로 합성합니다. 취소, 출력 한도, 실효 peak-memory 예산이 스케줄링을 멈추거나 순차 폴백을 고를 수 있습니다

Region := PDF.DecodeLoadedImageRegion(ImageStream, 128, 64, 640, 480);
try
  Canvas.Draw(0, 0, Region);
finally
  Region.Free;
end;

관련 API