PDFium Delphi Component Docs

Metoda CommitIncrementalSave

Komponenta: TPdf  ·  Jednotka: PDFium
Připojí úpravy provedené od posledního commitu jako novou revizi PDF

Syntaxe

function CommitIncrementalSave(Stream: TStream; out Info: TPdfIncrementalCommitInfo): Boolean;

StreamCíl pro kompletní dokument, včetně základní podoby a každé doposud připojené revize; nil vyvolá EPdfError
InfoTPdfIncrementalCommitInfo přijímá počty objektů a bajtů, předchozí a nový posun xref, počet revizí, stav šifrování a validace a výsledky odolnosti souboru
ResultTrue, když se kompletní validovaný výstup zapsal

 

function CommitIncrementalSave(const FileName: string; out Info: TPdfIncrementalCommitInfo): Boolean;

FileNameCílový soubor, atomicky nahrazený prostřednictvím odolného pomocného souboru ve stejném adresáři
InfoStejný report TPdfIncrementalCommitInfo jako u přetížení se streamem, s Durable a ReplacedAtomically nastavenými poté, co tyto souborové fáze uspějí
ResultTrue, když validovaný pomocný soubor nahradil cíl

Popis

Porovná živý dokument se stavem zachyceným při posledním commitu, u prvního commitu se základní podobou, a připojí změněné objekty plus novou sekci křížových odkazů. Dřívější bajty se nikdy nepřepisují, takže každá předchozí revize zůstává bajtově identická a obnovitelná

AppendedByteCount je velikost samotné nové revize, zatímco PreviousOutputByteCount a OutputByteCount ohraničují neměnnou předponu a kompletní výsledek. PreviousXrefOffset a OutputXrefOffset identifikují řetěz revizí a ChangedObjectCount hlásí, kolik objektů diff našel

Každý kandidát projde řídkými kontrolami hranic revizí, přísným nezávislým opětovným otevřením, kontrolami počtu stránek a bezpečnostního handleru a validací PDF MAC, když je přítomna. Encrypted a Validated tyto vlastnosti hlásí

Souborový overload zapisuje vedle cíle, flushne pomocný soubor, zavře ho a znovu otevře, zopakuje validaci a potom atomicky nahradí cíl. Windows požaduje write-through náhradu; Unix před náhradou ověří podporu flush adresáře a po přejmenování flushne rodičovský adresář

Chyba před náhradou ponechá předchozí cíl beze změny a obnoví baseline session i počet revizí. Selhání flush adresáře na Unixu po úspěšném přejmenování vyvolá EPdfOutputCommitError z interní unity FPdfPlatform: výstup už byl nahrazen, Info.ReplacedAtomically=True a Info.Durable=False, session zachová commitnutou baseline, aby další úprava nemohla připojit revizi k zastaralému výstupu

Durable hlásí úspěšné dokončení platformou požadovaných flush fází. Nepotvrzuje chování hardware úložiště ani filesystému po výpadku napájení. Stejnou výjimku commitnutého výstupu mohou po náhradě vyvolat i jiná API ukládání se stejnou atomickou náhradou; volající musí tuto fázi odlišit od chyb zachovávajících původní výstup

Volání bez otevřené relace vyvolá EPdfError, takže BeginIncrementalSave musí přijít jako první

Viz také

BeginIncrementalSave, EndIncrementalSave, IncrementalSaveActive, SaveAs