PDFium Delphi Component Docs

Модуль FPdfCompress

Модуль: FPdfCompress
Переписывание PDF на уровне потоков, сжатие, нормализация содержимого, настройка optional content, очистка, доступ к графу объектов, инкрементные ревизии и инспекция версий, используемые конвейером сохранения TPdf

Description

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

Помощники полного переписывания материализуют активный граф объектов, сохраняют или намеренно перестраивают перекрёстные ссылки и отклоняют входные данные, которые нельзя безопасно переписать; процедуры на основе отчётов сообщают сбои через Succeeded и ErrorMessage

Большинство приложений использует соответствующие методы TPdf для сохранения, инспекции или работы с графом объектов, а процедуры модуля остаются доступны для вызывающего кода, который уже владеет сериализованными потоками PDF

Syntax

TPdfTreeEditor = class
  class function TryLoad(Source: TStream; Kind: TPdfTreeKind;
    const RootReference: TPdfTreeObjectReference;
    const Options: TPdfTreeEditOptions; out Editor: TPdfTreeEditor;
    out Report: TPdfTreeValidationReport): Boolean; static;
  class function Load(Source: TStream; Kind: TPdfTreeKind;
    const RootReference: TPdfTreeObjectReference;
    const Options: TPdfTreeEditOptions): TPdfTreeEditor; static;
  function UpsertName(const Key, RawValue: AnsiString): Boolean;
  function UpsertNumber(Key: Int64; const RawValue: AnsiString): Boolean;
  function RemoveName(const Key: AnsiString): Boolean;
  function RemoveNumber(Key: Int64): Boolean;
  procedure Clear;
  function Validate(out Report: TPdfTreeValidationReport): Boolean;
  function BuildBalancedObjects(out Objects: TPdfTreeSerializedObjects;
    out Report: TPdfTreeValidationReport): Boolean;
  function SaveIncremental(Source, Dest: TStream;
    out Report: TPdfTreeValidationReport): Boolean;
  property Count: Integer;
  property Entries[Index: Integer]: TPdfTreeEntry; default;
end;
TPdfOutlineEditor = class
  class function TryLoad(Source: TStream;
    const Options: TPdfOutlineEditOptions; out Editor: TPdfOutlineEditor;
    out Report: TPdfOutlineValidationReport): Boolean; static;
  class function Load(Source: TStream;
    const Options: TPdfOutlineEditOptions): TPdfOutlineEditor; static;
  function Add(ParentId, SiblingIndex: Integer; const Title: WideString;
    PageNumber: Integer): Integer;
  function Delete(Id: Integer): Boolean;
  function Move(Id, NewParentId, SiblingIndex: Integer): Boolean;
  procedure SetTitle(Id: Integer; const Title: WideString);
  procedure SetStyle(Id: Integer; const Style: TPdfOutlineStyle);
  procedure SetExpanded(Id: Integer; Expanded: Boolean);
  procedure SetColor(Id: Integer; Red, Green, Blue: Single);
  procedure ClearColor(Id: Integer);
  procedure Retarget(Id, PageNumber: Integer;
    const DestinationSuffix: AnsiString = '/Fit';
    DestinationInAction: Boolean = False);
  function ApplyPageMap(const NewPageNumbers: array of Integer;
    DeleteDangling: Boolean; out Report: TPdfOutlineValidationReport): Boolean;
  function Validate(out Report: TPdfOutlineValidationReport): Boolean;
  function SaveIncremental(Source, Dest: TStream;
    out Report: TPdfOutlineValidationReport): Boolean;
  property Count: Integer;
  property Items[Index: Integer]: TPdfOutlineItem; default;
end;
TPdfCrossDocumentGraftMap = class
  constructor Create(const SourceIdentity: AnsiString);
  procedure Clear;
  function TryResolve(const Source: TPdfGraftObjectReference;
    out Destination: TPdfGraftObjectReference): Boolean;
  procedure Add(const Source, Destination: TPdfGraftObjectReference);
  property Count: Integer;
  property Entries[Index: Integer]: TPdfGraftMapEntry; default;
  property SourceIdentity: AnsiString;
end;
TPdfSparseDictionaryReader = class
  constructor Create(Source: TStream);
  function ReadDictionary(ObjectNumber, Generation: Integer;
    out Dictionary: AnsiString): Boolean;
  function ReadLatestDictionary(ObjectNumber: Integer;
    out Generation: Integer; out Dictionary: AnsiString): Boolean;
  function ReadDecodedStream(ObjectNumber, Generation,
    MaximumDecodedBytes: Integer; out Data: TBytes): Boolean;
  property Valid: Boolean;
