DeduplicateResources
Манипуляция документами, Оптимизация
Описание
Находит побайтово идентичные косвенные потоки ресурсов по всему загруженному документу, перенаправляет каждую ссылку на детерминированный канонический поток и при необходимости удаляет дублирующиеся косвенные объекты
Равенство требует как не зависящей от порядка подписи полного словаря потока, так и точного совпадения закодированной полезной нагрузки потока, поэтому маски изображений, цветовые пространства, массивы decode, привязки optional content, идентификаторы структуры, метаданные, фильтры и каждая смысловая запись словаря остаются частью решения
Синтаксис
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 | Включает image XObjects, явные маски изображений, soft-mask изображения, альтернативные изображения и миниатюры |
|---|---|
| PDF_RESOURCE_DEDUP_FORMS | Включает Form XObjects, такие как повторно используемая графика страниц, appearances аннотаций и группы прозрачности |
| PDF_RESOURCE_DEDUP_PATTERNS | Включает потоковые tiling patterns |
| PDF_RESOURCE_DEDUP_SHADINGS | Включает потоковые mesh shadings |
| PDF_RESOURCE_DEDUP_FUNCTIONS | Включает потоки выборочных функций |
| PDF_RESOURCE_DEDUP_ICC_PROFILES | Включает потоки профилей ICC, на которые ссылаются цветовые пространства ICCBased или output intents |
| 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 | Includes PostScript XObjects |
| PDF_RESOURCE_DEDUP_ALL_TYPES | Объединяет все двенадцать флагов типов ресурсов |
Опции операции
| PDF_RESOURCE_DEDUP_DRY_RUN | Сообщает о дублирующихся потоках и ссылках, не меняя граф объектов и не собирая объекты |
|---|---|
| PDF_RESOURCE_DEDUP_GARBAGE_COLLECT | Запускает сборку mark-and-sweep после перенаправления ссылок |
| PDF_RESOURCE_DEDUP_DEFAULT | Объединяет все типы ресурсов со сборкой мусора |
Возвращаемые значения
| Положительное значение | Число дублирующихся косвенных потоков, консолидированных или сообщенных пробным запуском |
|---|---|
| 0 | Подходящий дублирующийся поток не найден либо документ не загружен |
Примечания
Наименьший номер объекта и поколение в каждой группе точной эквивалентности становятся каноническим потоком, что делает повторные запуски детерминированными
Порядок ключей словаря не влияет на равенство, но влияет каждый смысловой ключ и значение, включая идентичность косвенных ссылок; числовая запись Length верхнего уровня сравнивается по разрешенному значению, поэтому эквивалентные прямая и косвенная формы длины могут делить ресурс
Ресурсы с равным декодированным содержимым, но разными фильтрами или закодированными байтами, остаются раздельными, как и ресурсы, чьи словари ссылаются на разные вложенные объекты
Все кандидаты полезной нагрузки один раз хешируются SHA-256, а побайтовое подтверждение выполняется только внутри bucket-а с совпадающими хешем и подписью словаря
Метод работает с косвенными потоками, поскольку 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