版本化物件圖 JSON 往返
HotPDF 可以把完整的已載入間接物件圖串流成版本化 JSON,並在不把 PDF 值壓平成工作描述的前提下重建可編輯的文件
結構描述與相容性
現行的 HotPDF-object-graph-2 結構描述記錄 schemaVersion、minimumReaderVersion、PDF 版本、trailer 的 Root 與 Info 參照、每個選取的間接物件、已刪除物件的識別碼,以及快照或增量類型
為了相容性,讀取器接受較早的 HotPDF-object-graph-1 格式,並在動到目標文件之前就拒絕更新或不相容的結構描述版本
編輯往返請用 v2 串流 API,因為 v2 會記錄每個串流承載是原始的 filtered 資料還是已解碼資料
串流與二進位承載
ExportLoadedObjectGraphJSONToStream 把物件與遞迴排序的 PDF 值直接寫進目的地串流,不必先組出整份文件大小的 JSON 字串
原始或已解碼的串流位元組可以省略、以分塊 base64 內嵌,或寫成所提供目錄下的 sidecar 檔案
sidecar 名稱是安全的葉端名稱,發布時先寫同層暫存檔再原子式替換,匯入則拒絕目錄走訪或絕對路徑
匯入器以固定大小的輸入區塊讀取,一次只具體化一個頂層物件項目,同時強制執行 JSON 位元組、物件數量與編號、值深度、字串位元組、個別串流與彙總串流位元組的上限
快照與增量模式
快照匯出完整物件圖;ogjimReplace 會先驗證候選文件,再把它換進目標
增量匯出只包含 dirty、必寫與已刪除的物件;ogjimUpdate 針對既有物件圖與差異的聯集驗證參照,然後透過已載入物件圖的交易機制提交
任何格式錯誤的值、未解析的參照、無效的 Catalog 或 Pages 樹、不一致的直接或間接串流 Length、耗盡的預算,或失敗的 sidecar 讀取,都會讓目標保持原狀
安全性邊界
JSON 物件圖包含 PDF 物件以及 trailer 的 Root 與 Info 關係,但永遠不會匯出密碼、加密金鑰或仍在作用中的 security handler 狀態
因此被替換進來的快照處於未加密狀態,除非應用程式在儲存前明確設定輸出保護
主要 API
THotPDF.ExportLoadedObjectGraphJSONToStreamTHotPDF.ImportLoadedObjectGraphJSONTHPDFObjectGraphJSONLimitsTHPDFObjectGraphJSONImportInfoTHPDFObjectGraphExportInfoTHPDFObjectGraphJSONKindTHPDFObjectGraphJSONImportModeTHPDFObjectGraphStreamPayload
另見 物件圖編輯與頁面組裝