end;
procedure CompressPdfStream(Source, Dest: TStream);
procedure LinearizePdfStream(Source, Dest: TStream);
procedure PackPdfObjectStreams(Source, Dest: TStream;
  MaxObjectsPerStream: Integer = 100;
  MaxDecodedBytesPerStream: Integer = 65536);
procedure NormalizePdfDocumentContent(Source, Dest: TStream;
  const Options: TPdfContentNormalizeOptions;
  out Report: TPdfContentNormalizeReport);
function GraftPdfAcroForm(Source, Destination, Output: TStream;
  const PageMappings: TPdfGraftPageMappings;
  const Options: TPdfAcroFormGraftOptions;
  GraftMap: TPdfCrossDocumentGraftMap;
  out Report: TPdfAcroFormGraftReport): Boolean;
procedure PruneUnreachablePdfStream(Source, Dest: TStream;
  out Report: TPdfPruneReport);
procedure PruneUnusedPdfResources(Source, Dest: TStream;
  out Report: TPdfResourcePruneReport;
  AllowSignedDocument: Boolean = False);
procedure DeduplicateResourcesPdfStream(Source, Dest: TStream;
  out Report: TPdfDedupReport);
procedure RecompressFlatePdfStream(Source, Dest: TStream;
  const Options: TPdfFlateRecompressOptions;
  out Report: TPdfFlateRecompressReport);
procedure ExternaliseInlineImagesPdfStream(Source, Dest: TStream;
  const Options: TPdfInlineImageExternaliseOptions;
  out Report: TPdfInlineImageExternaliseReport);
procedure ReproduciblePdfStream(Source, Dest: TStream;
  out Report: TPdfReproducibleReport);
procedure AppendPdfDirtyRevision(BaselineState, CurrentState,
  PreviousOutput, Dest: TStream; out ChangedObjectCount: Integer;
  out AppendedByteCount: Int64);
procedure ApplyDefaultOpenAction(Source, Dest: TStream;
  PdfVersion: Integer = 0);
procedure PageLabelledPdfStream(Source, Dest: TStream;
  const Ranges: TPdfPageLabelRanges; ReplaceExisting: Boolean;
  out Report: TPdfPageLabelReport);
procedure InspectOptionalContentPdfStream(Source: TStream;
  Usage: TPdfOptionalContentUsage; ConfigurationIndex: Integer;
  out Inventory: TPdfOptionalContentInventory);
procedure ConfigureOptionalContentPdfStream(Source, Dest: TStream;
  const Changes: TPdfOptionalContentStateChanges;
  const Options: TPdfOptionalContentConfigureOptions;
  out Report: TPdfOptionalContentConfigureReport);
procedure SanitiseActiveContentPdfStream(Source, Dest: TStream;
  const Options: TPdfSanitiseOptions;
  out Report: TPdfSanitiseReport);
procedure SanitiseActiveContentPdfStream(Source, Dest,
  PruneWorkspace: TStream; const Options: TPdfSanitiseOptions;
  out Report: TPdfSanitiseReport);
procedure ExportPdfObjectGraph(Source, Dest: TStream;
  const Options: TPdfObjectGraphInspectOptions;
  out Report: TPdfObjectGraphReport);
procedure PatchPdfObjectGraph(Source, Dest: TStream;
  const Operations: TPdfObjectPatchOperations;
  out Report: TPdfObjectGraphReport;
  AllowSignedDocument: Boolean = False);
procedure PostProcessSavedPdf(Source, Dest: TStream;
  PdfVersion: Integer = 0);
procedure PostProcessSavedPdf(Source, Dest, NormalizedWorkspace,
  RepairedWorkspace, ValidationWorkspace: TStream;
  PdfVersion: Integer = 0);
procedure RepairSubsetToUnicodeCMaps(Source, Dest: TStream);
function ReadPdfVersionInfo(Source: TStream; out Info: TPdfVersionInfo;
  out ErrorText: string): Boolean;
function ReadPdfSparseRevisionInfo(Source: TStream;
  out Info: TPdfSparseRevisionInfo): Boolean;
function ComposePdfSparseUpdateId(Source: TStream;
  const Info: TPdfSparseRevisionInfo;
  const DocumentId, InstanceId: TBytes): AnsiString;
function ReadPdfSparseCatalogSubDict(Source: TStream;
  const Name: AnsiString; out SubDict: AnsiString): Boolean;
function ReadPdfSparsePageDictionaries(Source: TStream;
  out Pages: TPdfSparsePageDictionaries): Boolean;

