PDFium Delphi Component Docs

Инспекция и исправление графа объектов

Компонент: TPdf  ·  Модули: PDFium, FPdfCompress
Экспортирует ограниченное типизированное представление активных косвенных объектов и транзакционно применяет ограниченные заплаты словарей

Syntax

function ExportObjectGraph(Stream: TStream; const Options: TPdfObjectGraphInspectOptions; out Report: TPdfObjectGraphReport): Boolean;

function SaveAsObjectGraphPatched(Stream: TStream; const Operations: TPdfObjectPatchOperations; out Report: TPdfObjectGraphReport; AllowSignedDocument: Boolean = False): Boolean;

function SaveAsObjectGraphPatched(const FileName: string; const Operations: TPdfObjectPatchOperations; out Report: TPdfObjectGraphReport; AllowSignedDocument: Boolean = False): Boolean;

Typed JSON format

Корневой объект, количество активных объектов, экспортированные объекты и состояние усечения выдаются в версионируемом конверте pdf-object-graph-v1

Каждое значение идентифицируется как словарь, массив, литеральная или шестнадцатеричная строка, имя, ссылка, null, Boolean, целое, вещественное или ключевое слово

Потоки сообщают свой размер в закодированных байтах и, если включено, дайджест SHA-256, тогда как их полезная нагрузка остаётся опущенной

Прямые объекты и члены, материализованные из контейнеров ObjStm, используют то же представление

Inspection options

MaxObjectsМаксимум активных объектов, записываемых до того, как конверт JSON сообщит truncated: true
MaxDepthМаксимальная глубина вложенных массивов и словарей от 1 до 32
MaxOutputBytesЖёсткий верхний предел для полного байтового потока JSON, совместимого с UTF-8
MaxStringBytesМаксимум байтов, сохраняемых из одной строки или имени PDF
IncludeStreamDigestsВычисляет SHA-256 по закодированным байтам потока без декодирования или экспорта полезной нагрузки

Patch model

Каждая TPdfObjectPatchOperation выбирает точный номер объекта, поколение и ключ словаря верхнего уровня, а затем либо устанавливает, либо удаляет этот ключ

Операции установки принимают типизированные значения null, Boolean, целое, вещественное, имя, текстовую строку или косвенную ссылку и никогда не принимают необработанный синтаксис PDF

Все идентичности объектов, поколения, ссылки, имена, дублирующиеся операции и целевые словари проверяются до выдачи результата

Ключи длины потока и цепочки фильтров нельзя исправлять, поскольку их изменение независимо от закодированных байтов повредило бы поток

Модуль записи дописывает одну инкрементную редакцию, восстанавливает полученный активный граф, строго загружает его через PDFium и только затем записывает поток вызывающего или атомарно заменяет файл

Policies and limits

Example

Options := TPdfObjectGraphInspectOptions.Default;
Pdf.ExportObjectGraph(JsonStream, Options, Report);
SetLength(Operations, 1);
Operations[0].Kind := popSet;
Operations[0].ObjectNumber := CatalogObjectNumber;
Operations[0].Generation := 0;
Operations[0].Key := 'Lang';
Operations[0].Value.Kind := povTextString;
Operations[0].Value.TextValue := 'en-US';
Pdf.SaveAsObjectGraphPatched('patched.pdf', Operations, Report);

See Also

Incremental save session, SaveAsObjectStream, SaveAs