PDFium Delphi Component Docs

Incremental save session

Component: TPdf  ·  Unit: PDFium
Appends only changed or new indirect objects while preserving every previous output byte

Syntax

procedure BeginIncrementalSave(AllowSignedDocument: Boolean = False);

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

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

procedure EndIncrementalSave;

property IncrementalSaveActive: Boolean;

AllowSignedDocumentPermite explícitamente una sesión sobre un documento firmado; el valor predeterminado la rechaza
StreamTStream que recibe el PDF acumulado completo después de esta confirmación
FileNameRuta de salida reemplazada solo después de que un archivo temporal hermano tenga éxito
InfoEstadísticas por confirmación devueltas después de que la escritura del destino tenga éxito

Commit Information

ChangedObjectCountNumber of changed or new indirect objects appended by this commit
AppendedByteCountBytes appended after the exact previous-output prefix
OutputByteCountTotal bytes in the complete output returned by this commit
RevisionCountNumber of non-empty revisions committed in the current session

Description

BeginIncrementalSave captura una instantánea semántica estable de PDFium como línea base de comparación y como primera salida completa

Cada confirmación captura el estado actual, resuelve los objetos activos clásicos, híbridos, de flujo xref y de flujo de objetos, y luego compara la generación del objeto y los bytes exactos del cuerpo

Solo los objetos indirectos cambiados o nuevos se escriben después de la salida anterior, seguidos de la menor revisión de xref y trailer requerida

Un origen de xref clásico continúa con tablas xref clásicas, mientras que un origen de flujo xref continúa con flujos xref autoindexados

Si nada cambió, la salida anterior se devuelve byte a byte, no se añade ninguna revisión y RevisionCount no avanza

La sobrecarga de archivo escribe un archivo temporal hermano, reemplaza el destino de forma atómica y restaura el estado de la sesión si la escritura o el reemplazo fallan

Constraints

Example

var
  Info: TPdfIncrementalCommitInfo;
begin
  Pdf.BeginIncrementalSave;
  try
    Pdf.PageNumber := 1;
    Pdf.PageRotation := ro90;
    Pdf.CommitIncrementalSave('revision-1.pdf', Info);
    Pdf.PageRotation := ro180;
    Pdf.CommitIncrementalSave('revision-2.pdf', Info);
  finally
    Pdf.EndIncrementalSave;
  end;
end;

See Also

SaveAs, SaveAsObjectStream