Functions and procedures

CallableDescription
TPdfTreeEditor.TryLoadЗагружает и проверяет одно косвенное дерево имён или чисел через разреженный поиск по точному поколению, возвращая структурные свидетельства без возбуждения исключений для некорректного ввода
TPdfTreeEditor.LoadЗагружает одно дерево и возбуждает исключение с ошибкой проверки, когда структура небезопасна для редактирования
TPdfTreeEditor.UpsertName и UpsertNumberВставляют или заменяют одну отсортированную запись, сохраняя её полное исходное значение PDF, включая косвенные ссылки и составные объекты
TPdfTreeEditor.RemoveName, RemoveNumber и ClearУдаляют выбранные записи или опустошают дерево перед детерминированной ребалансировкой
TPdfTreeEditor.ValidateПроверяет упорядочение ключей, дубликаты ключей, исходные значения, лимиты записей и текущие инварианты редактора
TPdfTreeEditor.BuildBalancedObjectsСтроит ограниченные листовые и внутренние узлы с точными /Limits, сохраняет идентичность корня и повторно использует совместимые загруженные ссылки на косвенные узлы, где это возможно
TPdfTreeEditor.SaveIncrementalДописывает сбалансированные объекты как проверенную инкрементную ревизию и независимо перечитывает результат перед сообщением об успехе
TPdfOutlineEditor.TryLoad и LoadЧитают иерархию оглавления через разреженный поиск по точному поколению, проверяют родительские и соседние связи, обнаруживают циклы и сохраняют неподдерживаемые назначения и действия как непрозрачные элементы словаря
TPdfOutlineEditor.Add, Delete и MoveРедактируют полные поддеревья оглавления по стабильным идентификаторам элементов, сохраняя порядок соседей при обходе в глубину
TPdfOutlineEditor.SetTitle, SetStyle, SetExpanded, SetColor и ClearColorОбновляют видимое представление оглавления, не отбрасывая нераспознанные элементы словаря пунктов
TPdfOutlineEditor.RetargetНазначает явное назначение на страницу с нумерацией с единицы как прямые данные /Dest либо действие GoTo с проверенным суффиксом назначения
TPdfOutlineEditor.ApplyPageMapПринимает сопоставление назначений с нумерацией с единицы, созданное проверкой плана страниц, обновляет уцелевшие явные назначения и либо удаляет висящие поддеревья, либо сообщает о них
TPdfOutlineEditor.SaveIncrementalПерестраивает записи корня, родителей, соседей, потомков, счётчика, стиля, цвета и назначений, дописывает инкрементную ревизию и независимо перечитывает семантический результат перед успехом
TPdfCrossDocumentGraftMap.CreateПривязывает многоразовые сопоставления исходных косвенных объектов целевым к одной заданной вызывающим кодом идентичности источника
TPdfCrossDocumentGraftMap.Add и TryResolveСохраняют и разрешают точные пары номера и поколения объекта, принимают идентичные повторы и отклоняют конфликтующие назначения
GraftPdfAcroFormИмпортирует иерархии полей, виджеты, представления, порядок вычислений, ресурсы по умолчанию, действия и значения в сопоставленные целевые страницы, дописывает разреженную инкрементную ревизию и независимо перечитывает результат перед успехом
CompressPdfStreamСжимает Flate подходящие несжатые потоки и перестраивает сериализованную структуру PDF
LinearizePdfStreamПереупорядочивает и перенумеровывает активный граф объектов в линеаризованную раскладку PDF с данными подсказок первой страницы и общих объектов
PackPdfObjectStreamsУпаковывает подходящие объекты, не являющиеся потоками, в ограниченные группы ObjStm и записывает поток перекрёстных ссылок; оба лимита группировки должны быть положительными
NormalizePdfDocumentContentНормализует каждую последовательность содержимого страниц с TPdfContentNormalizeOptions и возвращает документный TPdfContentNormalizeReport
PruneUnreachablePdfStreamПереписывает в одну классическую ревизию только объекты, достижимые из каталога, сохраняя номера и поколения уцелевших объектов
PruneUnusedPdfResourcesПросматривает декодированные операторы содержимого в областях ресурсов страниц, унаследованных, Form XObject, шаблонов, представлений и вложенных, удаляет только неиспользуемые имена ресурсов, дописывает разреженную ревизию и отсекает ставшие недостижимыми объекты
DeduplicateResourcesPdfStreamОтсекает недостижимые объекты и объединяет побайтово идентичные подграфы шрифтов, изображений и Form XObject
RecompressFlatePdfStreamДекодирует и повторно сжимает достижимые потоки FlateDecode, когда выполняются оба запрошенных порога экономии
ExternaliseInlineImagesPdfStreamПереносит блоки встроенных изображений в XObjects изображений, обновляет ресурсы страниц и переписывает затронутые потоки содержимого
ReproduciblePdfStreamДаёт детерминированный вывод одной ревизии, отсекая недостижимые объекты, удаляя метки времени Info и опуская исходный /ID
AppendPdfDirtyRevisionСравнивает базовый и текущий семантические снимки, дописывает изменённые или новые косвенные объекты к предыдущему выводу и сообщает количество дописанного
AppendEncryptedPdfDirtyRevisionДописывает изменённые или новые косвенные объекты в унаследованном контексте шифрования и проверяет или обновляет аутентификацию ревизии
ApplyDefaultOpenActionВставляет действие открытия Fit-Height на первую страницу, когда его нет и выбранная версия PDF это позволяет, используя ограниченные окна потоков и разреженный ленивый поиск по классическим, xref-stream, гибридным и object-stream ревизиям
PageLabelledPdfStreamЗаписывает числовое дерево /PageLabels в каталоге из диапазонов с нумерацией с нуля и при необходимости заменяет существующее дерево, используя ограниченные окна потоков и разреженный поиск по каталогу на обычном пути xref
InspectOptionalContentPdfStreamЧитает группы optional content, конфигурации, членства, метаданные использования и итоговую видимость в опись
ConfigureOptionalContentPdfStreamПрименяет запрошенную видимость групп к выбранной конфигурации и записывает требуемые обновления optional content
SanitiseActiveContentPdfStreamУдаляет выбранные записи активного содержимого из каталога и trailer через разреженный поиск и ограниченное копирование диапазонов, затем может отсечь ставшие недостижимыми объекты; перегрузка с рабочим хранилищем принимает ограниченное или дисковое хранилище вызывающего кода для входа отсечения
ExportPdfObjectGraphСериализует ограниченные данные косвенных объектов в JSON pdf-object-graph-v1 с необязательными дайджестами SHA-256 закодированных потоков
PatchPdfObjectGraphУстанавливает или удаляет записи верхнего уровня словаря по идентичности объекта и дописывает проверенную инкрементную ревизию
PostProcessSavedPdfВыполняет обработку действия открытия по умолчанию, нормализацию с учётом версии и нативное восстановление инкрементного xref-stream; перегрузка с тремя различными перемещаемыми рабочими хранилищами позволяет вызывающему коду применить собственную политику ограниченного или дискового хранения
RepairSubsetToUnicodeCMapsПереписывает ToUnicode CMap subset-шрифтов, элементы массива которых противоречат их записям bfchar, используя равные по длине правки элементов на месте (побеждают значения bfchar, пара, различающаяся только старшим битом, сводится к меньшему code point, любой другой конфликт сохраняет первое отображение); документы без /ToUnicode и с раскладками xref-stream, гибридными или object-stream проходят без изменений, и каждое полное неинкрементное сохранение TPdf применяет ту же починку автоматически
ReadPdfVersionInfoЧитает версию заголовка, переопределение в каталоге, действующую базовую версию и сведения о расширении разработчика Adobe
ReadPdfSparseRevisionInfoЧитает через разреженный индекс объектов ограниченные сведения о последней ревизии, байты каталога, поколения объектов, стиль xref, состояние шифрования, идентификаторы документа и свидетельства tagged-структуры
ComposePdfSparseUpdateIdФорматирует /ID инкрементного trailer, сохраняя идентификаторы вызывающего кода или источника и вычисляя отсутствующие значения через ограниченный потоковый дайджест
ReadPdfSparseCatalogSubDictЧитает прямой или косвенный подсловарь каталога, например MarkInfo или ViewerPreferences, через разреженный индекс объектов
ReadPdfSparsePageDictionariesОбходит активное дерево страниц через разреженный поиск по классическим, xref-stream, гибридным и object-stream ревизиям и возвращает словари страниц в порядке страниц
TPdfSparseDictionaryReader.CreateСтроит многоразовый разреженный индекс над исходным потоком, принадлежащим вызывающему коду, и сообщает об успешной инициализации через Valid; источник должен оставаться живым, пока используется читатель
TPdfSparseDictionaryReader.DestroyОсвобождает удержанные буферы индекса, не освобождая исходный поток вызывающего кода
TPdfSparseDictionaryReader.ReadDictionaryРазрешает точную пару номера объекта и поколения через удержанный индекс и возвращает ограниченные байты активного словаря
TPdfSparseDictionaryReader.ReadLatestDictionaryРазрешает активную запись xref для номера объекта, возвращает её поколение и читает её словарь через удержанный индекс
TPdfSparseDictionaryReader.ReadDecodedStreamЧитает и декодирует один прямой нефильтрованный или одиночный поток FlateDecode, соблюдая MaximumDecodedBytes
TPdfOptionalContentConfigureOptions.DefaultВыбирает конфигурацию 0 и использование View, удаляет правила автоматических состояний и навязывает радиогруппы
TPdfSanitiseOptions.DefaultВключает удаление действий открытия, действий каталога, деревьев имён, связанных файлов и недостижимых объектов, сохраняя AcroForm и метаданные
TPdfObjectGraphInspectOptions.DefaultВозвращает лимиты 100000 объектов, глубину 32, вывод 64 МиБ, строки 1 МиБ и включённые дайджесты потоков

