PDFium Delphi Component Docs

Unidade FPdfCompress

Unidade: FPdfCompress
Regravação de PDF em nível de stream, compactação, normalização de conteúdo, configuração de optional content, sanitização, acesso ao grafo de objetos, revisões incrementais e inspeção de versão usados pelo pipeline de salvamento do TPdf

Description

FPdfCompress contém os transformadores de stream públicos usados depois que o PDFium serializa um documento, além de records que configuram cada transformador e relatam seu resultado

Os auxiliares de regravação completa materializam o grafo de objetos ativo, preservam ou reconstruem deliberadamente as referências cruzadas e rejeitam entradas que não podem ser regravadas com segurança; os procedimentos baseados em relatório retornam falhas por meio de Succeeded e ErrorMessage

A maioria dos aplicativos usa os métodos correspondentes de salvamento, inspeção ou grafo de objetos de TPdf, enquanto os procedimentos da unidade permanecem disponíveis para quem já possui streams de PDF serializados

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.TryLoadCarrega e valida uma NameTree ou NumberTree indireta por meio de busca esparsa por geração exata, retornando evidências estruturais sem disparar exceções para entrada malformada
TPdfTreeEditor.LoadCarrega uma árvore e dispara uma exceção com o erro de validação quando a estrutura não é segura para edição
TPdfTreeEditor.UpsertName e UpsertNumberInsere ou substitui uma entrada ordenada preservando seu valor PDF bruto completo, incluindo referências indiretas e objetos compostos
TPdfTreeEditor.RemoveName, RemoveNumber e ClearRemovem entradas selecionadas ou esvaziam a árvore antes do rebalanceamento determinístico
TPdfTreeEditor.ValidateVerifica a ordenação de chaves, chaves duplicadas, valores brutos, limites de entradas e os invariantes atuais do editor
TPdfTreeEditor.BuildBalancedObjectsConstrói nós folha e internos limitados com /Limits exatos, retém a identidade da raiz e reutiliza referências indiretas de nós carregadas compatíveis sempre que possível
TPdfTreeEditor.SaveIncrementalAnexa os objetos balanceados como uma revisão incremental verificada e recarrega o resultado de forma independente antes de relatar sucesso
TPdfOutlineEditor.TryLoad e LoadLeem uma hierarquia de outline por meio de busca esparsa por geração exata, validam os links de pai e de irmão, detectam ciclos e preservam destinos e ações não suportados como entradas de dicionário opacas
TPdfOutlineEditor.Add, Delete e MoveEditam subárvores de outline completas por identificadores estáveis de itens, mantendo a ordem depth-first de irmãos
TPdfOutlineEditor.SetTitle, SetStyle, SetExpanded, SetColor e ClearColorAtualizam a apresentação visível do outline sem descartar entradas de dicionário de itens não reconhecidas
TPdfOutlineEditor.RetargetAtribui um destino explícito de página com base um como dados diretos de /Dest ou como uma ação GoTo com sufixo de destino validado
TPdfOutlineEditor.ApplyPageMapConsome o mapeamento de destinos com base um produzido pela validação do plano de páginas, atualiza os destinos explícitos sobreviventes e remove subárvores órfãs ou as relata
TPdfOutlineEditor.SaveIncrementalReconstrói as entradas de raiz, pai, irmão, filho, contagem, estilo, cor e destino, anexa uma revisão incremental e recarrega o resultado semântico de forma independente antes de informar sucesso
TPdfCrossDocumentGraftMap.CreateVincula mapeamentos reutilizáveis de origem para destino de objetos indiretos a uma identidade de origem fornecida por quem chama
TPdfCrossDocumentGraftMap.Add e TryResolveArmazenam e resolvem pares exatos de número de objeto e geração, aceitam repetições idênticas e rejeitam destinos conflitantes
GraftPdfAcroFormImporta hierarquias de campos, widgets, aparências, ordem de cálculo, recursos padrão, ações e valores para as páginas de destino mapeadas, anexa uma revisão incremental esparsa e recarrega o resultado de forma independente antes de informar sucesso
CompressPdfStreamComprime com Flate os streams não compactados elegíveis e reconstrói a estrutura serializada do PDF
LinearizePdfStreamReordena e renumera o grafo de objetos ativo no layout de PDF linearized com dados de hint de primeira página e de objetos compartilhados
PackPdfObjectStreamsEmpacota objetos não stream elegíveis em grupos ObjStm limitados e grava um cross-reference stream; ambos os limites de agrupamento devem ser positivos
NormalizePdfDocumentContentNormaliza cada sequência de conteúdo de página com TPdfContentNormalizeOptions e retorna um TPdfContentNormalizeReport de nível de documento
PruneUnreachablePdfStreamRegrava somente os objetos alcançáveis a partir do catálogo em uma revisão clássica, preservando os números e as gerações de objetos sobreviventes
PruneUnusedPdfResourcesExamina operadores de conteúdo decodificados nos escopos de recursos de página, herdados, Form XObject, pattern, aparência e aninhados, remove somente nomes de recursos não usados, anexa uma revisão esparsa e faz a poda dos objetos que ficaram inalcançáveis
DeduplicateResourcesPdfStreamFaz a poda de objetos inalcançáveis e mescla subgrafos de fontes, imagens e Form XObject idênticos byte a byte
RecompressFlatePdfStreamDecodifica e recompacta streams FlateDecode alcançáveis quando ambos os limites de economia solicitados são atendidos
ExternaliseInlineImagesPdfStreamMove blocos de imagens inline para image XObjects, atualiza os recursos da página e regrava os streams de conteúdo afetados
ReproduciblePdfStreamProduz saída determinística de revisão única ao fazer a poda de objetos inalcançáveis, remover timestamps do Info e omitir o /ID da origem
AppendPdfDirtyRevisionCompara snapshots semânticos do baseline e atuais, anexa objetos indiretos alterados ou novos à saída anterior e informa as contagens anexadas
AppendEncryptedPdfDirtyRevisionAnexa objetos indiretos alterados ou novos sob o contexto de criptografia herdado e valida ou renova a autenticação da revisão
ApplyDefaultOpenActionInjeta uma open action Fit-Height de primeira página quando nenhuma existe e a versão de PDF selecionada o permite, usando janelas de stream limitadas e busca esparsa lazy nas revisões clássicas, xref-stream, híbridas e de object-stream
PageLabelledPdfStreamGrava uma number tree /PageLabels de catálogo a partir de intervalos com base zero e, opcionalmente, substitui uma árvore existente, usando janelas de stream limitadas e busca esparsa de catálogo no caminho xref normal
InspectOptionalContentPdfStreamLê grupos, configurações, associações, metadados de uso e visibilidade efetiva de optional content em um inventário
ConfigureOptionalContentPdfStreamAplica a visibilidade de grupo solicitada a uma configuração selecionada e grava as atualizações de optional content necessárias
SanitiseActiveContentPdfStreamRemove entradas de active content selecionadas do catálogo e do trailer por meio de busca esparsa e cópia de intervalo limitada e, em seguida, pode fazer a poda dos objetos que ficaram inalcançáveis com essa remoção; o overload com workspace aceita armazenamento limitado ou apoiado em disco de propriedade de quem chama para a entrada da poda
ExportPdfObjectGraphSerializa dados limitados de objetos indiretos como JSON pdf-object-graph-v1 com resumos SHA-256 de streams codificados opcionais
PatchPdfObjectGraphDefine ou remove entradas de dicionário de nível superior por identidade de objeto e anexa uma revisão incremental verificada
PostProcessSavedPdfExecuta o tratamento da open action padrão, a normalização específica de versão e o reparo nativo incremental de xref-stream; o overload com três workspaces seekable distintos permite que quem chama aplique sua própria política de armazenamento limitado ou apoiado em disco
RepairSubsetToUnicodeCMapsReescreve ToUnicode CMaps de fontes subsetadas cujos elementos de array contradizem suas entradas bfchar, usando edições in-place de elementos de mesmo tamanho (valores bfchar vencem, um par que difere só no bit alto resolve para o code point menor, qualquer outro conflito mantém o primeiro mapeamento); documentos sem /ToUnicode ou com layout de xref-stream, hybrid ou object-stream passam intactos, e todo save completo não incremental de TPdf aplica o mesmo reparo automaticamente
ReadPdfVersionInfoLê o header, a substituição do catálogo, a versão core efetiva e as informações de extensão de desenvolvedor Adobe
ReadPdfSparseRevisionInfoLê, por meio do índice esparso de objetos, dados limitados da última revisão, bytes do catálogo, gerações de objetos, estilo de xref, estado de criptografia, identificadores de documento e evidências de estrutura tagged
ComposePdfSparseUpdateIdFormata um /ID de trailer incremental preservando identificadores de quem chama ou da origem e derivando valores ausentes por meio de um digest de streaming limitado
ReadPdfSparseCatalogSubDictLê um subdicionário de catálogo direto ou indireto, como MarkInfo ou ViewerPreferences, por meio do índice esparso de objetos
ReadPdfSparsePageDictionariesPercorre a árvore de páginas ativa por meio de busca esparsa clássica, xref-stream, híbrida e de object-stream e retorna os dicionários de página na ordem das páginas
TPdfSparseDictionaryReader.CreateConstrói um índice esparso reutilizável sobre um stream de origem de propriedade de quem chama e informa o sucesso da inicialização por meio de Valid; a origem deve permanecer viva enquanto o leitor for usado
TPdfSparseDictionaryReader.DestroyLibera os buffers de índice retidos sem liberar o stream de origem de propriedade de quem chama
TPdfSparseDictionaryReader.ReadDictionaryResolve um número de objeto e uma geração exatos por meio do índice retido e retorna os bytes limitados do dicionário ativo
TPdfSparseDictionaryReader.ReadLatestDictionaryResolve a entrada xref ativa de um número de objeto, retorna sua geração e lê seu dicionário por meio do índice retido
TPdfSparseDictionaryReader.ReadDecodedStreamLê e decodifica um stream direto não filtrado ou com um único FlateDecode, impondo MaximumDecodedBytes
TPdfOptionalContentConfigureOptions.DefaultSeleciona a configuração 0 e o uso View, remove regras de estado automático e impõe grupos de rádio
TPdfSanitiseOptions.DefaultHabilita a remoção de open action, ação de catálogo, name tree, arquivo associado e objetos inalcançáveis, preservando AcroForm e metadados
TPdfObjectGraphInspectOptions.DefaultRetorna limites de 100000 objetos, profundidade 32, saída de 64 MiB, strings de 1 MiB e resumos de stream habilitados

