Artigo técnico

Construindo um visualizador de PDF rico em recursos com PDFium VCL em Delphi

· Programação PDF

Neste tutorial, vamos explorar como criar um aplicativo profissional de visualização de arquivos PDF usando. PDFium VCL, um componente Delphi poderoso que encapsula o motor de renderização PDFium do Google. Esta demonstração mostra as funcionalidades básicas de visualização que formam a base de qualquer aplicativo PDF.

Visão Geral

O demo do Visualizador de PDF demonstra as funcionalidades essenciais necessárias para visualizar documentos PDF em uma aplicação Delphi. Ele oferece uma solução completa e pronta para uso para visualização de PDF, com recursos comparáveis a leitores de PDF comerciais.

Principais Características

  • Carregamento de documentos. – Abra arquivos PDF com suporte para proteção por senha.
  • Navegação de página. – Primeiro, anterior, próximo, último botão de página com atalhos de teclado.
  • Controles de zoom. – Múltiplos níveis de zoom, incluindo ajuste à página e ajuste à largura.
  • Rotação de páginas – Gire as páginas 90° para a esquerda ou para a direita.
  • Seleção de texto. – Selecione e copie texto de documentos PDF.
  • Marcadores. – Navegue usando o índice do documento.
  • Pesquisa de texto. – Encontrar texto dentro do documento.
  • Impressão. – Imprimir documentos com seleção de intervalo de páginas.
  • Salvar como. – Exportar o documento para um novo arquivo PDF.

Requisitos da DLL PDFium

Antes de executar qualquer aplicação PDFium VCL, você deve instalar os arquivos DLL do PDFium. Os arquivos DLL estão localizados em: DLLs pasta do pacote PDFium VCL:

  • pdfium32.dll – Versão de 32 bits (~5 MB).
  • pdfium64.dll – Versão de 64 bits (~6 MB).
  • pdfium32v8.dll – 32 bits com o motor JavaScript V8 (aproximadamente 23 MB).
  • pdfium64v8.dll – 64 bits com o motor JavaScript V8 (aproximadamente 27 MB).

Instalação: Executar PDFiumVCL\DLLs\CopyDlls.bat como Administrador. Este script copia automaticamente os DLLs apropriados para os diretórios do sistema Windows:

1
2
3
4
5
6
@echo off
REM On 64-bit Windows:
REM   - 32-bit DLLs %SystemRoot%\SysWOW64\
REM   - 64-bit DLLs %SystemRoot%\System32\
REM On 32-bit Windows:
REM   - 32-bit DLLs %SystemRoot%\System32\

Nota: Use os DLLs padrão (pdfium32.dll/pdfium64.dll) para a maioria das aplicações. As versões V8 são necessárias apenas se seus arquivos PDF contiverem JavaScript que requer execução.

Componentes principais

A demonstração usa dois componentes principais PDFium VCL:

1
2
Pdf: TPdf;        // Non-visual component for PDF operations
PdfView: TPdfView; // Visual component for rendering PDF pages

Componente TPdf.

TPdf Este componente gerencia todas as operações de documentos PDF, incluindo carregamento, salvamento e acesso a propriedades do documento, como metadados, marcadores e informações da página.

Componente TPdfView.

TPdfView Este componente é um controle visual com rolagem que renderiza páginas PDF com rolagem suave, suporte a zoom e tratamento de interação do usuário.

Carregando um documento PDF.

Abrir um arquivo PDF é simples:

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
procedure TFormMain.SpeedButtonOpenPdfClick(Sender: TObject);
var
  Password: string;
begin
  if OpenDialog.Execute then
  begin
    Pdf.FileName := OpenDialog.FileName;
    Pdf.Password := '';
    Pdf.PageNumber := 0;
    
    try
      PdfView.Active := True;
    except
      on Error: EPdfError do
        if Error.Message = 'Password required or incorrect password' then
        begin
          if InputQuery('Enter Password', 'Password: ', Password) then
          begin
            Pdf.Password := Password;
            PdfView.Active := True;
          end
          else
            raise;
        end
        else
          raise;
    end;
    
    if PdfView.PageCount > 0 then
      PdfView.PageNumber := 1;
  end;
end;

Navegação de página.

Implementar a navegação de página é simples com o PageNumber Rolagem Contínua (Continuous Scrolling)

1
2
3
4
5
6
7
8
9
10
11
// Navigate to first page
PdfView.PageNumber := 1;
 