Types

TypeDescription
TPdfTreeKindВыбирает отсортированное по байтам дерево имён с ptkName или знаковое 64-битное дерево чисел с ptkNumber
TPdfTreeObjectReferenceИдентифицирует один косвенный узел дерева по ObjectNumber и Generation
TPdfTreeEntryХранит NameKey или NumberKey плюс один нормализованный полный объект PDF в RawValue; TPdfTreeEntries — его динамический массив
TPdfTreeEditOptionsОграничивает MaxEntries, MaxNodes, MaxDepth, MaxLeafEntries и MaxKidsPerNode; Default задаёт консервативные рабочие лимиты
TPdfTreeValidationIssueОдна проблема со свидетельствами объекта и диагностическим Message; TPdfTreeValidationIssues — её динамический массив
TPdfTreeValidationIssueKindЗначения проблем ptviInvalidRoot, ptviUnreadableNode, ptviCycle, ptviDepthLimit, ptviNodeLimit, ptviEntryLimit, ptviInvalidNodeShape, ptviInvalidKey, ptviInvalidValue, ptviInvalidLimits, ptviDuplicateKey, ptviUnsortedKey и ptviDeadlineExceeded
TPdfTreeValidationReportСообщает NodeCount, EntryCount, MaximumDepth, Issues, свидетельства объектов, состояние успеха и текст ошибки
TPdfTreeSerializedObjectСодержит одну ссылку на сбалансированный узел, полные данные косвенного объекта и признак повторного использования ссылки
TPdfTreeEditorИзменяемая модель отсортированного дерева, сохраняющая непрозрачные значения PDF и выдающая сбалансированную косвенную иерархию
TPdfOutlineStyleFlagЗначения представления posItalic и posBold; TPdfOutlineStyle — их множество
TPdfOutlineObjectReferenceИдентифицирует удержанный объект оглавления по номеру и поколению объекта
TPdfOutlineItemХранит стабильную идентичность, идентичность родителя, заголовок, явное назначение, форму действия, IsOpen, стиль, HasColor, ColorRed, ColorGreen, ColorBlue и удержанную ссылку на объект; TPdfOutlineItems — его динамический массив
TPdfOutlineEditOptionsОграничивает MaxItems и глубину иерархии; консервативные значения по умолчанию задаёт Default
TPdfOutlineValidationIssueKindЗначения проблем poviNone, poviInvalidCatalog, poviUnreadableItem, poviCycle, poviDepthLimit, poviItemLimit, poviInvalidParent, poviInvalidSibling, poviMissingTitle, poviInvalidDestination, poviInvalidPageMap, poviEncryptedInput, poviWriteFailure и poviVerificationFailure
TPdfOutlineValidationReportСообщает IssueKind, свидетельства объектов, ItemCount, MaximumDepth, RemappedDestinationCount, RemovedDanglingItemCount, состояние успеха и текст ошибки
TPdfOutlineEditorИзменяемая модель оглавления с обходом в глубину, проверенным перемэппингом по плану страниц и инкрементным сохранением
TPdfGraftObjectReferenceИдентифицирует исходный или целевой косвенный объект по точным номеру и поколению объекта
TPdfCrossDocumentGraftMapМногоразовая карта объектов, привязанная к идентичности источника и опирающаяся на TPdfGraftMapEntries, которая сохраняет циклы и общие ссылки и откатывает записи, добавленные неудачным переносом
TPdfGraftPageMappingСопоставляет SourcePageNumber с нумерацией с единицы и DestinationPageNumber с нумерацией с единицы для обновлений /P виджетов и /Annots страниц
TPdfAcroFormCollisionPolicyВыбирает pagcpReject или pagcpRename, когда заголовок корневого поля источника совпадает с заголовком корневого поля назначения
TPdfAcroFormGraftOptionsУправляет CollisionPolicy, RenamePrefix, бюджетами объектов и рекурсии и AllowSignedDestination
TPdfAcroFormGraftReportСообщает SourceFieldCount, GraftedFieldCount, ReusedObjectCount, DestinationFieldCount, MappedPageCount, GraftedObjectCount, RenamedFieldCount, размер вывода, состояние успеха и текст ошибки
TPdfVersionInfoОтчёт о версии с HeaderVersion, CatalogVersion, CoreVersion, AdobeBaseVersion, AdobeExtensionLevel, HasCatalogVersion, HasDeveloperExtensions и HasAdobeExtension
TPdfSparseRevisionInfoСнимок последней ревизии с RootObjectNumber, RootGeneration, InfoObjectNumber, InfoGeneration, SizeValue, MaximumObjectNumber, PreviousXrefOffset, UsesXrefStream, HasEncrypt, HasDocumentId, HasTaggedStructure, FirstDocumentId, CatalogDictionary и InfoDictionary
TPdfSparseUpdateObjectОдна запись ревизии с ObjectNumber, Generation и полным телом Data, несущим байты N G obj ... endobj
TPdfSparseUpdateObjectsДинамический массив записей TPdfSparseUpdateObject, дописываемых AppendPdfSparseUpdate
TPdfSparsePageDictionaryОдин активный объект страницы с ObjectNumber, Generation и ограниченными байтами Dictionary
TPdfSparsePageDictionariesДинамический массив активных словарей страниц в порядке дерева страниц
TPdfSparseDictionaryReaderМногоразовый владелец разреженного индекса классических, xref-stream, гибридных и object-stream ревизий для повторного поиска словарей по точному поколению без выделения памяти под весь источник
TPdfPruneReportРезультат проверки достижимости с SourceByteCount, OutputByteCount, KeptObjectCount, PrunedObjectCount, Succeeded и ErrorMessage
TPdfResourcePruneReportРезультат отсечения ресурсов с ScannedScopeCount, UpdatedScopeCount, RemovedNameCount, RemovedObjectCount, счётчиками потоков, итогами по байтам, состоянием успеха и текстом ошибки
TPdfDedupReportРезультат дедупликации с SourceByteCount, OutputByteCount, KeptObjectCount, PrunedObjectCount, MergedFontCount, MergedImageCount, MergedFormXObjectCount, Succeeded и ErrorMessage
TPdfFlateRecompressOptionsПороги замены MinSavingBytes и MinSavingRatio
TPdfFlateRecompressReportРезультат повторного сжатия с SourceByteCount, OutputByteCount, RecompressedCount, SkippedCount, FailedCount, OriginalStreamBytes, RecompressedStreamBytes, Succeeded и ErrorMessage
TPdfInlineImageExternaliseOptionsСодержит SkipUnsafePages, сохраняющий страницы, границы встроенных изображений которых не удаётся разрешить
TPdfInlineImageExternaliseReportРезультат вынесения встроенных изображений с SourceByteCount, OutputByteCount, ExternalisedCount, SkippedPageCount, FailedCount, CreatedXObjectCount, Succeeded и ErrorMessage
TPdfReproducibleReportРезультат детерминированного переписывания с SourceByteCount, OutputByteCount, KeptObjectCount, PrunedObjectCount, StrippedTimestampCount, Succeeded и ErrorMessage
TPdfPageLabelStyleСтили нумерации plsNone, plsDecimal, plsUppercaseRoman, plsLowercaseRoman, plsUppercaseLetters и plsLowercaseLetters
TPdfPageLabelRangeОдин диапазон меток с StartPageIndex с нумерацией с нуля, Style, Prefix и StartNumber
TPdfPageLabelRangesДинамический массив значений TPdfPageLabelRange
TPdfPageLabelReportРезультат перезаписи меток с SourceByteCount, OutputByteCount, AppliedRangeCount, ReplacedExistingLabels, Succeeded и ErrorMessage
TPdfOptionalContentUsageКонтексты видимости ocuView, ocuPrint, ocuExport и ocuDesign
TPdfOptionalContentStateСостояния по контекстам использования ocsUnspecified, ocsOn и ocsOff
TPdfOptionalContentBaseStateБазовые состояния конфигурации ocbsOn, ocbsOff и ocbsUnchanged
TPdfOptionalContentMembershipPolicyПолитики членства ocmpAnyOn, ocmpAllOn, ocmpAnyOff, ocmpAllOff и ocmpUnknown
TPdfOptionalContentIntegerArrayДинамический массив целых чисел для коллекций номеров объектов optional content
TPdfOptionalContentStringArrayДинамический массив AnsiString для коллекций имён PDF
TPdfOptionalContentWideStringArrayДинамический массив WideString для декодированного текста optional content
TPdfOptionalContentRadioGroupОдна взаимоисключающая группа, представленная GroupObjectNumbers
TPdfOptionalContentRadioGroupsДинамический массив значений TPdfOptionalContentRadioGroup
TPdfOptionalContentGroupЗапись OCG с ObjectNumber, Generation, Name, Intents, ViewState, PrintState, ExportState, PageElementSubtype, Language, LanguagePreferred, UserType, UserNames, HasZoomRange, MinimumZoom, MaximumZoom, EffectiveVisible, Locked и RadioGroupIndex
TPdfOptionalContentGroupsДинамический массив значений TPdfOptionalContentGroup
TPdfOptionalContentConfigurationЗапись конфигурации с ObjectNumber, Generation, Name, Creator, BaseState, Intents, OnGroupObjectNumbers, OffGroupObjectNumbers, LockedGroupObjectNumbers, OrderGroupObjectNumbers, RadioGroups и HasAutomaticState
TPdfOptionalContentConfigurationsДинамический массив значений TPdfOptionalContentConfiguration
TPdfOptionalContentMembershipЗапись OCMD с ObjectNumber, Generation, GroupObjectNumbers, Policy, VisibilityExpression и EffectiveVisible
TPdfOptionalContentMembershipsДинамический массив значений TPdfOptionalContentMembership
TPdfOptionalContentInventoryРезультат инспекции с Usage, SelectedConfigurationIndex, Groups, Configurations, Memberships, Succeeded и ErrorMessage
TPdfOptionalContentStateChangeЗапрошенное состояние Visible для одного GroupObjectNumber
TPdfOptionalContentStateChangesДинамический массив значений TPdfOptionalContentStateChange
TPdfOptionalContentConfigureOptionsВыбранные конфигурация и контекст использования плюс управляющие флаги DisableAutomaticState и EnforceRadioGroups
TPdfOptionalContentConfigureReportРезультат конфигурации с SourceByteCount, OutputByteCount, GroupCount, ChangedGroupCount, UpdatedUsageStateCount, SelectedConfigurationIndex, RemovedAutomaticState, Succeeded и ErrorMessage
TPdfSanitiseOptionsНезависимые управляющие флаги StripOpenAction, StripCatalogActions, StripNames, StripAssociatedFiles, StripAcroForm, StripMetadata и RemoveUnreachable
TPdfSanitiseReportРезультат очистки с SourceByteCount, OutputByteCount, StrippedEntryCount, PrunedObjectCount, вложенным PruneReport, Succeeded и ErrorMessage
TPdfObjectGraphInspectOptionsОграничивает экспорт JSON параметрами MaxObjects, MaxDepth, MaxOutputBytes, MaxStringBytes и IncludeStreamDigests
TPdfObjectGraphReportОбщий результат экспорта и исправления с SourceByteCount, OutputByteCount, ObjectCount, ExportedObjectCount, PatchedObjectCount, AppliedOperationCount, Truncated, Succeeded и ErrorMessage
TPdfObjectPatchOperationKindДействия исправления popSet и popRemove
TPdfObjectPatchValueKindВиды значений povNull, povBoolean, povInteger, povReal, povName, povTextString и povReference
TPdfObjectPatchValueЗначение с тегом Kind и полями BooleanValue, IntegerValue, RealValue, TextValue, ReferenceObjectNumber и ReferenceGeneration
TPdfObjectPatchOperationОдна операция с Kind, ObjectNumber, Generation, Key и Value
TPdfObjectPatchOperationsДинамический массив значений TPdfObjectPatchOperation

