DeduplicateResources

文档操作、优化

说明

在整个已加载文档中查找字节完全相同的间接资源流,将每个引用重定向到确定性的规范流,并可选择移除重复的间接对象

相等性要求完整流字典的顺序无关签名以及编码流负载的精确匹配,因此图像蒙版、颜色空间、解码数组、可选内容关联、结构标识符、元数据、过滤器和每个语义字典条目都仍是判定的一部分

语法

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_FORMS包括可复用页面图形、注释外观和透明度组等 Form XObject
PDF_RESOURCE_DEDUP_PATTERNS包括基于流的平铺图案
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试运行合并或报告的重复间接流数量
0未找到合格的重复流,或未加载文档

备注

每个精确等价组中对象编号和生成号最低者成为规范流,使重复运行结果保持确定性

字典键的顺序不影响相等性,但每个语义键和值都会影响,包括间接引用标识;数值型顶级 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