Types

TypeDescription
TPdfTreeKindSeleciona uma NameTree ordenada por bytes com ptkName ou uma NumberTree de 64 bits com sinal com ptkNumber
TPdfTreeObjectReferenceIdentifica um nó de árvore indireto por ObjectNumber e Generation
TPdfTreeEntryArmazena NameKey ou NumberKey mais um objeto PDF completo normalizado em RawValue; TPdfTreeEntries é seu array dinâmico
TPdfTreeEditOptionsLimita MaxEntries, MaxNodes, MaxDepth, MaxLeafEntries e MaxKidsPerNode; Default fornece limites conservadores de produção
TPdfTreeValidationIssueUma questão que carrega evidências de objeto e Message de diagnóstico; TPdfTreeValidationIssues é seu array dinâmico
TPdfTreeValidationIssueKindValores de questão ptviInvalidRoot, ptviUnreadableNode, ptviCycle, ptviDepthLimit, ptviNodeLimit, ptviEntryLimit, ptviInvalidNodeShape, ptviInvalidKey, ptviInvalidValue, ptviInvalidLimits, ptviDuplicateKey, ptviUnsortedKey e ptviDeadlineExceeded
TPdfTreeValidationReportInforma NodeCount, EntryCount, MaximumDepth, Issues, evidências de objeto, estado de sucesso e texto de erro
TPdfTreeSerializedObjectContém uma referência de nó balanceado, os dados completos do objeto indireto e se a referência foi reutilizada
TPdfTreeEditorModelo mutável de árvore ordenada que preserva valores PDF opacos e emite uma hierarquia indireta balanceada
TPdfOutlineStyleFlagValores de apresentação posItalic e posBold; TPdfOutlineStyle é o conjunto deles
TPdfOutlineObjectReferenceIdentifica um objeto de outline retido por número de objeto e geração
TPdfOutlineItemArmazena identidade estável, identidade do pai, título, destino explícito, forma de ação, IsOpen, estilo, HasColor, ColorRed, ColorGreen, ColorBlue e referência de objeto retido; TPdfOutlineItems é seu array dinâmico
TPdfOutlineEditOptionsLimita MaxItems e a profundidade da hierarquia, com padrões conservadores fornecidos por Default
TPdfOutlineValidationIssueKindValores de questão poviNone, poviInvalidCatalog, poviUnreadableItem, poviCycle, poviDepthLimit, poviItemLimit, poviInvalidParent, poviInvalidSibling, poviMissingTitle, poviInvalidDestination, poviInvalidPageMap, poviEncryptedInput, poviWriteFailure e poviVerificationFailure
TPdfOutlineValidationReportInforma IssueKind, evidências de objeto, ItemCount, MaximumDepth, RemappedDestinationCount, RemovedDanglingItemCount, estado de sucesso e texto de erro
TPdfOutlineEditorModelo mutável de outline depth-first com remapeamento verificado de plano de páginas e persistência incremental
TPdfGraftObjectReferenceIdentifica um objeto indireto de origem ou de destino por número de objeto e geração exatos
TPdfCrossDocumentGraftMapMapa de objetos reutilizável vinculado à identidade de origem, apoiado em TPdfGraftMapEntries, que preserva ciclos e referências compartilhadas e desfaz as entradas adicionadas por um graft com falha
TPdfGraftPageMappingMapeia SourcePageNumber com base um para DestinationPageNumber com base um nas atualizações de /P de widget e de /Annots de página
TPdfAcroFormCollisionPolicySeleciona pagcpReject ou pagcpRename quando um título de campo raiz da origem colide com um título de campo raiz do destino
TPdfAcroFormGraftOptionsControla CollisionPolicy, RenamePrefix, os orçamentos de objeto e de recursão e AllowSignedDestination
TPdfAcroFormGraftReportInforma SourceFieldCount, GraftedFieldCount, ReusedObjectCount, DestinationFieldCount, MappedPageCount, GraftedObjectCount, RenamedFieldCount, o tamanho da saída, o estado de sucesso e o texto de erro
TPdfVersionInfoRelatório de versão com HeaderVersion, CatalogVersion, CoreVersion, AdobeBaseVersion, AdobeExtensionLevel, HasCatalogVersion, HasDeveloperExtensions e HasAdobeExtension
TPdfSparseRevisionInfoSnapshot da última revisão com RootObjectNumber, RootGeneration, InfoObjectNumber, InfoGeneration, SizeValue, MaximumObjectNumber, PreviousXrefOffset, UsesXrefStream, HasEncrypt, HasDocumentId, HasTaggedStructure, FirstDocumentId, CatalogDictionary e InfoDictionary
TPdfSparseUpdateObjectUma entrada de revisão com ObjectNumber, Generation e um corpo Data completo contendo os bytes N G obj ... endobj
TPdfSparseUpdateObjectsArray dinâmico de entradas TPdfSparseUpdateObject anexadas por AppendPdfSparseUpdate
TPdfSparsePageDictionaryUm objeto de página ativo com ObjectNumber, Generation e bytes limitados de Dictionary
TPdfSparsePageDictionariesArray dinâmico de dicionários de página ativos na ordem da árvore de páginas
TPdfSparseDictionaryReaderProprietário reutilizável de um índice esparso clássico, xref-stream, híbrido e de object-stream para buscas repetidas de dicionário por geração exata sem alocação do tamanho da origem
TPdfPruneReportResultado de alcançabilidade com SourceByteCount, OutputByteCount, KeptObjectCount, PrunedObjectCount, Succeeded e ErrorMessage
TPdfResourcePruneReportResultado de poda de recursos com ScannedScopeCount, UpdatedScopeCount, RemovedNameCount, RemovedObjectCount, contagens de streams, totais de bytes, estado de sucesso e texto de erro
TPdfDedupReportResultado de deduplicação com SourceByteCount, OutputByteCount, KeptObjectCount, PrunedObjectCount, MergedFontCount, MergedImageCount, MergedFormXObjectCount, Succeeded e ErrorMessage
TPdfFlateRecompressOptionsLimites de substituição MinSavingBytes e MinSavingRatio
TPdfFlateRecompressReportResultado de recompactação com SourceByteCount, OutputByteCount, RecompressedCount, SkippedCount, FailedCount, OriginalStreamBytes, RecompressedStreamBytes, Succeeded e ErrorMessage
TPdfInlineImageExternaliseOptionsContém SkipUnsafePages, que preserva as páginas cujos limites de imagens inline não podem ser resolvidos
TPdfInlineImageExternaliseReportResultado de externalização com SourceByteCount, OutputByteCount, ExternalisedCount, SkippedPageCount, FailedCount, CreatedXObjectCount, Succeeded e ErrorMessage
TPdfReproducibleReportResultado de regravação determinística com SourceByteCount, OutputByteCount, KeptObjectCount, PrunedObjectCount, StrippedTimestampCount, Succeeded e ErrorMessage
TPdfPageLabelStyleEstilos de numeração plsNone, plsDecimal, plsUppercaseRoman, plsLowercaseRoman, plsUppercaseLetters e plsLowercaseLetters
TPdfPageLabelRangeUm intervalo de rótulos com StartPageIndex com base zero, Style, Prefix e StartNumber
TPdfPageLabelRangesArray dinâmico de valores TPdfPageLabelRange
TPdfPageLabelReportResultado de regravação de rótulos com SourceByteCount, OutputByteCount, AppliedRangeCount, ReplacedExistingLabels, Succeeded e ErrorMessage
TPdfOptionalContentUsageContextos de visibilidade ocuView, ocuPrint, ocuExport e ocuDesign
TPdfOptionalContentStateEstados por uso ocsUnspecified, ocsOn e ocsOff
TPdfOptionalContentBaseStateEstados base de configuração ocbsOn, ocbsOff e ocbsUnchanged
TPdfOptionalContentMembershipPolicyPolíticas de associação ocmpAnyOn, ocmpAllOn, ocmpAnyOff, ocmpAllOff e ocmpUnknown
TPdfOptionalContentIntegerArrayArray dinâmico de inteiros usado para coleções de números de objeto de optional content
TPdfOptionalContentStringArrayArray dinâmico de AnsiString usado para coleções de nomes PDF
TPdfOptionalContentWideStringArrayArray dinâmico de WideString usado para texto de optional content decodificado
TPdfOptionalContentRadioGroupUm grupo mutuamente exclusivo representado por GroupObjectNumbers
TPdfOptionalContentRadioGroupsArray dinâmico de valores TPdfOptionalContentRadioGroup
TPdfOptionalContentGroupRecord de OCG com ObjectNumber, Generation, Name, Intents, ViewState, PrintState, ExportState, PageElementSubtype, Language, LanguagePreferred, UserType, UserNames, HasZoomRange, MinimumZoom, MaximumZoom, EffectiveVisible, Locked e RadioGroupIndex
TPdfOptionalContentGroupsArray dinâmico de valores TPdfOptionalContentGroup
TPdfOptionalContentConfigurationRecord de configuração com ObjectNumber, Generation, Name, Creator, BaseState, Intents, OnGroupObjectNumbers, OffGroupObjectNumbers, LockedGroupObjectNumbers, OrderGroupObjectNumbers, RadioGroups e HasAutomaticState
TPdfOptionalContentConfigurationsArray dinâmico de valores TPdfOptionalContentConfiguration
TPdfOptionalContentMembershipRecord de OCMD com ObjectNumber, Generation, GroupObjectNumbers, Policy, VisibilityExpression e EffectiveVisible
TPdfOptionalContentMembershipsArray dinâmico de valores TPdfOptionalContentMembership
TPdfOptionalContentInventoryResultado de inspeção com Usage, SelectedConfigurationIndex, Groups, Configurations, Memberships, Succeeded e ErrorMessage
TPdfOptionalContentStateChangeEstado Visible solicitado para um GroupObjectNumber
TPdfOptionalContentStateChangesArray dinâmico de valores TPdfOptionalContentStateChange
TPdfOptionalContentConfigureOptionsConfiguração e uso selecionados, mais os controles DisableAutomaticState e EnforceRadioGroups
TPdfOptionalContentConfigureReportResultado de configuração com SourceByteCount, OutputByteCount, GroupCount, ChangedGroupCount, UpdatedUsageStateCount, SelectedConfigurationIndex, RemovedAutomaticState, Succeeded e ErrorMessage
TPdfSanitiseOptionsControles independentes StripOpenAction, StripCatalogActions, StripNames, StripAssociatedFiles, StripAcroForm, StripMetadata e RemoveUnreachable
TPdfSanitiseReportResultado de sanitização com SourceByteCount, OutputByteCount, StrippedEntryCount, PrunedObjectCount, PruneReport aninhado, Succeeded e ErrorMessage
TPdfObjectGraphInspectOptionsLimita a exportação JSON com MaxObjects, MaxDepth, MaxOutputBytes, MaxStringBytes e IncludeStreamDigests
TPdfObjectGraphReportResultado compartilhado de exportação e patch com SourceByteCount, OutputByteCount, ObjectCount, ExportedObjectCount, PatchedObjectCount, AppliedOperationCount, Truncated, Succeeded e ErrorMessage
TPdfObjectPatchOperationKindAções de patch popSet e popRemove
TPdfObjectPatchValueKindTipos de valor povNull, povBoolean, povInteger, povReal, povName, povTextString e povReference
TPdfObjectPatchValueValor etiquetado com Kind, BooleanValue, IntegerValue, RealValue, TextValue, ReferenceObjectNumber e ReferenceGeneration
TPdfObjectPatchOperationUma operação com Kind, ObjectNumber, Generation, Key e Value
TPdfObjectPatchOperationsArray dinâmico de valores TPdfObjectPatchOperation

