DeduplicateResources
文件操作、最佳化
描述
在載入的文件中找出位元組相同的間接資源串流,把所有參照改指向確定性的正規串流,並可選擇移除重複的間接物件
相等判定同時需要完整串流字典的順序無關簽章,以及編碼串流酬載的精確匹配,因此影像遮罩、色彩空間、解碼陣列、選用內容關聯、結構識別碼、中繼資料、filter 與每個語義字典項目都會參與判定
語法
Delphi
Function TPDFlib.DeduplicateResources(
Options: Integer= PDF_RESOURCE_DEDUP_DEFAULT): Integer; Overload;
Function TPDFlib.DeduplicateResources(Options: Integer;
Out Stats: TPDFlibResourceDedupStats): Integer; Overload;
參數
| Options | 資源去重選項常數的位元組合 |
|---|---|
| Stats | 接收掃描、雜湊、比較、參照、酬載、類別與孤兒物件計數器 |
資源類型選項
| PDF_RESOURCE_DEDUP_IMAGES | 包含影像 XObject、顯式影像遮罩、軟遮罩影像、替代影像與縮圖 | PDF_RESOURCE_DEDUP_FORMSIncludes Form XObjects such as reusable page graphics, annotation appearances, and transparency groups PDF_RESOURCE_DEDUP_PATTERNSIncludes stream-based tiling patterns PDF_RESOURCE_DEDUP_SHADINGSIncludes stream-based mesh shadings PDF_RESOURCE_DEDUP_FUNCTIONSIncludes sampled function streams PDF_RESOURCE_DEDUP_ICC_PROFILESIncludes ICC profile streams referenced by ICCBased colour spaces or output intents PDF_RESOURCE_DEDUP_FONT_PROGRAMSIncludes streams referenced through FontFile, FontFile2, or FontFile3 PDF_RESOURCE_DEDUP_CMAPSIncludes CMap and ToUnicode streams PDF_RESOURCE_DEDUP_TYPE3_CHARPROCSIncludes Type 3 glyph procedure streams PDF_RESOURCE_DEDUP_EMBEDDED_FILESIncludes embedded-file streams PDF_RESOURCE_DEDUP_METADATAIncludes metadata streams
|---|---|
| PDF_RESOURCE_DEDUP_POSTSCRIPT | 包含 Form XObject,例如可重用的頁面圖形、註解外觀與透明度群組 |
| PDF_RESOURCE_DEDUP_ALL_TYPES | 包含串流形式的 tiling pattern |
| PDF_RESOURCE_DEDUP_SHADINGS | 包含串流形式的網格漸變 |
| PDF_RESOURCE_DEDUP_FUNCTIONS | 包含取樣函數串流 |
| PDF_RESOURCE_DEDUP_ICC_PROFILES | 包含 ICCBased 色彩空間或輸出意圖參照的 ICC 描述檔串流 |
| PDF_RESOURCE_DEDUP_FONT_PROGRAMS | 包含透過 FontFile、FontFile2 或 FontFile3 參照的串流 |
| PDF_RESOURCE_DEDUP_CMAPS | 包含 CMap 與 ToUnicode 串流 |
| PDF_RESOURCE_DEDUP_TYPE3_CHARPROCS | 包含 Type 3 字形程序串流 |
| PDF_RESOURCE_DEDUP_EMBEDDED_FILES | 包含內嵌檔案串流 |
| PDF_RESOURCE_DEDUP_METADATA | 包含中繼資料串流 |
| PDF_RESOURCE_DEDUP_POSTSCRIPT | 包含 PostScript XObject |
| PDF_RESOURCE_DEDUP_ALL_TYPES | 合併全部十二個資源類型旗標 |
操作選項
| PDF_RESOURCE_DEDUP_DRY_RUN | 回報重複串流與參照,不更動物件圖、也不收集物件 |
|---|---|
| PDF_RESOURCE_DEDUP_GARBAGE_COLLECT | 參照改向之後執行標記-清除收集 |
| PDF_RESOURCE_DEDUP_DEFAULT | 組合所有資源類型並執行垃圾收集 |
傳回值
| Positive value | 被合併的重複間接串流數,或 dry run 所回報的數量 |
|---|---|
| 0 | 找不到符合條件的重複串流,或未載入任何文件 |
備註
每個完全等價群組中物件編號與 generation 最小的串流成為標準串流,重複執行結果因此可確定
字典鍵順序不影響相等性,但每個語義鍵與值都影響,包括間接參照的身分;數值型頂層 Length 項以其解析後的值比較,因此等價的直接與間接長度形式可共用資源
解碼內容相同但濾器或編碼位元組不同的資源保持各自獨立,字典參照到不同巢狀物件的資源亦然
所有候選承載都以 SHA-256 雜湊一次,逐位元組確認只在雜湊與字典簽名都相符的分桶內執行
此方法只處理間接串流,因為 ISO 32000 要求串流必須是間接物件,而共用資源以間接參照表示
預設用法是在文件編輯後、完整儲存前使用,立刻回收重複的物件位元組
增量儲存時,若舊修訂必須保持實體完整,請省略 PDF_RESOURCE_DEDUP_GARBAGE_COLLECT;重定向的參照仍能減少新修訂中的重複,但無法從更早的修訂移除位元組
範例
var
Stats: TPDFlibResourceDedupStats;
Merged: Integer;
begin
Merged:= PDF.DeduplicateResources(
PDF_RESOURCE_DEDUP_DEFAULT, Stats);
PDF.SaveToFile('optimised.pdf');
end;
另請參閱
TPDFlibResourceDedupStats, PurgeUnusedResources, GarbageCollectObjects