html Łączenie wielu plików PDF w jeden dokument za pomocą PDFium VCL | losLab Software Development Blog

Artykuł techniczny

Łączenie wielu plików PDF w jeden dokument za pomocą PDFium VCL

· Programowanie PDF

Łączenie wielu dokumentów PDF w jeden plik jest powszechnym wymaganiem w przepływach pracy związanych z zarządzaniem dokumentami. The Połącz PDF pokazuje, jak połączyć dowolną liczbę plików PDF w jeden za pomocą PDFium VCL w Delphi.

Przegląd

To demo zapewnia prosty interfejs do wybierania wielu plików PDF, zmiany ich kolejności i łączenia w jeden plik wyjściowy PDF. Zachowuje całą zawartość dokumentów źródłowych, w tym tekst, obrazy i formatowanie.

Kluczowe funkcje

  • Wybór wielu plików – Dodaj wiele plików PDF na raz
  • Zmień kolejność plików – Przenieś pliki w górę lub w dół w kolejności scalania
  • Usuń pliki – Usuń niechciane pliki z listy
  • Śledzenie postępu – Wizualny postęp podczas operacji scalania
  • Zachowaj zawartość – Wszystkie strony połączone w oryginalnej jakości

PDFium Wymagania DLL

Przed uruchomieniem jakiejkolwiek aplikacji PDFium VCL upewnij się, że są zainstalowane pliki DLL PDFium:

  • pdfium32.dll / pdfium64.dll – Wersje standardowe (~5-6 MB)
  • pdfium32v8.dll / pdfium64v8.dll – Z silnikiem V8 JavaScript (~23-27 MB)

Instalacja: Uruchom PDFiumVCL\DLLs\CopyDlls.bat jako Administrator, aby automatycznie kopiować biblioteki DLL do katalogów systemu Windows.

Proces łączenia

Podstawowa funkcja scalania wykorzystuje ImportPages metoda:

Zakreślacz składni Urvanov v2.9.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
procedure TFormMain.ButtonMergeClick(Sender: TObject);
var
  Page, I: Integer;
begin
  ProgressBar.Position := 0;
  ProgressBar.Enabled := True;
  Screen.Cursor := crHourGlass;
  
  try
    // Create new empty document for merged result
    PdfNew.CreateDocument;
    
    Page := 1;
    ProgressBar.Max := ListBox.Items.Count;
    
    // Process each source PDF
    for I := 0 to ListBox.Items.Count - 1 do
    begin
      // Load source PDF
      Pdf.FileName := ListBox.Items[I];
      Pdf.Active := True;
      
      // Import all pages from source
      PdfNew.ImportPages(Pdf,
        IntToStr(1) + '-' + IntToStr(Pdf.PageCount), Page);
        
      // Track page position for next document
      Inc(Page, Pdf.PageCount);
      
      // Close source document
      Pdf.Active := False;
      
      ProgressBar.Position := I + 1;
    end;
    
    // Save merged document
    PdfNew.SaveAs(ExtractFilePath(Application.ExeName) + 'Merged.pdf');
    PdfNew.Active := False;
    
    MessageDlg('Merge completed', mtInformation, [mbOK], 0);
    
  finally
    Screen.Cursor := crDefault;
    ProgressBar.Position := 0;
    ProgressBar.Enabled := False;
    Pdf.Active := False;
    PdfNew.Active := False;
  end;
end;
[Czas formatowania: 0,0012 sekundy]

Zrozumienie ImportPages

 ImportPages jest kluczem do łączenia PDF:

Zakreślacz składni Urvanov v2.9.1
1
2
3
4
5
function TPdf.ImportPages(
  Pdf: TPdf;           // Source PDF document
  const Range: string; // Page range (e.g., "1-5", "1,3,5", "1-")
  PageNumber: Integer  // Insert position in destination
): Boolean;
[Czas formatowania: 0,0001 sekundy]

Obsługiwane formaty zakresów stron:

  • "1-5" – Strony od 1 do 5
  • "1,3,5" – Strony 1, 3 i 5
  • "1-" – Strona 1 do końca
  • "-5" – Od pierwszej strony do strony 5

Dodawanie plików do listy

Zakreślacz składni Urvanov v2.9.1
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TFormMain.ButtonAddFilesClick(Sender: TObject);
var
  I: Integer;
begin
  if OpenDialog.Execute then
  begin
    for I := 0 to OpenDialog.Files.Count - 1 do
      ListBox.AddItem(OpenDialog.Files[I], nil);
      
    SelectItem(ListBox.Items.Count - 1);
    UpdateButtons;
  end;
end;
[Czas formatowania: 0,0002 sekundy]

Zmiana kolejności plików

Zakreślacz składni Urvanov v2.9.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure TFormMain.ButtonMoveUpClick(Sender: TObject);
var
  ItemIndex: Integer;
begin
  ItemIndex := ListBox.ItemIndex;
  ListBox.Items.Move(ItemIndex, ItemIndex - 1);
  SelectItem(ItemIndex - 1);
  UpdateButtons;
end;
 
procedure TFormMain.ButtonMoveDownClick(Sender: TObject);
var
  ItemIndex: Integer;
