Fachartikel

Erstellen eines funktionsreichen PDF-Viewers mit PDFium VCL in Delphi

· PDF-Programmierung

In diesem Tutorial erfahren Sie, wie Sie eine professionelle PDF-Viewer-Anwendung erstellen. PDFium VCL, eine leistungsstarke Delphi-Komponente, die die PDFium-Rendering-Engine von Google umschließt. Diese Demo zeigt die wichtigsten Anzeigefunktionen, die die Grundlage jeder PDF-Anwendung bilden.

Überblick

Die PDF Viewer-Demo demonstriert die wesentlichen Funktionen, die zum Anzeigen von PDF-Dokumenten in einer Delphi-Anwendung erforderlich sind. Es bietet eine vollständige, gebrauchsfertige PDF-Anzeigelösung mit Funktionen, die mit kommerziellen PDF-Readern vergleichbar sind.

Hauptmerkmale

  • Laden von Dokumenten – Öffnen von PDF-Dateien mit Unterstützung für Passwortschutz.
  • Seitennavigation – Schaltflächen für die erste, vorherige, nächste und letzte Seite mit Tastenkombinationen.
  • Zoom-Steuerelemente – Mehrere Zoomstufen, einschließlich "Seite anpassen" und "Breite anpassen".
  • Seitendrehung – Drehen von Seiten um 90° nach links oder rechts.
  • Textauswahl – Auswählen und Kopieren von Text aus PDF-Dokumenten.
  • Lesezeichen – Navigieren mithilfe des Inhaltsverzeichnisses des Dokuments.
  • Textsuche – Suchen nach Text innerhalb des Dokuments.
  • Drucken – Dokumente mit Auswahl des Seitenbereichs drucken.
  • Speichern unter – Dokument als neue PDF-Datei exportieren.

PDFium-DLL-Anforderungen

Bevor Sie eine PDFium VCL-Anwendung ausführen, müssen Sie die PDFium-DLL-Dateien installieren. Die DLLs befinden sich im DLLs Ordner des PDFium VCL-Pakets:

  • pdfium32.dll – 32-Bit-Version (~5 MB).
  • pdfium64.dll – 64-Bit-Version (~6 MB).
  • pdfium32v8.dll – 32-Bit-Version mit V8 JavaScript-Engine (~23 MB).
  • pdfium64v8.dll – 64-Bit-Version mit V8 JavaScript-Engine (~27 MB).

Installation: Ausführen PDFiumVCL\DLLs\CopyDlls.bat als Administrator. Dieses Skript kopiert automatisch die entsprechenden DLLs in die Windows-Systemverzeichnisse:

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\

Notiz: Verwenden Sie die Standard-DLLs (pdfium32.dll/pdfium64.dll) für die meisten Anwendungen. Die V8-Versionen werden nur benötigt, wenn Ihre PDFs JavaScript enthalten, das ausgeführt werden muss.

Kernkomponenten

Die Demo verwendet zwei Hauptkomponenten von PDFium VCL:

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

TPDF-Komponente

Der TPdf Komponente, die alle PDF-Dokumentoperationen abwickelt, einschließlich Laden, Speichern und Zugriff auf Dokumenteigenschaften wie Metadaten, Lesezeichen und Seiteninformationen.

TPdfView-Komponente

Der TPdfView Komponente ist eine scrollbare visuelle Steuerung, die PDF-Seiten mit flüssigem Scrollen, Zoom-Unterstützung und Benutzerinteraktionsverarbeitung rendert.

Laden eines PDF-Dokuments

Das Öffnen einer PDF-Datei ist unkompliziert:

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;

Seitennavigation

Die Implementierung der Seitennavigation ist einfach mit der PageNumber Eigenschaft:

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;

Zoomsteuerung

Der TPdfView Komponente bietet flexible Zoom-Optionen:

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

Seitendrehung

Seiten drehen mit der Rotation Eigenschaft:

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;

Dokumentinformationen anzeigen

Zugriff auf Metadaten des Dokuments über die TPdf Komponente:

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;

Arbeiten mit Lesezeichen

Die Demo füllt eine TreeView mit den Lesezeichen des Dokuments für eine einfache Navigation:

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;

Renderoptionen

Passen Sie das Rendering mit verschiedenen Optionen an:

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

Abschluss

Die PDF Viewer-Demo bietet eine solide Grundlage für die Integration von PDF-Anzeigefunktionen in Ihre Delphi-Anwendungen. Mit PDFium VCL erhalten Sie Zugriff auf dieselbe PDF-Rendering-Engine, die auch von Google Chrome verwendet wird, und sorgen so für eine qualitativ hochwertige und genaue PDF-Anzeige.

Die Komponente verarbeitet komplexe PDF-Funktionen wie Anmerkungen, Formularfelder und eingebettete Schriftarten automatisch, sodass Sie sich auf die Entwicklung der einzigartigen Funktionen Ihrer Anwendung konzentrieren können und nicht auf die einfache PDF-Analyse.

Laden Sie PDFium VCL herunter Besuchen Sie loslab.com, um mit der PDF-Entwicklung in Delphi zu beginnen.