Safety and limits

TPdfOutlineEditor.SetUri заменяет пункт назначения действием URI в UTF-8 и безопасно кодирует литеральные разделители; проверка сохранения игнорирует раскрытое состояние у листовых элементов, поскольку PDF не указывает для них Count ветви

Перегрузка GraftPdfAcroForm с параметрами поддерживает pagcpReject, pagcpRename, pagcpNamespace и совместимое объединение терминальных текстовых полей и полей выбора с отбрасыванием невыбранных виджетов, изолированными ресурсами, внешним видом и порядком вычислений; о политиках и транзакционной интеграции в документ см FPdfFormMerge

Отчёты о конфликтах AcroForm

TPdfAcroFormGraftOptions.NamespacePrefix задаёт имя родителя, вставляемого политикой пространства имён; TPdfAcroFormCollisionPolicy.pagcpMergeCompatible объединяет поддерживаемые совместимые терминальные текстовые поля или поля выбора

TPdfAcroFormGraftReport.FilteredFieldCount и TPdfAcroFormGraftReport.FilteredWidgetCount считают исходные записи, удалённые фильтрацией по выбранным страницам; TPdfAcroFormGraftReport.ResourceRenameCount считает изолированные имена ресурсов по умолчанию, а TPdfAcroFormGraftReport.MergedFieldCount — совместимые поля, присоединённые к существующему владельцу

