네이티브 헤드리스 문서 비교

HPDFHeadlessCompare는 HPDFCompareHeadlessDocuments로 로드된 네이티브 문서 둘을 비교하고, Linux 콜백 ABI는 같은 구현을 type:compare가 붙은 hpdf_document_compare_json_v1으로 노출합니다

Pascal 모드JSON 모드비교 내용
hcmPageCountpagecount페이지 트리 리프 개수
hcmPageTextpagetext페이지 개수와 추출한 Unicode 텍스트
hcmObjectCountobjectcount페이지 개수와 사용 중인 물리 교차 참조 객체 개수
hcmRenderedImagerenderedimage페이지 개수, 렌더링 치수, 네이티브 Cairo 픽셀
hcmStructuralstructural페이지 개수와 정규화된 catalog, information, 도달 불가 객체 그래프
hcmFullfull페이지·객체 개수, 정규화된 그래프, Unicode 텍스트, 렌더링 픽셀

구조 동등성

구조 비교는 간접 참조를 풀고 사전 항목을 정렬하며, PDF 이름과 literal·16진수 문자열 표현을 정규화하고, SHA-256으로 내용을 해시하기 전에 일반 스트림 필터를 디코딩합니다

객체 번호, 직렬화 순서, 일반 스트림 압축은 구조 동등성을 바꾸지 않습니다. 터미널 이미지 인코딩은 필터와 디코드 정책을 그대로 유지하고, 도달 불가 객체는 multiset으로 비교합니다

암호화 사전과 교차 참조·객체 스트림 저장 컨테이너는 의미 구조에서 제외됩니다. 인증된 AES R5/R6 내용은 복호화한 뒤 추출 권한을 적용해 비교합니다

구조 차이는 문서 수준 경로 $Document로 보고합니다. 물리 객체 개수는 별도 모드로 남으며, 동등한 내용이 다른 저장 레이아웃을 쓰면 달라질 수 있습니다

렌더링 비교

각 페이지는 선택한 DPI에서 네이티브 Cairo 디바이스로 실제 렌더링합니다. 디코딩한 이미지 픽셀은 흰 바탕 위에 합성해 RGB 또는 휘도로 비교합니다

보고서에는 치수, 바뀐 픽셀 수, 최대 채널 델타, 평균 절대 오차, 바뀐 픽셀 비율, 유사도가 들어갑니다. 유사도는 1 - meanAbsoluteError / 255입니다

최대 채널 델타가 ColorTolerance를 넘으면 픽셀이 바뀐 것으로 봅니다. 페이지는 치수가 일치하고 유사도와 바뀐 픽셀 비율이 모두 설정된 임계값을 충족할 때만 통과합니다

렌더링에는 네이티브 페이지 렌더링과 같은 지원 폰트, 이미지 코덱, 그래픽 의미론이 필요합니다. 지원하지 않는 페이지는 동일한 보고서를 만드는 대신 비교에 실패합니다

유한 실행

비교 옵션은 순회, 깊이, 객체, 디코딩된 스트림, 텍스트 준비, 결과 저장, 렌더링 픽셀을 한정합니다. 취소는 순회, 텍스트 추출, 렌더링에 전달됩니다

Pascal 비교가 진행되는 동안에는 두 문서 인스턴스를 살아 있고 단독 소유인 상태로 유지하세요. 성공, 실패, 취소 어느 경우에도 원본 내용과 리소스 옵션은 보존됩니다

Linux ABI는 앞의 여섯 소문자 모드 이름과 Pascal 한도에 맞는 엄격한 options 멤버를 받고, 여기에 dpi, colorTolerance, minimumSimilarity, maxChangedPixelRatio, colorSpace:rgb 또는 luminance를 더합니다

ABI 결과는 동기 콜백 발행 전에 완전히 준비되고 한정됩니다. 같은 핸들 호출과 반대 순서 동시 호출은 기존의 안정적인 잠금 순서를 따릅니다

보고서 필드 · 의미론적 계약 비교 · 네이티브 Linux C ABI