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