CapturePdfNavigation и WritePdfNavigation собирают и пересопоставляют именованные пункты назначения и аннотации ссылок страниц по явным сопоставлениям страниц-владельцев; о семантике сырых ключей, параметрах пунктов назначения, лимитах и транзакционной интеграции см FPdfMerge

Записи захвата навигации

TPdfNavigationNamedDestination= record
    // Keep the original PDF string bytes, including a UTF-16 BOM when present
    NameKey: AnsiString;
    // Absolute one-based page number; zero denotes an unresolved target
    PageNumber: Integer;
    // Exact destination mode and parameters, including null values
    DestinationSuffix: AnsiString;
  end;
  TPdfNavigationNamedDestinations= array of TPdfNavigationNamedDestination;
  TPdfNavigationPageLink= record
    // Owner page is one-based; annotation and link-only ordinals are zero-based
    PageNumber, AnnotationIndex, LinkIndex: Integer;
    HasDestination, HasGotoAction: Boolean;
    DestinationPageNumber, ActionPageNumber: Integer;
    DestinationSuffix, ActionSuffix: AnsiString;
  end;
  TPdfNavigationPageLinks= array of TPdfNavigationPageLink;

Чтение значений активных объектов

ReadPdfActiveObjects возвращает последние значения активных объектов с их точными номерами генерации и активную ревизию каталога, разрешая классические таблицы xref, потоки xref, инкрементальные ревизии и сжатые элементы объектных потоков