Safety and limits

TPdfOutlineEditor.SetUri substitui um destino por uma ação URI UTF-8 e codifica delimitadores literais com segurança; a verificação de salvamento ignora o estado expandido em itens folha porque o PDF omite o Count de seu ramo

O overload com opções de GraftPdfAcroForm suporta pagcpReject, pagcpRename, pagcpNamespace e a junção compatível de campos terminais de texto/escolha, com poda de widgets selecionados, recursos isolados, aparências e ordem de cálculo; veja FPdfFormMerge para políticas e integração transacional com o documento

Relatórios de colisão de AcroForm

TPdfAcroFormGraftOptions.NamespacePrefix nomeia o pai inserido pela política de namespace; TPdfAcroFormCollisionPolicy.pagcpMergeCompatible junta campos terminais de texto ou escolha compatíveis suportados

TPdfAcroFormGraftReport.FilteredFieldCount e TPdfAcroFormGraftReport.FilteredWidgetCount contam as entradas de origem removidas pela filtragem de páginas selecionadas; TPdfAcroFormGraftReport.ResourceRenameCount conta nomes de recurso padrão isolados e TPdfAcroFormGraftReport.MergedFieldCount conta campos compatíveis unidos a um proprietário existente

CapturePdfNavigation e WritePdfNavigation capturam e remapeiam destinos nomeados e anotações de link de página usando mapeamentos explícitos de página proprietária; veja FPdfMerge para semântica de chave bruta, parâmetros de destino, limites e integração transacional