// Navigate to last page
PdfView.PageNumber := PdfView.PageCount;
 
// Previous page
PdfView.PageNumber := PdfView.PageNumber - 1;
 
// Next page
PdfView.PageNumber := PdfView.PageNumber + 1;

Controle de Zoom

TPdfView O componente oferece opções de zoom flexíveis:

1
2
3
4
5
6
7
8
9
10
11
12
13
// Set specific zoom levels
PdfView.Zoom := 1.0;    // 100%
PdfView.Zoom := 0.5;    // 50%
PdfView.Zoom := 2.0;    // 200%
 
// Fit to page width
PdfView.Zoom := PdfView.PageWidthZoom[PdfView.PageNumber];
 
// Fit entire page in view
PdfView.Zoom := PdfView.PageZoom[PdfView.PageNumber];
 
// Actual size (based on DPI)
PdfView.Zoom := PdfView.ActualSizeZoom[PdfView.PageNumber];

Rotação de páginas

Gire as páginas usando o Rotation Rolagem Contínua (Continuous Scrolling)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Rotate right (clockwise)
case PdfView.Rotation of
  ro0:   PdfView.Rotation := ro90;
  ro90:  PdfView.Rotation := ro180;
  ro180: PdfView.Rotation := ro270;
  ro270: PdfView.Rotation := ro0;
end;
 
// Rotate left (counter-clockwise)
case PdfView.Rotation of
  ro0:   PdfView.Rotation := ro270;
  ro90:  PdfView.Rotation := ro0;
  ro180: PdfView.Rotation := ro90;
  ro270: PdfView.Rotation := ro180;
end;

Exibindo informações do documento

Acesse os metadados do documento através do TPdf componente:

1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TFormMain.SpeedButtonShowInfoClick(Sender: TObject);
begin
  ShowMessage(
    'Author: ' + Pdf.Author + #13#10 +
    'Creator: ' + Pdf.Creator + #13#10 +
    'Keywords: ' + Pdf.Keywords + #13#10 +
    'Producer: ' + Pdf.Producer + #13#10 +
    'Subject: ' + Pdf.Subject + #13#10 +
    'Title: ' + Pdf.Title + #13#10 +
    'Creation date: ' + Pdf.CreationDate + #13#10 +
    'Modified date: ' + Pdf.ModifiedDate
  );
end;

Trabalhando com marcadores

A demonstração preenche um TreeView com os marcadores do documento para facilitar a navegação:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TFormMain.AddBookmarks(Node: TTreeNode; Bookmarks: TBookmarks);
var
  ChildNode: TTreeNode;
  I: Integer;
begin
  for I := 0 to Length(Bookmarks) - 1 do
  begin
    ChildNode := TreeViewBookmarks.Items.AddChildObject(
      Node,
      Bookmarks[I].Title,
      Bookmarks[I].Handle
    );
    ChildNode.HasChildren := Pdf.HasBookmarkChildren[Bookmarks[I]];
    
    if ChildNode.HasChildren then
      AddBookmarks(ChildNode, Pdf.BookmarkChildren[Bookmarks[I]]);
  end;
end;

Opções de Renderização

Personalize a renderização com diversas opções:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Available render options
type
  TRenderOption = (
    reAnnotations,      // Render annotations
    reLcd,              // LCD optimized rendering
    reNoNativeText,     // Don't use native text output
    reGrayscale,        // Render in grayscale
    reLimitCache,       // Limit image cache size
    reHalftone,         // Use halftone for image stretching
    rePrinting,         // Optimize for printing
    reNoSmoothText,     // Disable text anti-aliasing
    reNoSmoothImage,    // Disable image anti-aliasing
    reNoSmoothPath      // Disable path anti-aliasing
  );
 
// Apply options to the view
PdfView.Options := [reAnnotations, reLcd];

Conclusão.

A demonstração do Visualizador de PDF oferece uma base sólida para construir funcionalidades de visualização de PDF em seus aplicativos Delphi. Com o PDFium VCL, você tem acesso ao mesmo mecanismo de renderização de PDF usado pelo Google Chrome, garantindo uma exibição de PDF de alta qualidade e precisa.

O componente lida automaticamente com recursos complexos de PDF, como anotações, campos de formulário e fontes incorporadas, permitindo que você se concentre na construção dos recursos exclusivos do seu aplicativo, em vez de na análise de baixo nível de PDF.

Baixe o PDFium VCL de loslab.com para começar a desenvolver em PDF no Delphi.