begin
  ItemIndex := ListBox.ItemIndex;
  ListBox.Items.Move(ItemIndex, ItemIndex + 1);
  SelectItem(ItemIndex + 1);
  UpdateButtons;
end;
[Czas formatowania: 0,0002 sekundy]

Usuwanie plików

Zakreślacz składni Urvanov v2.9.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure TFormMain.ButtonDeleteClick(Sender: TObject);
var
  ItemIndex, ItemCount: Integer;
begin
  ItemIndex := ListBox.ItemIndex;
  
  if MessageDlg('Delete ' + ListBox.Items[ItemIndex] + '?',
    mtConfirmation, [mbYes, mbNo], 0) = mrYes then
  begin
    ListBox.Items.Delete(ItemIndex);
    ItemCount := ListBox.Items.Count;
    
    // Select appropriate item after deletion
    if ItemIndex < ItemCount then
      SelectItem(ItemIndex)
    else if ItemCount > 0 then
      SelectItem(ItemIndex - 1);
      
    UpdateButtons;
  end;
end;
[Czas formatowania: 0,0003 sekundy]

Aktualizowanie stanu interfejsu użytkownika

Zakreślacz składni Urvanov v2.9.1
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TFormMain.UpdateButtons;
var
  ItemIndex, ItemCount: Integer;
begin
  ItemIndex := ListBox.ItemIndex;
  ItemCount := ListBox.Items.Count;
  
  ButtonAddFiles.Enabled := True;
  ButtonDelete.Enabled := ItemIndex <> -1;
  ButtonMoveUp.Enabled := (ItemIndex <> -1) and (ItemIndex > 0);
  ButtonMoveDown.Enabled := (ItemIndex <> -1) and (ItemIndex < ItemCount - 1);
  ButtonMerge.Enabled := ItemCount > 1; // Need at least 2 files to merge
end;
[Czas formatowania: 0,0003 sekundy]

Zaawansowane: Łączenie określonych stron

Możesz scalić tylko określone strony z dokumentów źródłowych:

Zakreślacz składni Urvanov v2.9.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
procedure MergeSpecificPages;
var
  PdfSource, PdfDest: TPdf;
begin
  PdfSource := TPdf.Create(nil);
  PdfDest := TPdf.Create(nil);
  try
    PdfDest.CreateDocument;
    
    // Import pages 1-3 from first document
    PdfSource.FileName := 'document1.pdf';
    PdfSource.Active := True;
    PdfDest.ImportPages(PdfSource, '1-3', 1);
    PdfSource.Active := False;
    
    // Import only page 5 from second document
    PdfSource.FileName := 'document2.pdf';
    PdfSource.Active := True;
    PdfDest.ImportPages(PdfSource, '5', 4);
    PdfSource.Active := False;
    
    // Import last 2 pages from third document
    PdfSource.FileName := 'document3.pdf';
    PdfSource.Active := True;
    PdfDest.ImportPages(PdfSource,
      IntToStr(PdfSource.PageCount - 1) + '-' + IntToStr(PdfSource.PageCount), 5);
    PdfSource.Active := False;
    
    PdfDest.SaveAs('merged_custom.pdf');
    
  finally
    PdfDest.Active := False;
    PdfSource.Free;
    PdfDest.Free;
  end;
end;
[Czas formatowania: 0,0004 sekundy]

Importowanie preferencji przeglądarki

Skopiuj preferencje przeglądarki z innego dokumentu:

Zakreślacz składni Urvanov v2.9.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
procedure CopyViewerPreferences;
var
  PdfSource, PdfDest: TPdf;
begin
  PdfSource := TPdf.Create(nil);
  PdfDest := TPdf.Create(nil);
  try
    PdfSource.FileName := 'template.pdf';
    PdfSource.Active := True;
    
    PdfDest.FileName := 'output.pdf';
    PdfDest.Active := True;
    
    // Copy viewer preferences (zoom, page layout, etc.)
    PdfDest.ImportPreferences(PdfSource);
    
    PdfDest.SaveAs('output.pdf');
    
  finally
    PdfSource.Active := False;
    PdfDest.Active := False;
    PdfSource.Free;
    PdfDest.Free;
  end;
end;
[Czas formatowania: 0,0003 sekundy]

Przypadki użycia

  • Kompilacja raportu – Połącz wiele sekcji raportu w jeden dokument
  • Grupowanie faktur – Łącz dzienne faktury w miesięczne partie
  • Montaż dokumentu – Twórz kompletne dokumenty na podstawie szablonów i treści
  • Tworzenie archiwum – Połącz powiązane dokumenty w celu archiwizacji

Wniosek

Demo Merge PDF pokazuje, jak proste jest łączenie dokumentów PDF z PDFium VCL. The ImportPages radzi sobie ze wszystkimi złożonościami związanymi z zachowaniem struktury i zawartości dokumentu.

Niezależnie od tego, czy budujesz prosty moduł do łączenia dokumentów, czy złożony system składania dokumentów, PDFium VCL zapewnia potrzebne narzędzia.

Zacznij od PDFium VCL Komponent od losLab.com i usprawnij przepływ pracy w PDF.