Records de captura de navegação

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;

Leitura de valores de objetos ativos

ReadPdfActiveObjects retorna os valores mais recentes dos objetos ativos com seus números de geração exatos e a revisão ativa do catálogo, resolvendo tabelas xref clássicas, xref streams, revisões incrementais e membros comprimidos de object streams

O Body exclui o cabeçalho de objeto indireto e o marcador endobj; streams comuns mantêm seu dicionário e payload codificado, enquanto membros comprimidos são materializados como valores comuns, e a infraestrutura de xref/object-stream é excluída da coleção retornada

A posição da origem é restaurada e uma falha retorna uma coleção de objetos vazia com diagnósticos; entrada criptografada é rejeitada, enquanto assinaturas podem ser inspecionadas sem alterar seus bytes

Os padrões permitem 256 MiB de bytes de origem, 64 MiB por corpo materializado, 256 MiB de corpos cumulativos, 64 MiB por object stream decodificado, 256 MiB de caches cumulativos de object stream decodificado e 1,000,000 slots de número de objeto

Os limites de corpo são verificados antes de cada cópia de corpo e contam corpos temporários de infraestrutura, bem como valores retornados; os limites nomeados de forma independente de cache decodificado interrompem a decodificação de object stream antes de exceder o orçamento de quem chama

Estes são limites lógicos de buffer, não um teto de memória de todo o processo: cópias de origem, o stream de preparação de objetos diretos, buffers de varredura, armazenamento de trabalho do decodificador e metadados de objetos consomem alocações limitadas adicionais, e buffers de varredura podem duplicar corpos retidos

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