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_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_IMAGES包含影像 XObject、顯式影像遮罩、軟遮罩影像、替代影像與縮圖
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