Artigo técnico

Mesclando Vários Arquivos PDF em Um Documento com PDFium VCL

· Programação PDF

Combinar vários documentos PDF em um único arquivo é uma necessidade comum em fluxos de trabalho de gerenciamento de documentos. Merge PDF A demonstração mostra como combinar qualquer número de arquivos PDF em um único arquivo usando PDFium VCL em Delphi.

Visão Geral

Esta demonstração fornece uma interface simples para selecionar vários arquivos PDF, reorganizá-los e combiná-los em um único arquivo PDF de saída. Ele preserva todo o conteúdo dos documentos de origem, incluindo texto, imagens e formatação.

Principais Características

  • Seleção de Múltiplos Arquivos – Adicione vários arquivos PDF de uma vez.
  • Reorganizar Arquivos – Mova os arquivos para cima ou para baixo na ordem de combinação.
  • Remover arquivos. – Remover arquivos indesejados da lista.
  • Acompanhamento do Progresso – Exibição visual do progresso durante a operação de mesclagem.
  • Preservar conteúdo. – Todas as páginas mescladas com qualidade original.

Requisitos da DLL PDFium

Antes de executar qualquer aplicativo PDFium VCL, certifique-se de que os arquivos DLL do PDFium estão instalados:

  • pdfium32.dll / pdfium64.dll – Versões padrão (~5-6 MB)
  • pdfium32v8.dll / pdfium64v8.dll – Com o motor JavaScript V8 (~23-27 MB)

Instalação: Executar PDFiumVCL\DLLs\CopyDlls.bat como Administrador para copiar automaticamente os arquivos DLL para os diretórios do sistema Windows.

O processo de mesclagem.

A funcionalidade principal de mesclagem utiliza o método: ImportPages método:

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;

Entendendo ImportPages.

ImportPages O método é a chave para a mesclagem de arquivos PDF.

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;

Formatos de intervalo de páginas suportados:

  • "1-5" – Páginas de 1 a 5.
  • "1,3,5" – Páginas 1, 3 e 5.
  • "1-" – Página 1 até o final.
  • "-5" – Primeira página até a página 5.

Adicionando arquivos à lista.

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;

Reorganização de arquivos.

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;

Remoção de arquivos.

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;

Atualização do estado da interface do usuário.

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;

Avançado: Mesclando páginas específicas.

Você pode mesclar apenas páginas específicas de documentos de origem:

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;

Importação de preferências do visualizador.

Copie as preferências do visualizador de outro documento:

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;

Casos de uso.

  • Compilação de relatórios. Combine várias seções de relatórios em um único documento.
  • Processamento em lote de faturas. Combine faturas diárias em lotes mensais.
  • Montagem de documentos. Crie documentos completos a partir de modelos e conteúdo.
  • Criação de arquivos. Combine documentos relacionados para arquivamento.

Conclusão.

A demonstração "Merge PDF" mostra como é fácil combinar documentos PDF usando PDFium VCL. ImportPages O método lida com toda a complexidade de preservar a estrutura e o conteúdo do documento.

Seja você está construindo um simples combinador de documentos ou um sistema complexo de montagem de documentos, o PDFium VCL oferece as ferramentas que você precisa.

Comece com Componente PDFium VCL de loslab.com e otimize seus fluxos de trabalho com PDF.