Resource and Image Optimisation

HotPDF는 페이지 그래픽 상태 시맨틱을 바꾸거나 상속 리소스와 주석 appearance를 깨뜨리지 않고 로드된 문서 크기를 줄일 수 있습니다

콘텐츠와 리소스 통합

반복 inline 이미지는 출현·페이로드 임계를 넘으면 공유 image XObject가 될 수 있습니다

사용되지 않는 페이지 리소스 이름은 페이지 콘텐츠, 중첩 Form XObject, 주석 appearance stream을 스캔한 뒤 보수적으로 제거됩니다

호환되는 페이지 content stream은 디코딩되고, 안전한 token 경계로 이어져 하나의 Flate stream으로 정규화됩니다

Form XObject와 내장 폰트는 정규화된 디코딩 콘텐츠와 재귀 정규화 리소스 그래프에서 중복 제거되며, 비교 중 호환 폰트 subset 접두가 정규화됩니다

로드된 폰트 subsetting

SubsetLoadedFonts는 문자 코드를 페이지 콘텐츠, 중첩 Form XObject, 주석 appearance stream으로 추적하고 각 코드를 PDF 폰트 인코딩과 CID 매핑으로 해석한 뒤 도달 가능한 glyph 프로그램만 유지합니다

폰트 딕셔너리, CID 맵, 폭, ToUnicode 데이터는 기존 식별자를 유지합니다. TrueType/CFF/Type 1 subsetting이 glyph ID나 glyph 이름을 보존하기 때문입니다. 공유 내장 프로그램은 한 번의 재작성 전에 호환 폰트 딕셔너리 전부에서 사용량을 집계합니다

TrueType composite와 COLR v0/v1 outline 의존은 재귀적으로 닫히고 색상, bitmap, variation, shaping 테이블은 그대로입니다. Type 1 PFB, 분할 바이너리/헥스 PFA 프로그램은 사용된 CharString을 보존하고 미사용 항목을 유효한 동일 길이 endchar 프로그램으로 교체합니다

이 operation은 사용된 코드 중 하나라도 매핑 불가면 폰트 프로그램 전체를 건너뛰고, 더 작은 raw/Flate 후보만 채택하며, 기본적으로 서명된 문서를 거부해 서명 무효화는 호출자가 명시적으로 opt in 해야 합니다

Image policies

JPEG 재압축은 대상 색공간, 출력 품질, 최소 바이트 절감을 선택합니다

JPEG 2000 최적화는 명시적인 비비활성 프로파일을 통해 무손실/시각 무손실 프로파일, 선택적 tile, 다섯 progression order를 모두 지원합니다

visual-cost 재압축은 상한 JPEG/JPEG 2000 품질 시험을 디코딩 소스와 대평가하고, 지각 오차·최소 절감 한도 밖 후보를 거부하며, 결정론적 동점 처리로 가중 시각 오차·바이트 비용 점수가 가장 낮은 것을 고릅니다

JBIG2 전역 데이터는 jbspExactGlobalsOnly 아래에서 디코딩된 전역 segment 바이트가 정확히 일치할 때만 공유됩니다

실효 DPI 다운샘플링은 페이지/중첩 Form 행렬을 따르고, 색상 관리 소스 픽셀을 디코딩하며, soft mask를 소유 이미지와 함께 리샘플링합니다

이미지 재작성 색상 변환은 지원되는 ICCBased/CalGray/CalRGB 입력을 보정 RGB로 바꾸고, 미지원 보정 입력은 process RGB로 바꾸는 대신 그대로 둡니다

DownsampleLoadedImages는 지원되는 8비트 raw/Flate/LZW/ASCII/RunLength Separation·DeviceN 이미지를 component 공간에서 직접 크기 조정하며 정확한 색공간 그래프, tint transform, colorant, /Decode 범위, overprint 시맨틱을 유지합니다

DCT/JPX/JBIG2/CCITT spot 이미지는 codec이 원본 판 샘플을 노출할 수 없으면 그대로 유지됩니다

필요한 출력이 벡터 도색, 이미지, pattern, shading, 투명도, ICC 리소스에 걸친 균일 Gray/RGB/CMYK process 공간이면 로드 페이지 색 재작성을 씁니다

적응형 object stream

object-stream packing은 객체 번호 지역성을 지키고 다시 바뀔 가능성이 큰 dirty 객체를 제외하면서 멤버 크기, 목표 컨테이너 바이트, 멤버 수에 상한을 둘 수 있습니다

adaptive packing을 켜면 필요한 PDF 버전, xref stream, 전체 재작성도 함께 요구됩니다

주요 API