Body исключает заголовок косвенного объекта и маркер endobj; обычные потоки сохраняют свой словарь и закодированное содержимое, а сжатые элементы материализуются как обычные значения, при этом инфраструктура xref и объектных потоков исключается из возвращаемой коллекции

Позиция источника восстанавливается, а при сбое возвращается пустая коллекция объектов с диагностикой; зашифрованный ввод отклоняется, а подписи можно исследовать, не изменяя их байты

Значения по умолчанию допускают 256 МиБ исходных байтов, 64 МиБ на материализованное тело, 256 МиБ суммарно по телам, 64 МиБ на декодированный объектный поток, 256 МиБ суммарно по кэшам декодированных объектных потоков и 1 000 000 слотов номеров объектов

Лимиты тел проверяются перед каждым копированием тела и учитывают как возвращаемые значения, так и временные инфраструктурные тела; независимо заданные лимиты кэша декодирования останавливают декодирование объектных потоков до превышения бюджета вызывающего

Это логические лимиты буферов, а не общепроцессный предел памяти: копии источника, промежуточный поток прямых объектов, буферы сканирования, рабочая память декодера и метаданные объектов потребляют дополнительные ограниченные выделения, а буферы сканирования могут дублировать сохраняемые тела

type
  TPdfActiveObject = record
    ObjectNumber, Generation: Integer;
    Body: TBytes;
  end;
  TPdfActiveObjects = array of TPdfActiveObject;
  TPdfActiveObjectReadOptions = record
    MaxSourceBytes, MaxObjectBytes, MaxTotalObjectBytes: Int64;
    MaxDecodedObjectStreamBytes, MaxTotalDecodedObjectStreamBytes: Int64;
    MaxObjects: Integer;
    class function Default: TPdfActiveObjectReadOptions; static;
  end;

function ReadPdfActiveObjects(Source: TStream;
  const Options: TPdfActiveObjectReadOptions; out Objects: TPdfActiveObjects;
  out Revision: TPdfSparseRevisionInfo; out ErrorText: string): Boolean;

See Also

FPdfContentNormalize, TPdf.SaveAs, TPdf.SaveAsNormalizedContent, TPdf.InspectOptionalContent, TPdf.ObjectGraph, ReadPdfVersionInfo