PDFium Delphi Component Docs

MergeFiles метод

Component: TPdf  ·  Unit: PDFium
Об’єднує PDF-джерела на основі файлів через нативні API імпорту сторінок, обмежуючи дескриптори джерел і відкриваючи явні політики операції

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, наразі 128 сторінок
InsertAt-1, що означає додавання в кінець цільового документа
CreateDestinationTrue
CopyViewerPreferencesTrue
RollbackOnCancelOrFailureTrue

Resource and cancellation policy

bmrpSourceScoped виконує один нативний імпорт на джерело, дозволяючи PDFium повторно використовувати свою мапу клонованих об’єктів для всіх вибраних сторінок цього джерела

bmrpChunked розбиває вибірку на партії по PageChunkSize, даючи дрібніші точки скасування та менші нативні виклики ціною можливого дублювання ресурсів між партіями

Щоразу відкрито щонайбільше одне джерельне TPdf, і кожне джерело закривається одразу після спроби імпорту

Скасування перевіряється між операціями над джерелами та нативними партіями; окремий виклик імпорту PDFium перервати не можна

OnProgress отримує стадії started, opening, importing, source, rollback, cancellation, failure і completion та може встановити свій параметр Cancel; кожен знімок TPdfBatchMergeProgress несе Stage, SourceIndex, SourceCount, FileName, SourcePageCount, ImportedSourceCount, ImportedPageCount і NativeImportCallCount

TPdfBatchMergeReport повертає Status, SourceCount, AttemptedSourceCount, ImportedSourceCount, SkippedSourceCount, FailedSourceCount, ImportedPageCount, CommittedPageCount, RolledBackPageCount, PageCountBefore, PageCountAfter, NativeImportCallCount, LargestNativeImportPageCount, PeakOpenSourceCount, FormSourceCount, OutlineSourceCount, DestinationCreated, ViewerPreferencesSourceIndex, ErrorMessage і Issues

CancellationToken приймає той самий контракт IPdfCancellationToken, що його використовують асинхронні та прогресивні API

Forms, outlines, and viewer preferences

Failure and rollback

Джерело, яке зазнало невдачі після вставлення однієї або кількох партій сторінок, завжди відкочується до межі свого джерела перед обробкою stop або skip

bmepSkip записує проблему та продовжує з наступним джерелом, тоді як bmepStop завершує операцію

З RollbackOnCancelOrFailure=True збої stop і скасування видаляють усі сторінки, вставлені операцією; цільовий документ, створений операцією, закривається

З вимкненим відкочуванням успішно імпортовані джерела залишаються зафіксованими та відображаються в CommittedPageCount

Відкочування видаляє вставлені сторінки, але не може гарантувати скасування кожного нативного побічного ефекту каталогу, як-от метадані producer

Report

Status — це bmrsCompleted, bmrsCompletedWithErrors, bmrsCancelled або bmrsFailed

Звіт розділяє спробовані, імпортовані, пропущені та невдалі джерела від імпортованих, зафіксованих і відкочених сторінок

NativeImportCallCount, LargestNativeImportPageCount і PeakOpenSourceCount роблять обрану політику планування вимірюваною

Issues зберігає індекс джерела, назву файлу та текст помилки для збоїв і несмертельних термінальних помилок колбеків

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