PDFium Delphi Component Docs

MergeFiles

Komponenta: TPdf  ·  Jednotka: PDFium
Slučuje souborové PDF zdroje přes nativní API importu stránek, ohraničuje zdrojové handly a vystavuje explicitní politiky operace

Syntaxe

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;

Výběr zdrojů

Výchozí volby

ErrorPolicybmepStop
FormPolicybmfpPreserveNative
OutlinePolicybmopDiscard
ResourcePolicybmrpSourceScoped
PageChunkSizePdfBatchMergeDefaultPageChunkSize, aktuálně 128 stránek
InsertAt-1, což připojí na konec cílového dokumentu
CreateDestinationTrue
CopyViewerPreferencesTrue
RollbackOnCancelOrFailureTrue

Politika prostředků a zrušení

bmrpSourceScoped provede jednu nativní importní operaci na zdroj a umožní PDFium znovu použít mapu klonovaných objektů napříč všemi vybranými stránkami z toho zdroje

bmrpChunked rozdělí výběr na dávky po PageChunkSize, přináší jemnější body pro zrušení a menší nativní volání na úkor možné duplikace prostředků napříč dávkami

Najednou je otevřen nejvýše jeden zdrojový TPdf a každý zdroj se zavře ihned po jeho pokusu o import

Zrušení se kontroluje mezi zdrojovými operacemi a nativními dávkami; jednotlivé nativní importní volání PDFium přerušit nelze

OnProgress přijímá fáze started, opening, importing, source, rollback, cancellation, failure a completion a může nastavit svůj parametr Cancel; každý snapshot TPdfBatchMergeProgress nese Stage, SourceIndex, SourceCount, FileName, SourcePageCount, ImportedSourceCount, ImportedPageCount a NativeImportCallCount

TPdfBatchMergeReport vrací Status, SourceCount, AttemptedSourceCount, ImportedSourceCount, SkippedSourceCount, FailedSourceCount, ImportedPageCount, CommittedPageCount, RolledBackPageCount, PageCountBefore, PageCountAfter, NativeImportCallCount, LargestNativeImportPageCount, PeakOpenSourceCount, FormSourceCount, OutlineSourceCount, DestinationCreated, ViewerPreferencesSourceIndex, ErrorMessage a Issues

CancellationToken přijímá tutéž smlouvu IPdfCancellationToken, kterou používají asynchronní a progresivní API

Formuláře, osnovy a předvolby prohlížeče

Selhání a vrácení změn

Zdroj, který selže poté, co jedna či více dávek vložilo stránky, se vždy vrátí zpět na hranici zdroje dřív, než se uplatní zastavení nebo přeskočení

bmepSkip zaznamená problém a pokračuje dalším zdrojem, zatímco bmepStop operaci ukončí

S RollbackOnCancelOrFailure=True odstraní selhání se zastavením i zrušení všechny stránky vložené operací; cíl vytvořený operací se zavře

Při zakázaném vracení změn zůstanou úspěšně importované zdroje potvrzené a projeví se v CommittedPageCount

Vrácení změn odstraní vložené stránky, ale nedokáže zaručit inverzi každého nativního vedlejšího efektu v katalogu, například metadat producer

Sestava

Status je bmrsCompleted, bmrsCompletedWithErrors, bmrsCancelled nebo bmrsFailed

Sestava odděluje pokusné, importované, přeskočené a selhané zdroje od importovaných, potvrzených a vrácených stránek

NativeImportCallCount, LargestNativeImportPageCount a PeakOpenSourceCount dělají zvolenou plánovací politiku měřitelnou

Issues uchovává index zdroje, název souboru a text chyby pro selhání a nefatální chyby terminálního zpětného volání

Příklad

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;

Viz také

ImportPagesByIndex, ImportPages, Asynchronní provádění