Artikel Teknis

Menggabungkan Beberapa File PDF Menjadi Satu Dokumen dengan PDFium Component

PDFium Component menyediakan ImportPages untuk menggabungkan halaman dari satu dokumen PDF ke dokumen lain. Anda dapat mengimpor semua halaman atau rentang tertentu, menentukan posisi penyisipan, dan menangani file yang dilindungi sandi. Artikel ini membahas pola-pola tersebut beserta perilaku yang perlu diketahui seputar kegagalan diam dan field formulir

Menggabungkan semua halaman dari daftar file

procedure TMergeForm.MergeFiles(const Files: TStrings; const OutputPath: string);
var
  Base, Source: TPdf;
  I: Integer;
begin
  Base := TPdf.Create(nil);
  Source := TPdf.Create(nil);
  try
    Base.CreateDocument;          // start with an empty destination

    for I := 0 to Files.Count - 1 do
    begin
      Source.LoadFromFile(Files[I]);
      if not Source.Active then
      begin
        // silent failure: skip corrupt or unreadable files
        Continue;
      end;
      // '' = all pages, -1 = append after last page
      Base.ImportPages(Source, '', -1);
    end;

    Base.SaveToFile(OutputPath);
  finally
    Source.Free;
    Base.Free;
  end;
end;

Parameter string kosong '' pada ImportPages berarti "impor semua halaman". Parameter -1 berarti "sisipkan setelah halaman terakhir dokumen tujuan", sehingga setiap file sumber ditambahkan berurutan

Mengimpor rentang halaman tertentu

String rentang halaman menggunakan format yang sama dengan dialog print umum: angka tunggal, rentang dengan tanda hubung, atau kombinasi keduanya dipisahkan koma:

// Import only pages 1, 3, and 5-8 from Source into Base at position 2
Base.ImportPages(Source, '1,3,5-8', 2);

// Import the first page only
Base.ImportPages(Source, '1', -1);

// Import pages 2 through 4
Base.ImportPages(Source, '2-4', -1);

Posisi penyisipan berbasis-1; nilai 2 berarti halaman yang diimpor akan muncul setelah halaman 2 yang sudah ada. Gunakan -1 untuk selalu menambahkan di akhir

Membuka file yang dilindungi sandi sebelum mengimpor

procedure TMergeForm.MergeWithPassword(const SourceFile, Password: string;
  Base: TPdf; InsertAt: Integer);
var
  Source: TPdf;
begin
  Source := TPdf.Create(nil);
  try
    Source.Password := Password;
    Source.LoadFromFile(SourceFile);
    if not Source.Active then
    begin
      ShowMessage('Could not open (wrong password or corrupt): ' + SourceFile);
      Exit;
    end;
    Base.ImportPages(Source, '', InsertAt);
  finally
    Source.Free;
  end;
end;

Menyimpan dokumen yang digabungkan

procedure TMergeForm.SaveAs(Base: TPdf; const OutputPath: string);
begin
  if Base.PageCount = 0 then
  begin
    ShowMessage('No pages were imported successfully.');
    Exit;
  end;
  Base.SaveToFile(OutputPath);
end;

Catatan perilaku field formulir

Saat mengimpor halaman dari PDF yang berisi field formulir AcroForm, field-field tersebut diratakan (dirender menjadi konten statis) selama impor. Nilai field saat ini menjadi bagian dari konten halaman yang dirender, namun field tersebut tidak lagi interaktif di dokumen tujuan. Ini adalah perilaku yang diharapkan: ImportPages dirancang untuk menggabungkan tampilan halaman, bukan struktur formulir

Untuk membuat PDF dari nol, bukan menggabungkan yang sudah ada, lihat artikel membuat PDF dari nol, atau kunjungi halaman produk PDFium Component