PDFium Delphi Component Docs

Inspecția și remedierea grafului de obiecte

Component: TPdf  ·  Units: PDFium, FPdfCompress
Exportă o vedere tipizată și mărginită a obiectelor indirecte active și aplică patch-uri constrânse de dicționar, în mod tranzacțional

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

Obiectul rădăcină, numărul de obiecte active, obiectele exportate și starea de trunchiere sunt emise în plicul versionat pdf-object-graph-v1

Fiecare valoare este identificată ca dicționar, vector, șir literal sau hexazecimal, nume, referință, null, Boolean, întreg, real sau cuvânt cheie

Fluxurile își expun numărul de octeți codificați și, când este activat, un rezumat SHA-256, în timp ce conținutul lor rămâne omis

Obiectele directe și membrii materializați din containere ObjStm folosesc aceeași reprezentare

Inspection options

MaxObjectsNumărul maxim de obiecte active scrise înainte ca plicul JSON să raporteze truncated: true
MaxDepthAdâncimea maximă de vectori și dicționare imbricate, de la 1 la 32
MaxOutputBytesLimita superioară strictă pentru fluxul complet de octeți JSON compatibil UTF-8
MaxStringBytesNumărul maxim de octeți reținuți dintr-un șir sau un nume PDF
IncludeStreamDigestsCalculează SHA-256 peste octeții codificați ai fluxului, fără a decoda sau exporta conținutul

Patch model

Fiecare TPdfObjectPatchOperation selectează un număr exact de obiect, o generație și o cheie de dicționar de nivel superior, apoi stabilește sau elimină acea cheie

Operațiunile de stabilire acceptă valori tipizate null, Boolean, întreg, real, nume, șir de text sau referință indirectă și nu acceptă niciodată sintaxă PDF brută

Toate identitățile de obiect, generațiile, referințele, numele, operațiunile duplicate și dicționarele țintă sunt validate înainte ca rezultatul să fie livrat

Chevile de lungime și de lanț de filtre ale fluxurilor nu pot fi modificate prin patch, deoarece schimbarea lor independent de octeții codificați ar corupe fluxul

Scriitorul adaugă o revizie incrementală, reconstruiește graful activ rezultat, îl încarcă strict prin PDFium și abia apoi scrie stream-ul apelantului sau înlocuiește atomic un fișier

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