Artículo técnico

Creación de un visor de PDF rico en funciones con PDFium VCL en Delphi

· Programación PDF

En este tutorial, exploraremos cómo crear una aplicación profesional para ver archivos PDF utilizando. PDFium VCL, un componente potente de Delphi que encapsula el motor de renderizado PDFium de Google. Esta demostración muestra las capacidades básicas de visualización que forman la base de cualquier aplicación PDF.

Resumen

La demostración del visor de PDF muestra las funcionalidades esenciales necesarias para visualizar documentos PDF en una aplicación Delphi. Proporciona una solución completa y lista para usar para la visualización de PDF, con características comparables a los lectores de PDF comerciales.

Características principales

  • Carga de documentos. – Abra archivos PDF con soporte para protección por contraseña.
  • Navegación de páginas. – Primero, botones de "anterior", "siguiente" y "última página" con atajos de teclado.
  • Controles de zoom. – Múltiples niveles de zoom, incluyendo ajuste a página y ajuste al ancho.
  • Rotación de páginas – Rotar páginas 90° hacia la izquierda o hacia la derecha.
  • Selección de texto. – Seleccionar y copiar texto de documentos PDF.
  • Marcadores. – Navegar utilizando el índice del documento.
  • Búsqueda de texto. – Encontrar texto dentro del documento.
  • Imprimir. – Imprimir documentos con selección de rango de páginas.
  • Guardar como. – Exportar el documento a un nuevo archivo PDF.

Requisitos de la DLL PDFium

Antes de ejecutar cualquier aplicación PDFium VCL, debe instalar los archivos DLL de PDFium. Los archivos DLL se encuentran en: DLLs carpeta del paquete PDFium VCL:

  • pdfium32.dll – Versión de 32 bits (~5 MB).
  • pdfium64.dll – Versión de 64 bits (~6 MB).
  • pdfium32v8.dll – 32 bits con el motor de JavaScript V8 (aproximadamente 23 MB).
  • pdfium64v8.dll – 64 bits con el motor de JavaScript V8 (aproximadamente 27 MB).

Instalación: Ejecutar PDFiumVCL\DLLs\CopyDlls.bat como Administrador. Este script copia automáticamente los DLLs apropiados a los directorios del sistema de 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: Utilice los DLLs estándar (pdfium32.dll/pdfium64.dll) para la mayoría de las aplicaciones. Las versiones de V8 solo son necesarias si sus archivos PDF contienen JavaScript que requiere ejecución.

Componentes principales

La demostración utiliza dos componentes principales de PDFium VCL:

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

Componente TPdf.

El TPdf Este componente gestiona todas las operaciones de documentos PDF, incluyendo la carga, el guardado y el acceso a las propiedades del documento, como metadatos, marcadores e información de la página.

Componente TPdfView.

El TPdfView Este componente es un control visual desplazable que renderiza páginas PDF con desplazamiento fluido, soporte de zoom y manejo de la interacción del usuario.

Cargar un documento PDF.

Abrir un archivo PDF es sencillo:

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;

Navegación de páginas.

Implementar la navegación de páginas es simple con el PageNumber propiedad:

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;

Control de zoom.

El TPdfView El componente ofrece opciones de zoom flexibles:

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];

Rotación de páginas

Rota las páginas usando el Rotation propiedad:

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;

Mostrar información del documento

Accede a los metadatos del documento a través de 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;

Trabajar con marcadores

La demostración completa un TreeView con los marcadores del documento para facilitar la navegación:

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;

Opciones de renderizado:

Personalice la renderización con varias opciones:

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];

Conclusión.

La demostración de PDF Viewer proporciona una base sólida para integrar la funcionalidad de visualización de PDF en sus aplicaciones Delphi. Con PDFium VCL, obtiene acceso al mismo motor de renderización de PDF que utiliza Google Chrome, lo que garantiza una visualización de PDF de alta calidad y precisa.

El componente gestiona automáticamente funciones complejas de PDF, como anotaciones, campos de formulario y fuentes integradas, lo que le permite centrarse en desarrollar las características únicas de su aplicación en lugar de realizar el análisis de PDF a bajo nivel.

Descargue PDFium VCL desde loslab.com para comenzar a desarrollar aplicaciones PDF en Delphi.