Versioned Object Graph JSON Round Trips

HotPDF는 완전한 로드된 indirect 객체 그래프를 버전 관리되는 JSON으로 stream하고, PDF 값을 job 기술로 평탄화하지 않고 편집 가능한 문서를 재구성할 수 있습니다

schema와 호환성

현재 HotPDF-object-graph-2 schema는 schemaVersion, minimumReaderVersion, PDF 버전, trailer Root와 Info 참조, 선택된 모든 indirect 객체, 삭제된 객체 식별자, snapshot/incremental 종류를 기록합니다

reader는 호환성을 위해 이전 HotPDF-object-graph-1 형식도 받아들이며, 대상 문서를 바꾸기 전에 미래 또는 호환되지 않는 schema 버전은 거부합니다

편집 round trip에는 v2 stream API를 쓰세요. v2는 각 stream payload가 raw filtered 데이터인지 decoded 데이터인지 기록합니다

streaming과 binary payload

ExportLoadedObjectGraphJSONToStream은 문서 크기 JSON 문자열을 만들지 않고 객체와 재귀적으로 정렬된 PDF 값을 대상 stream에 바로 씁니다

raw 또는 decoded stream 바이트는 생략하거나, chunked base64로 끼워 넣거나, 지정한 디렉터리 아래 sidecar 파일로 쓸 수 있습니다

sidecar 이름은 안전한 leaf 이름이고, 공개는 형제 임시 파일에 이은 원자적 교체로 이뤄지며, import는 path traversal이나 절대 경로를 거부합니다

importer는 고정 크기 입력 block을 읽고 한 번에 최상위 객체 entry 하나만 materialize하면서, JSON 바이트, 객체 수와 번호, 값 깊이, string 바이트, 개별 stream, stream 바이트 총량에 대한 한도를 강제합니다

snapshot과 증분 모드

snapshot은 완전한 그래프를 내보내고, ogjimReplace는 후보 문서를 검증한 뒤 대상으로 교체합니다

증분 export에는 dirty, must-write, 삭제된 객체만 담깁니다. ogjimUpdate는 기존 그래프와 delta의 합집합을 기준으로 참조를 검증한 뒤, 로드된 그래프 트랜잭션 machinery로 커밋합니다

malformed 값, resolve되지 않은 참조, 잘못된 Catalog나 Pages 트리, 일치하지 않는 direct/indirect stream Length, 소진된 budget, 실패한 sidecar 읽기가 하나라도 있으면 대상은 그대로 유지됩니다

보안 경계

JSON 그래프는 PDF 객체와 trailer Root, Info 관계를 담지만, password, 암호화 key, 활성 security handler 상태는 절대 내보내지 않습니다

따라서 교체된 snapshot은 저장 전에 애플리케이션이 명시적으로 출력 보호를 설정하기 전까지는 암호화되지 않습니다

주요 API

객체 그래프 편집 및 페이지 어셈블리