Technisch artikel

Een veelzijdige PDF-viewer bouwen met PDFium VCL in Delphi

· PDF-programmeren

In deze zelfstudie onderzoeken we hoe u een professionele PDF-viewertoepassing kunt maken met behulp van PDFium VCL, een krachtige Delphi-component die de PDFium-renderingengine van Google omhult. Deze demo toont de belangrijkste weergavemogelijkheden die de basis vormen van elke PDF-toepassing.

Overzicht

De PDF Viewer-demo demonstreert de essentiële functionaliteit die nodig is voor het bekijken van PDF-documenten in een Delphi-toepassing. Het biedt een complete, gebruiksklare PDF-weergaveoplossing met functies die vergelijkbaar zijn met commerciële PDF-lezers.

Belangrijkste kenmerken

  • Documenten laden – Open PDF-bestanden met ondersteuning voor wachtwoordbeveiliging
  • Paginanavigatie – Eerste, vorige, volgende, laatste paginaknoppen met sneltoetsen
  • Zoombediening – Meerdere zoomniveaus, waaronder passend op pagina en passend op breedte
  • Paginarotatie – Pagina's 90° naar links of rechts draaien
  • Tekstselectie – Selecteer en kopieer tekst uit PDF-documenten
  • Bladwijzers – Navigeer met behulp van de inhoudsopgave van het document
  • Tekst zoeken – Zoek tekst in het document
  • Afdrukken – Documenten afdrukken met paginabereikselectie
  • Opslaan als – Exporteer het document naar een nieuw PDF-bestand

PDFium DLL-vereisten

Voordat u een PDFium VCL-toepassing uitvoert, moet u de PDFium DLL-bestanden installeren. De DLL's bevinden zich in de DLLs map van het PDFium VCL-pakket:

  • pdfium32.dll – 32-bits versie (~5 MB)
  • pdfium64.dll – 64-bits versie (~6 MB)
  • pdfium32v8.dll – 32-bit met V8 JavaScript-engine (~23 MB)
  • pdfium64v8.dll – 64-bit met V8 JavaScript-engine (~27 MB)

Installatie: Loop PDFiumVCL\DLLs\CopyDlls.bat als Beheerder. Dit script kopieert automatisch de juiste DLL's naar de Windows-systeemmappen:

Urvanov Syntaxis Markeerstift v2.9.1
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\
[Formaattijd: 0,0007 seconden]

Opmerking: Gebruik de standaard DLL's (pdfium32.dll/pdfium64.dll) voor de meeste toepassingen. De V8-versies zijn alleen nodig als uw PDF's JavaScript bevatten dat moet worden uitgevoerd.

Kerncomponenten

De demo gebruikt twee belangrijke PDFium VCL-componenten:

Urvanov Syntaxis Markeerstift v2.9.1
1
2
Pdf: TPdf;        // Non-visual component for PDF operations
PdfView: TPdfView; // Visual component for rendering PDF pages
[Formaattijd: 0,0001 seconden]

TPdf-component

De TPdf component verwerkt alle PDF-documentbewerkingen, inclusief het laden, opslaan en openen van documenteigenschappen zoals metagegevens, bladwijzers en pagina-informatie.

TPdfView-component

De TPdfView component is een scrollbare visuele besturing die PDF-pagina's soepel scrollt, zoomondersteuning en gebruikersinteractie mogelijk maakt.

Een PDF-document laden

Het openen van een PDF-bestand is eenvoudig:

Urvanov Syntaxis Markeerstift 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
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;
[Formaattijd: 0,0004 seconden]

Paginanavigatie

Het implementeren van paginanavigatie is eenvoudig met de PageNumber eigendom:

Urvanov Syntaxis Markeerstift v2.9.1
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;
[Formaattijd: 0,0001 seconden]

Zoomregeling

De TPdfView component biedt flexibele zoomopties:

Urvanov Syntaxis Markeerstift v2.9.1
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];
[Formaattijd: 0,0002 seconden]

Paginarotatie

Pagina's roteren met behulp van de Rotation eigendom:

Urvanov Syntaxis Markeerstift v2.9.1
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;
[Formaattijd: 0,0003 seconden]

Documentinformatie weergeven

Krijg toegang tot documentmetagegevens via de TPdf onderdeel:

Urvanov Syntaxis Markeerstift v2.9.1
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;
[Formaattijd: 0,0002 seconden]

Werken met bladwijzers

De demo vult een TreeView met de bladwijzers van het document voor eenvoudige navigatie:

Urvanov Syntaxis Markeerstift v2.9.1
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;
[Formaattijd: 0,0004 seconden]

Renderopties

Pas de weergave aan met verschillende opties:

Urvanov Syntaxis Markeerstift v2.9.1
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];
[Formaattijd: 0,0002 seconden]

Conclusie

De PDF Viewer-demo biedt een solide basis voor het inbouwen van PDF-weergavefunctionaliteit in uw Delphi-applicaties. Met PDFium VCL krijgt u toegang tot dezelfde PDF-rendering-engine die wordt gebruikt door Google Chrome, waardoor u verzekerd bent van een hoogwaardige, nauwkeurige PDF-weergave.

De component verwerkt automatisch complexe PDF-functies zoals annotaties, formuliervelden en ingesloten lettertypen, zodat u zich kunt concentreren op het bouwen van de unieke functies van uw applicatie in plaats van op laag niveau PDF-parseren.

PDFium VCL downloaden van loslab.com om aan de slag te gaan met PDF-ontwikkeling in Delphi.