PDFium Delphi Component Docs

MergeFiles

Component: TPdf  ·  Unit: PDFium
Îmbină surse PDF susținute de fișiere prin API-urile native de import de pagini, mărginind mânerurile surselor și expunând politici explicite de operare

Syntax

function MergeFiles(const Sources: TPdfBatchMergeSources; out Report: TPdfBatchMergeReport): Boolean; overload;

function MergeFiles(const Sources: TPdfBatchMergeSources; const Options: TPdfBatchMergeOptions; out Report: TPdfBatchMergeReport): Boolean; overload;

class function TPdfBatchMergeSource.FromFile(const AFileName: string; const APageRange: string = ''; const APassword: string = ''): TPdfBatchMergeSource; static;

class function TPdfBatchMergeOptions.Default: TPdfBatchMergeOptions; static;

Source selection

Default options

ErrorPolicybmepStop
FormPolicybmfpPreserveNative
OutlinePolicybmopDiscard
ResourcePolicybmrpSourceScoped
PageChunkSizePdfBatchMergeDefaultPageChunkSize, în prezent 128 de pagini
InsertAt-1, ceea ce adaugă la finalul destinației
CreateDestinationTrue
CopyViewerPreferencesTrue
RollbackOnCancelOrFailureTrue

Resource and cancellation policy

bmrpSourceScoped efectuează un singur import nativ per sursă, lăsând PDFium să își reutilizeze harta de obiecte clonate pe toate paginile selectate din acea sursă

bmrpChunked împarte selecția în loturi de PageChunkSize, oferind puncte de anulare mai fine și apeluri native mai mici, cu prețul unei posibile duplicări de resurse între loturi

Cel mult o sursă TPdf este deschisă la un moment dat, iar fiecare sursă este închisă imediat după încercarea sa de import

Anularea este verificată între operațiile pe surse și loturile native; un apel individual de import PDFium nu poate fi întrerupt

OnProgress primește etapele started, opening, importing, source, rollback, cancellation, failure și completion și își poate stabili parametrul Cancel; fiecare instantaneu TPdfBatchMergeProgress poartă Stage, SourceIndex, SourceCount, FileName, SourcePageCount, ImportedSourceCount, ImportedPageCount și NativeImportCallCount

TPdfBatchMergeReport returnează Status, SourceCount, AttemptedSourceCount, ImportedSourceCount, SkippedSourceCount, FailedSourceCount, ImportedPageCount, CommittedPageCount, RolledBackPageCount, PageCountBefore, PageCountAfter, NativeImportCallCount, LargestNativeImportPageCount, PeakOpenSourceCount, FormSourceCount, OutlineSourceCount, DestinationCreated, ViewerPreferencesSourceIndex, ErrorMessage și Issues

CancellationToken acceptă același contract IPdfCancellationToken folosit de API-urile asincrone și progresive

Forms, outlines, and viewer preferences

Failure and rollback

O sursă care eșuează după ce unul sau mai multe loturi i-au inserat pagini este întotdeauna adusă înapoi la granița sa de sursă înainte de tratarea opririi sau a săririi peste ea

bmepSkip înregistrează problema și continuă cu sursa următoare, în timp ce bmepStop termină operația

Cu RollbackOnCancelOrFailure=True, eșecurile cu oprire și anularea elimină toate paginile inserate de operație; o destinație creată de operație este închisă

Cu rollback dezactivat, sursele importate cu succes rămân comise și se reflectă în CommittedPageCount

Rollback-ul elimină paginile inserate, dar nu poate garanta inversarea fiecărui efect secundar nativ al catalogului, precum metadatele de producător

Report

Status este bmrsCompleted, bmrsCompletedWithErrors, bmrsCancelled sau bmrsFailed

Raportul separă sursele încercate, importate, sărite și eșuate de paginile importate, comise și aduse înapoi

NativeImportCallCount, LargestNativeImportPageCount și PeakOpenSourceCount fac măsurabila politica de planificare aleasă

Issues păstrează indexul sursei, numele fișierului și textul erorii pentru eșecuri și pentru erorile nefatale de callback terminal

Example

var
  Sources: TPdfBatchMergeSources;
  Options: TPdfBatchMergeOptions;
  Report: TPdfBatchMergeReport;
begin
  SetLength(Sources, 2);
  Sources[0] := TPdfBatchMergeSource.FromFile('part-a.pdf', '1-10');
  Sources[1] := TPdfBatchMergeSource.FromFile('part-b.pdf', '3,1', Password);
  Options := TPdfBatchMergeOptions.Default;
  Options.ErrorPolicy := bmepSkip;
  Options.FormPolicy := bmfpFlatten;
  if not Pdf.MergeFiles(Sources, Options, Report) then
    Log(Report.ErrorMessage);
end;

See Also

ImportPagesByIndex, ImportPages, Asynchronous execution