네이티브 Linux Cairo 렌더러
HPDFHeadlessCairoDevice는 Cairo 이미지 서페이스와 FreeType으로 로드된 PDF 페이지를 RGB PNG로 렌더링하며, 디스플레이 서버나 PDF 리더가 필요 없습니다
THPDFHeadlessDocument.GetRenderAccess(PageIndex)에서 얻은 직렬 빌린 뷰를 넣고, 렌더링이 돌아올 때까지 그 문서를 로드된 채 변경 없이 유지하세요
Document := THPDFHeadlessDocument.Create;
try
Document.LoadFromFile('input.pdf');
Options := THPDFHeadlessRenderOptions.Default;
Info := HPDFRenderHeadlessPagePNGFile(
Document.GetRenderAccess(0), 'page.png', Options);
finally
Document.Free;
end;
런타임 의존성
네이티브 Linux는 libcairo.so.2, libfreetype.so.6, 표준 폰트 프로바이더의 Fontconfig 의존성을 씁니다. Helvetica, Times, Courier 대체용으로 적절한 폰트를 설치하세요
HOTPDF_CAIRO_LIBRARY와 HOTPDF_FREETYPE_LIBRARY로 첫 렌더링 전에 호환되는 라이브러리 경로를 명시적으로 고를 수 있습니다. 네이티브 폰트 캐시가 파괴 콜백을 남겨 둘 수 있으므로 성공적으로 로드된 모듈은 로드된 채 유지됩니다
이 네이티브 캐시가 HotPDF 폰트 파괴 콜백을 남겨 둘 수 있는 동안 호스트는 자신의 HotPDF 실행 파일, DLL, 패키지 코드를 로드된 채 유지해야 합니다. 캐시 수명과 무관하게 호스트 모듈을 언로드하는 것은 이 프로필의 범위 밖입니다
Windows는 같은 브리지로 호환되는 libcairo-2.dll과 libfreetype-6.dll을 씁니다. 런타임 바이너리와 라이선싱은 애플리케이션이 공급합니다
ICCBased 색은 추가로 liblcms2.so.2를 로드하고, JPEG는 libturbojpeg.so.0, JPEG 2000은 OpenJPEG 2.5 호환 libopenjp2.so.7을 씁니다. 이 의존성들은 해당 입력이 있을 때만 로드됩니다
HOTPDF_LCMS_LIBRARY, HOTPDF_TURBOJPEG_LIBRARY, HOTPDF_OPENJPEG_LIBRARY로 이 경로를 덮어쓸 수 있습니다. Windows 기본값은 lcms2.dll, turbojpeg.dll, openjp2.dll입니다
렌더링 프로필
지원되는 콘텐츠에는 경로 구성과 칠하기, nonzero·even-odd 채우기 규칙, 클리핑, 중첩 그래픽 상태, CTM 변환, 선 스타일, DeviceGray/RGB/CMYK 색, normal 알파, 자체 리소스·Matrix·BBox를 가진 반복 Form XObject가 있습니다
선 너비는 0일 수 있습니다. 0 w나 ExtGState LW=0이 요청한 PDF 헤어라인은 디바이스 공간 1픽셀 스트로크를 쓰고, 음수 너비는 거절됩니다
ExtGState D와 콘텐츠 스트림 d 연산자는 bounded 대시 검증을 공유합니다. 빈 실선 패턴, 홀수 길이 반복, 길이 0 항목, 소수 길이, 부호 있는 페이즈를 지원합니다
대시 패턴은 1e9 이하의 유한하고 음수가 아닌 길이를 최대 256개 받고, 비어 있지 않으면 양수 길이가 하나 이상 있어야 하며 절댓값이 1e9 이하인 유한한 페이즈를 씁니다. 각 항목은 연산 작업을 소비하고 임시 저장소는 작업 바이트 허가에 참여합니다
피연산자 배열은 수치 대시 배열과 TJ 텍스트 배열을 포함해 PDF 주석을 받습니다. 형식이 틀린 어휘 값과 닫는 괄호 누락은 공유 스캐너가 보관했다가 렌더러가 거절하고, 조용히 사라지지 않습니다
가로 텍스트는 텍스트 행렬, 명시적 PDF 너비, 표준 Helvetica/Times/Courier 어드밴스, 문자·단어 간격, 가로 배율, TJ 조정에 공유 글리프 인터프리터를 씁니다
임베드된 지원 폰트 프로그램은 해석된 글리프 ID로 FreeType을 씁니다. Unicode ToUnicode 매핑은 문서 텍스트 API로 계속 접근할 수 있고, 표준 폰트 래스터 모양은 설치된 대체 폰트에 따라 달라집니다
복합 텍스트는 Identity-H, Identity-V, 명시적 임베드 인코딩 CMap 스트림, 내장 UniJIS, UniGB, UniCNS, UniKS UCS2/UTF16 가로·세로 매핑을 지원합니다. 별도 설치 CMap 리소스는 필요 없습니다
세로 글리프 칠하기는 기본 및 명시적 DW2/W2 위치 벡터, 텍스트 라이즈, 가로 배율, 텍스트·그래픽 행렬, TJ 변위를 존중합니다. UTF-16 매핑은 보충 문자 코드를 받습니다
여덟 텍스트 렌더링 모드를 모두 지원합니다. 여기에는 ET에서 클립으로 누적되는 세로 fill/stroke/invisible 아웃라인도 포함됩니다. 임베드 인코딩 CMap 스트림은 자체 WMode와 비동일 CID 매핑을 유지합니다
투명한 fill+stroke 결합 연산은 객체 knockout 합성을 써서 겹치는 채우기가 스트로크로 새어 나오지 않게 합니다. Type3 글리프 프로시저는 자체 bounded 리소스와 폰트 행렬로 실행됩니다
이미지는 1/2/4/8/16비트 샘플과 Decode 배열, 스텐실·명시적·컬러키·소프트 마스크, 크기가 다른 마스크, Matte 복구를 받습니다. Interpolate가 없으면 최근접 이웃 샘플링을 쓰고 true면 이중 선형 샘플링을 고릅니다
JPX 코드스트림은 혼합 정밀도, 서브샘플링, 명시적 불투명도를 포함해 최대 26비트의 부호 있·없는 소스 컴포넌트를 받아 bounded 8비트 또는 16비트 샘플로 정규화합니다. JPX 이미지에서는 PDF 이미지 프로필이 요구하는 대로 이미지 사전의 BitsPerComponent와 스텐실이 아닌 Decode 항목을 무시합니다
인덱스 팔레트와 검증된 ICCBased 프로필→sRGB 변환을 이미지와 경로 색에 지원합니다. 프로필이 없는 DeviceCMYK는 단순 디바이스 변환을 유지합니다
ICCBased 변환은 Gray, RGB, CMYK, Lab, XYZ 프로필 시그니처를 받고 선언된 컴포넌트 수와 컴포넌트 범위를 엄격히 검증합니다
Lab 프로필 피연산자는 기본 범위 [0 100 -128 127 -128 127]의 물리 L a b 좌표를 쓰고, XYZ 피연산자는 컴포넌트당 기본 부호 없는 1.15 범위 [0 65535/32768]의 물리 X Y Z 좌표를 씁니다
XYZ 프로필 입력은 네이티브 호환성 확장이며 아카이브 PDF 부합을 의미하지 않습니다. Lab과 XYZ 소스 프로필은 지원되는 투명성 블렌딩 공간을 고르지 않습니다
ICC 스트림의 Range는 컴포넌트당 순서가 있는 유한한 값 두 개를 요구하고 색 피연산자에 상한을 둡니다. raw 이미지 Decode 기본값과 Indexed 조회 값은 이 컴포넌트 범위를 씁니다
CalGray, CalRGB, Lab는 경로, 텍스트, 이미지, Indexed 팔레트 베이스를 지원합니다. 매개변수는 엄격히 검증되고 CalRGB Matrix 항목은 PDF 열 순서를 따르며, Lab 컴포넌트와 이미지 Decode 기본값은 선언된 범위를 씁니다
CIE 색은 Bradford 색순응과 상대적 sRGB 출력을 씁니다. BlackPoint 메타데이터는 검증하고, 추가 블랙포인트 보정과 렌더링 인텐트 상태 정책은 별도 확장으로 남습니다
Separation과 DeviceN 복합 색은 경로, 텍스트, Indexed 베이스, 패킹 이미지에서 1~32개 tint 컴포넌트를 유지합니다. 디바이스 또는 CIE 대체 색은 bounded sampled, exponential, stitching, calculator tint 함수를 씁니다
ICCBased Lab/XYZ와 CalGray/CalRGB/Lab 대체 색 소스는 지원되는 투명성 그룹으로 변환되기 전까지 tint 변환을 통과하는 동안 물리 좌표를 유지합니다
다차원 sampled tint 함수는 선형·삼차 보간, Domain, Encode, Decode, 출력 Range, 최대 32비트 패킹 샘플 깊이를 지원합니다. 삼차 평가는 기존 스칼라 4노트 규약을 텐서 곱으로 확장하며, 짧은 차원에는 선형으로 폴백하고 작업과 취소는 bounded로 유지합니다
보간 규약과 별도 공식·리더 증거는 네이티브 sampled 색 함수를 참고하세요
Separation None과 None colorant만 담은 DeviceN 공간은 색도 knockout 모양도 만들지 않습니다. None이 섞인 컴포넌트는 여전히 대체 tint 변환에 도달합니다
Separation All은 중립 RGB 페이지 출력을 쓰면서 모든 가용 출력 colorant에 tint를 적용하고 CMYK 그룹 안에서 모든 프로세스 컴포넌트를 보존합니다
CMYK 그룹은 블렌딩 전에 원본 4컴포넌트 대체 tint 값을 받습니다. spot separation 판, NChannel 프로세스/colorant 선택, mixing-hint 시뮬레이션은 별도 확장으로 남습니다
터미널 이미지 콜백은 네이티브 JPEG, JPEG 2000, CCITT, JBIG2 디코딩 전에 문서 복호화와 앞선 스트림 필터를 유지합니다. JBIG2는 산술·Huffman 텍스트, MMR, 공유 전역 사전을 지원합니다
JPEG 2000은 서브샘플링된 부호 있는 컴포넌트, 추론된 색·샘플 선언, 임베드 ICC 프로필, 명시적 색 공간 오버라이드, SMaskInData를 통한 별도 또는 연관 불투명도를 지원합니다. 컴포넌트 값은 8비트 또는 16비트로 정규화되고 이미지 Decode 배열은 무시됩니다
임베드 또는 명시적 Lab/XYZ ICC 프로필은 물리 컴포넌트 범위를 씁니다. 연관 불투명도는 물리 좌표 매핑을 적용하기 전에 정규화된 저장 샘플에서 제거되며 Lab 오프셋 채널은 유지됩니다
그래픽 상태 SMask는 Alpha·Luminosity 그룹, 배경색, Form 행렬, 저장 상태 복원, sampled·exponential·stitching·bounded calculator 전이 함수를 지원합니다. 이미지 자체의 소프트 마스크가 그래픽 상태 소프트 마스크를 덮어씁니다
표준 PDF 블렌드 모드 열여섯 개를 모두 지원합니다. Form과 페이지 그룹은 isolated·nonisolated 합성, 객체 knockout, DeviceGray, DeviceRGB, DeviceCMYK, CalGray, CalRGB 또는 1·3·4컴포넌트 ICCBased 블렌딩 공간을 지원합니다
캘리브레이션된 그룹은 그룹 경계까지 네이티브 컴포넌트 값을 유지하고 역 캘리브레이션 변환으로 디바이스 또는 Lab 소스 색을 받습니다. Lab 자체는 유효한 블렌딩 공간이 아닙니다
캘리브레이션된 Luminosity 마스크는 그룹 좌표를 유지하고 전이 함수를 적용하기 전에 그룹 불투명도와 배경색을 포함해 CIE XYZ-Y를 평가합니다
knockout 합성은 객체의 기하학적 모양을 소프트 마스크 불투명도와 분리해 둡니다. 스텐실 구멍은 앞선 객체를 유지하고, 마스크된 경로는 자신이 칠한 지오메트리 전체에서 그것들을 대체합니다
중첩 knockout 그룹은 불투명도 0 객체를 포함해 자식들의 기하학적 모양 합집합을 유지합니다. nonisolated 자식 그룹은 감싸는 knockout 그룹의 초기 배경을 씁니다
CMYK 그룹은 보완적인 CMY와 블랙 컴포넌트를 별도의 bounded 이미지 평면에 보존하고 그룹 경계에서 결합 결과를 변환합니다. 분리 불가 블렌드 모드는 선택한 모드에 따라 블랙을 유지하거나 대체합니다
nonisolated 그룹은 추가로 bounded 불투명도 패스를 렌더링하고 초기 배경 기여를 제거한 뒤 들어오는 그룹 알파와 블렌드 모드를 한 번 적용합니다. 페이지 투명성 그룹은 페이지 배경에 합성하기 전에 isolated 서페이스를 씁니다
nonisolated Form은 감싸는 블렌딩 공간을 상속합니다. 명시적 group CS 항목이 초기 배경을 다른 공간으로 바꾸지는 않습니다
기존 normal 어노테이션 appearance는 변환된 BBox에서 Rect로 맞춰집니다. RenderAnnotations=false는 어느 용도에서든 appearance를 생략합니다
용도 기본값은 hruView이며, Hidden·NoView 어노테이션과 Invisible이 설정된 알 수 없는 어노테이션 타입은 건너뜁니다. PDF 2.0 RichMedia와 Projection을 포함한 ISO 32000 표준 어노테이션 타입은 지원되는 normal appearance가 있으면 Invisible만 설정된 경우 보이는 채로 남습니다
RichMedia와 Projection 인수 검증은 유효한 미디어 자산이나 연관된 기본 3D 뷰를 가진 기존 정적 normal appearance를 다룹니다. 미디어 재생과 대화형 3D 활성화는 이 래스터 경로의 범위 밖입니다
hruPrint는 Print가 설정되고 Hidden이 해제된 어노테이션만 칠합니다. Invisible은 어느 용도에서든 알 수 없는 어노테이션 타입을 숨기고, NoView는 인쇄를 막지 않으며, NoZoom은 인쇄 appearance 크기를 바꾸지 않습니다
normal appearance가 없을 때는 지원되는 어노테이션 메타데이터를 임시 appearance로 렌더링합니다. 지오메트리, Unicode FreeText, 정적 아이콘, 남은 경계는 네이티브 어노테이션 폴백을 참고하세요
보기 출력에서 어노테이션 NoZoom은 UserUnit을 유지하면서 appearance 크기에서 렌더 배율을 뺍니다. NoRotate는 어느 용도에서든 페이지 회전을 통과해도 맞춰진 appearance를 반듯하게 유지하고, 둘 다 변환된 좌상단 Rect 앵커와 페이지 클립을 유지합니다
기존 normal appearance가 있는 텍스트 어노테이션은 명시적 플래그와 무관하게 보기 출력에서 NoZoom·NoRotate처럼 동작합니다. 인쇄 출력은 NoZoom을 무시하는 동안 NoRotate 동작은 유지합니다
용도는 정적 래스터 가시성과 어노테이션 지오메트리를 제어합니다. 상호작용 전용 플래그는 호버나 편집 동작을 만들지 않고, 기존 추출 권한 콜백은 인쇄 권한을 부여하지 않은 채 계속 필요합니다
정적 출력의 optional content
렌더링은 catalog의 기본 OCProperties/D 구성을 소비하고 BaseState에서 그룹 상태를 초기화하며 ON·OFF 오버라이드를 적용하고, 가시성을 판정할 때 일치하는 Intent 값을 씁니다
멤버십 사전은 AnyOn, AllOn, AnyOff, AllOff를 지원합니다. 재귀 VE 식은 And, Or, 단일 피연산자 Not을 지원하며 VE가 더 단순한 정책보다 우선합니다
null이거나 사용할 수 없거나 오래된 그룹 참조는 멤버십 효과가 없습니다. 구성의 인텐트 밖 그룹은 가시성을 제어하지 않고, 해당 그룹이 없는 멤버십이나 식은 콘텐츠를 보이는 채로 둡니다
중첩 /OC 마크드 콘텐츠, 이미지·Form XObject, 어노테이션은 결과 상태를 따릅니다. 숨겨진 마크드 구간도 색, 행렬, 클리핑, 텍스트 위치를 여전히 갱신하고, 숨겨진 XObject 전체와 어노테이션은 건너뛸 수 있습니다
일반 마크드 콘텐츠 속성 사전은 중첩 인라인 값을 포함해 계속 쓸 수 있습니다. 콘텐츠 배열은 구성 스트림 사이에서 마크드 콘텐츠 상태를 유지하고, 자식 스트림은 자체 마크드 콘텐츠 중첩을 지킵니다
단독 최종 형태 래스터화는 ISO 32000-1:2008 8.11.4.5절 규정대로 보기·인쇄 모드 양쪽에서 기본 구성을 쓰고 대화형 AS 용도 권고를 자동 적용하지 않습니다. 명시적인 ViewerState는 영구 수동 선택과 임시 이벤트 상태로 View, Print, Export, Zoom, Language, User 권고를 켭니다
optional-content 속성이 없거나 빌린 catalog가 nil이면 optional-content 구조는 가시성 효과 없이 지나갑니다. 잘못된 살아있는 멤버십, 식 순환, 구성된 작업·메모리·재귀 한도는 PNG 발행 전에 실패합니다
어파인 appearance 행렬과 0이 아닌 BBox 원점은 이 플래그 아래에서도 정상 맞춤을 유지합니다. 극단적으로 작은 렌더 배율은 Cairo 초기 페이지 행렬을 수치적으로 비가역으로 만들 수 있습니다
렌더링된 페이지는 MediaBox/CropBox 교집합, 상속 페이지 박스와 90도 단위 Rotate, 페이지의 UserUnit을 씁니다. 배율 1은 유효 페이지 포인트당 픽셀 하나를 만들고 서페이스 크기는 올림합니다
sh 연산자는 함수 기반, 축방향, 방사형 shading(ShadingTypes 1–3)을 칠하고, 2입력 도메인, shading 행렬, 방사형 원 선택, Extend 끝점, BBox, 기존 경로 클립을 지원합니다
지원되는 색 함수와 스칼라 함수 배열은 디바이스, 캘리브레이션, ICC Lab/XYZ, Separation/DeviceN 소스 색을 거쳐 변환됩니다. 현재 채우기 불투명도, 블렌드 모드, 그래픽 상태 소프트 마스크, 투명성 그룹 knockout이 결과 shading에 적용됩니다
현재 경로와 색은 유지됩니다. shading Background는 sh에서 무시되고, AntiAlias는 픽셀 중심 색 샘플링을 쓰는 디바이스 힌트입니다
지원하지 않는 ExtGState 항목과 지원하지 않는 콘텐츠 연산자는 이 프로필의 범위 밖으로 남습니다
삼각형 메시 shading
ShadingTypes 4와 5는 에지 재사용, 임의 격자 지오메트리, 바이트 정렬 버텍스 레코드, 최대 32비트 좌표 정밀도, 최대 16비트 컴포넌트 정밀도로 자유 형태와 격자 Gouraud 삼각형 메시를 칠합니다
버텍스 컴포넌트는 색 변환 전에 디바이스 픽셀 중심에서 보간됩니다. 선택적 1입력 함수나 컴포넌트 함수 배열이 캘리브레이션, ICC, 특수 색 공간을 포함해 보간된 매개변수를 평가합니다
Indexed 소스는 보간된 인덱스를 가장 가까운 팔레트 항목으로 반올림합니다. hexadecimal 조회 문자열은 공백, 대소문자가 섞인 숫자, 홀수 마지막 니블 패딩을 처리해 한 번 디코딩하고, literal 조회 문자열은 디코딩된 바이트를 유지합니다
현재 변환, 클리핑, BBox, 채우기 불투명도, 블렌드 모드, 소프트 마스크, 비마킹 colorant, 그룹 knockout이 완성된 메시에 적용됩니다. 보관된 스트림 바이트, 임시 페이지 서페이스, 격자 두 행은 작업 메모리 허가에 참여합니다
버텍스 파싱, 삼각형 래스터화, 함수는 누적 연산과 취소 폴링을 공유합니다. 형식이 틀렸거나 잘린 레코드와 불완전한 격자 행은 출력 발행 전에 실패합니다
집중 인수 검증은 닫힌 무게중심 방정식과 별도 MuPDF·Poppler 출력을 검사합니다. 증명 기록은 버텍스 패딩, 미사용 플래그 비트, 메시 투명성에 대해 소스 리더 실패를 따로 보관하고, 비마킹 색과 정규화된 Indexed 값에는 명시적 대체 리더 방정식을 씁니다
Coons와 텐서 패치 메시
ShadingTypes 6과 7은 삼차 Coons 경계와 텐서 컨트롤 네트를 칠하며, 앞선 에지 재사용, 바이트 정렬 레코드, 하위 2비트 플래그 의미, 삼각형 메시와 같은 좌표·컴포넌트 정밀도를 씁니다
코너 컴포넌트는 선택적 함수와 색 변환 전에 패치 매개변수에서 이중 선형 보간됩니다. Coons 경계는 동등한 이삼차 Bernstein 네트로 승격되고, 그 2차 도함수 경계가 출력 픽셀 지오메트리 오차 최대 0.125로 분할을 고릅니다
다항식 역변환이 픽셀 매개변수를 다듬습니다. 접힌 커버리지는 가장 큰 v 매개변수를, v가 같으면 그다음으로 가장 큰 u 매개변수를 고르고, 완성된 shading이 객체 투명성을 받기 전에 뒤 패치가 앞 색을 대체합니다
공유 메시 컴포지터는 클리핑, BBox, shading 패턴, 비마킹 colorant, 불투명도, 블렌딩, 소프트 마스크, 그룹 knockout을 적용합니다. 분할 두 행과 픽셀별 매개변수·순서 배열은 활성 작업 바이트 허가에 참여합니다
컨트롤 포인트 파싱, 분할, 래스터화, 색 함수는 연산 한도와 취소를 공유합니다. 집중 인수 검증은 독립적인 Coons·텐서 방정식과 접힌 패치용 삼차 근을 쓰고, 소스 리더 실패는 평범한 RGB 방정식 페이지 검증과 따로 기록합니다
상속 텍스트 상태
Form, Type3, 패턴 자식 스트림은 초기 그래픽 상태에서 해당 폰트 객체, 폰트 크기, 문자 간격, 단어 간격, 가로 배율, leading, 렌더링 모드, 라이즈를 상속합니다. 같은 폰트 이름을 가진 자식 리소스는 로컬 Tf가 선택하기 전까지 상속된 폰트를 대체하지 않습니다
저장된 그래픽 상태는 텍스트 매개변수를 복원하고, TD와 겹따옴표 연산자는 leading과 간격 변경을 이후 자식 스트림을 위해 유지합니다. 각 자식은 자체 텍스트 행렬로 시작합니다
독립적인 어노테이션 appearance는 페이지 콘텐츠의 최종 텍스트 상태를 유지하지 않고 기본 텍스트 매개변수에서 시작합니다
렌더링 모드 3의 Type3 텍스트는 보이는 글리프 그래픽을 만들지 않습니다. 집중 Type3 중첩 텍스트 증명은 MuPDF의 기본 매개변수 편차를 상속 상태 방정식과 따로 보관하고, Poppler는 그 픽스처에서 상속 매개변수를 따릅니다
타일링과 shading 패턴
패턴 색 공간은 colored·uncolored 타일링 패턴, TilingType 1–3, shading 패턴, PatternMatrix, 셀 BBox, 양수·음수 간격, 패턴 선택, 저장 상태 복원, 채우기·스트로크 칠하기를 지원합니다
uncolored 패턴은 지원되는 기저 색 공간에서 컴포넌트를 얻고 이미지 스텐실을 칠할 수 있습니다. uncolored 정의 안의 명시적 색 변경, colored 이미지, 직접 shading은 유효하지 않은 PDF 콘텐츠이며 중첩 Form과 Type3 프로시저를 통해서도 거절됩니다
선택된 패턴은 자신의 정의를 해석한 콘텐츠 스트림의 기본 좌표 공간을 유지합니다. 이후 cm 연산과 Form 안에서 쓰인 상속 패턴은 그 원점을 대체하지 않습니다
정의는 부모의 초기 지원 그래픽 상태와 기본 투명성 매개변수로 시작합니다. 타일링 정의는 nonisolated non-knockout 그룹을 이루고, shading 정의는 객체 knockout을 씁니다
투명하고 겹치는 타일링 셀은 현재 배경에 대해 평가됩니다. 들어오는 객체 알파와 블렌드 모드는 완성된 패턴을 칠할 때 한 번 적용되며, 중첩 패턴, 텍스트, 스트로크, 이미지 마스크도 포함입니다
shading 패턴 ExtGState는 불투명도와 소프트 마스크를 포함한 지원 shading 매개변수를 보강합니다. Background는 shading 전에 칠해지고, BBox는 양쪽 기여를 클립하며, 비마킹 None 색은 색도 모양도 만들지 않습니다
패턴 평가는 페이지 서페이스 두 개와 디코딩된 셀 콘텐츠를 허가하고 보이는 셀 나열을 현재 클립으로 제한하며, 셀을 렌더링하고 배경 기여를 제거하는 동안 취소를 폴링합니다
집중 픽스처는 닫힌 좌표·색·합성 방정식을 네이티브 픽셀과 독립 리더 출력과 비교합니다. 증명 파일은 상속 Form 패턴 원점, shading 패턴 ExtGState 불투명도, 비마킹 None 색에 대한 리더 차이를 보관하고, 그 케이스에는 별도의 평범한 벡터 방정식 페이지를 둡니다
CID 기반 CFF 폰트
임베드된 CIDFontType0 폰트는 비동일 매핑, CID 65535, 임베드 Encoding CMap, 세로 W2 원점, 변환된 아웃라인, 텍스트 클리핑을 포함해 단독·OpenType 컨테이너에서 실제 CFF CID를 해석합니다
단독 CFF 페이스는 CID로 로드하고 SFNT 래핑 페이스는 압축 글리프 인덱스로 로드합니다. 브리지는 Linux LP64와 Windows LLP64에 맞는 올바른 FreeType 페이스 레이아웃을 씁니다
매핑되지 않은 문자 코드나 없는 요청 CID는 원본 코드에 대해 notdefchar와 notdefrange를 참조하고, 대체가 없으면 필수 CID 0 글리프를 씁니다. 범위는 상수 CID 대상을 가지고 문자 항목이 우선하며, 존재하는 글리프는 요청된 CID를 유지합니다
집중 인수 검증은 유효한 소스 28개에 대해 선언된 다각형 윤곽과 원점 방정식을 쓰고, 별도 MuPDF·Poppler 비교와 평범한 RGB 방정식 페이지를 둡니다
증명 파일은 CID 기반 OpenType 글리프 선택과 생략된 notdef 대체에 대한 소스 리더 차이를 보관합니다. 생략 대체안은 따로 측정되며 필수 네이티브 소스 방정식을 대체하지 않습니다
상한과 취소
정확한 내장 Type0 인코딩이 번들된 인코딩 이름 200개 전부를 다룹니다. Identity-H와 Identity-V, UCS2·UTF16 매핑 열여섯 개, 평탄화된 세로 문자 오버라이드가 있는 추가 레거시·Unicode 맵 182개입니다
1바이트에서 4바이트까지 섞인 피연산자는 바이트별 코드스페이스 경계와 최장 접두사 유효하지 않은 코드 복구를 씁니다. UTF8·UTF32 디코딩과 역인코딩은 보충 스칼라와 의미 있는 선행 0 바이트를 보존합니다
Encoding과 ToUnicode 스트림은 사전 우선순위와 로컬 문자·범위·Unicode 시퀀스·notdef 오버라이드로 본문 usecmap과 사전 UseCMap 이름이나 스트림을 해석합니다
각 자식 CMap은 자체 쓰기 모드를 유지하며 WMode가 생략되면 가로가 기본입니다. 명시적 세로 모드는 상속 매핑과 폰트 세로 메트릭을 고릅니다
CMap 상속은 THPDFCMapBounds 레이아웃을 바꾸지 않으면서 스레드 로컬 중첩 깊이 한도를 씁니다. 순환, 잘못된 부모, 초과 깊이는 출력 발행 전에 실패하고, finally 블록이 취소나 예외 뒤에 한도를 복원합니다
집중 증명은 그 내장 테이블이 없는 독립 리더에서 이름 있는 UTF8·UTF32 소스 실패를 보관하고, 별도 임베드 맵 동반 항목을 검증하며, 여러 코드가 같은 CID를 고를 때 소스 텍스트 차이를 기록합니다
Tests/Linux/Run-HeadlessLegacyCMapAcceptance.sh는 네이티브 Linux에서 정확한 인코딩 구간, 혼합 폭 소스 PDF, 중첩 렌더링, 스레드 격리, 취소 복구를 빌드하고 검사합니다
Tests/Linux/Run-HeadlessLegacyCMapWindowsAcceptance.py는 대응하는 네이티브 Windows 실행 파일을 실행해 소스, 바이너리, PNG, 진단 해시를 기록한 뒤 고정 캡처를 네이티브 Linux 저장소로 옮겨 별도 MuPDF·Poppler 검사를 합니다
패킹된 맵은 리소스 해시와 전체 재배포 고지를 유지합니다. 소스·바이너리 배포에는 CMap 데이터 라이선스를 함께 두세요
PDF 이름 값과 콘텐츠 이름 피연산자의 hexadecimal 이스케이프는 폰트, 색 공간, 블렌드 모드, 리소스를 해석하기 전에 한 번 디코딩됩니다. 디코딩으로 생긴 literal 해시는 의미 이름의 일부로 남습니다
공유 폰트 디코더는 이 의미론을 폰트 사전 값, 이름 있는 인코딩, Differences 글리프 이름, CIDToGIDMap에 적용하되 빌린 객체를 수정하거나 문자열 값을 디코딩하지는 않습니다
이스케이프된 렌더러 이름은 선형 디코딩, 임시 작업 바이트 허가, 누적 연산 한도, 취소 폴링을 씁니다. 집중 인수 검증은 동등한 네이티브 PNG 바이트와 텍스트, 독립 MuPDF·Poppler 출력을 비교합니다
shading 래스터 작업과 색 함수는 누적 연산 한도와 취소 폴링을 공유합니다. 임시 서페이스와 변환된 색 최대 8,192개짜리 정확 좌표 캐시는 활성 작업 바이트 허가에 참여합니다
집중 shading 인수 검증은 닫힌 지오메트리·함수·색 방정식과 별도 벡터 방정식 페이지를 쓰고, BBox 클리핑, 퇴화 지오메트리, 색 변환, 특수 colorant 이름, knockout 테셀레이션에 대한 소스 리더 차이를 보관합니다
옵션은 서페이스 픽셀, 활성 관리 버퍼, 누적 디코딩 바이트, 인코딩된 PNG 바이트, 토큰·연산자 작업, 재귀 또는 그래픽 상태 깊이에 상한을 둡니다
폰트 디코딩은 보수적인 허가 여유를 씁니다. 임시 용량 32 MiB, 디코딩된 폰트 스트림 크기의 64배, 재귀 검사한 배열 슬롯의 128배, 활성 누계에 보관 추정치의 2배입니다
CID 테이블은 보관 항목 65,536개를 허가합니다. 나열은 실제 charstring에 경계를 두고, notdef 배열은 디코더 딥카피와 보관 바이트 회계에 참여합니다
CMap 파싱과 notdef 조회는 스레드 로컬 중첩 항목 경계와 작업 폴링을 공유합니다. 렌더러 스코프는 누적 토큰·연산 한도를 공유하고, 긴 어휘 스캔은 최대 256바이트마다 폴링합니다
인터프리터는 글리프 레코드를 만들기 전에 입력 피연산자 바이트와 가장 긴 ToUnicode 매핑에서 글리프별 Unicode 시퀀스 용량을 예약하므로, 반복되는 긴 매핑이 작업 메모리 허가를 우회할 수 없습니다
작은 작업 메모리 예산은 최종 할당이 들어갈 단순 폰트도 거절할 수 있습니다. 이 검사는 관리 버퍼와 CPU 이미지 서페이스를 다루고, Cairo, Fontconfig, FreeType 캐시, 전체 프로세스 RSS는 회계 밖입니다
투명성, 소프트 마스크, 배경, 불투명도, 객체 knockout 서페이스는 활성 서페이스 예산에 참여합니다. 전이 함수는 누적 연산 예산을 공유하고, ICC와 이미지 코덱은 보수적 허가를 쓰며, 네이티브 JBIG2 디코더는 비트맵/컨텍스트 할당을 누적으로 제한하고 디코딩 중 취소를 폴링합니다
보완 CMY, 블랙, 기하학적 모양 순회는 누적 연산·디코딩·취소 한도를 공유합니다. 같은 해석 스트림을 쓰는 프로필은 페이지 렌더링이 끝날 때까지 검증된 변환 하나와 활성 허가 예약을 공유합니다
보관 함수 스트림, 함수 평가, 그래픽 상태 레코드는 작업 바이트 허가에 참여합니다. 재귀 tint 함수, 다차원 보간, calculator 명령은 연산·취소 한도를 공유합니다
빌린 취소 토큰은 bounded 디코딩, 토큰화, 연산자, 글리프 리졸버 호출, 이미지 행, 재귀, PNG 인코딩 중과 발행 전에 폴링됩니다. 수명은 호출자가 소유합니다
렌더러는 빌린 문서 정책으로 추출 권한을 검사하고 소스 객체 값과 소스 바이트를 보존합니다
출력 소유권
HPDFRenderHeadlessPagePNG는 호출자 소유 스트림에 쓰기 전에 렌더링과 PNG 인코딩을 비공개로 마칩니다. 마지막 스트림 I/O 실패는 이미 받아들인 바이트를 남길 수 있습니다
HPDFRenderHeadlessPagePNGFile은 소스 신원을 검사하고 대상 디렉터리에 단독 스테이징 파일을 만들어 플러시한 뒤 신원과 취소를 다시 검사하고 대상을 원자적으로 교체합니다
Windows 발행은 최대 여덟 번의 원자적 교체 시도와 1, 2, 4, 8, 16, 16, 16밀리초 일곱 번의 대기를 쓰며, 액세스 거부·공유 위반·잠금 위반 오류만 재시도합니다. 취소는 매 시도 전과 각 대기 양쪽에서 검사합니다
Windows 발행 실패는 잡아 둔 최종 Windows 오류 코드를 EHPDFHeadlessRenderError로 보고합니다. 취소는 렌더러의 취소 진단을 유지하고, 어느 경로도 기존 대상을 지우거나 비원자적 복사로 폴백하지 않습니다
렌더링, 예산, 취소, 스테이징 실패는 기존 대상을 보존하고 소유한 미발행 스테이징 파일을 제거합니다. 소스 경로와 하드링크 별칭은 거절됩니다
인수 검증
Windows 런타임 인수 검증은 대응하는 네이티브 콘솔 실행 파일과 격리되고 SHA256으로 고정된 포터블 DLL 임포트 클로저를 씁니다. 별도 WSL 프로세스가 Windows가 만든 PNG 파일에 대해 독립적인 MuPDF·Poppler 픽셀, 방정식, 지오메트리 검사를 돌립니다
Windows 표준 폰트 대체는 클리핑과 fill+stroke 모드를 포함해 Unicode 텍스트와 실제 아웃라인에 명시적 Cairo GDI 페이스를 씁니다. 임베드 폰트는 자체 FreeType 글리프 매핑을 유지합니다
OpenJPEG 호출은 Windows stdcall ABI와 Win32 데코레이티드 익스포트를 쓰고, 스트림·메시지 콜백은 C 콜백 규약을 유지합니다
Tests/Linux/Run-HeadlessCairoAcceptance.sh는 새 네이티브 ELF 빌드를 수행하고 DISPLAY와 WAYLAND_DISPLAY를 지우며 직접 링크된 데스크톱 라이브러리를 거부하고 독립적인 pypdf/MuPDF 오라클을 돌립니다
픽스처는 표준 폰트, Unicode TrueType, Type3, 모든 텍스트 렌더링·블렌드 모드, 알파와 knockout, RGB 투명성 그룹, 샘플 깊이와 Decode, 이미지 마스크와 Matte, Indexed·ICC 색, 터미널 코덱, AES 암호화 필터 체인, 페이지 지오메트리, 어노테이션 변환, 예산, 취소, 소스 보존, 원자적 출력을 다룹니다
카운터는 THPDFHeadlessRenderResult를, 오류 처리는 EHPDFHeadlessRenderError를 참고하세요