Teknisk artikel

Bygga en funktionsrik PDF Viewer med PDFium VCL i Delphi

· PDF-programmering

I den här handledningen kommer vi att utforska hur du skapar en professionell PDF-visningsprogram med hjälp av PDFium VCL, en kraftfull Delphi-komponent som omsluter Googles PDFium-renderingsmotor. Denna demo visar upp de centrala visningsmöjligheterna som utgör grunden för alla PDF-applikationer.

Översikt

PDF Viewer-demon visar den väsentliga funktionalitet som behövs för att visa PDF-dokument i en Delphi-applikation. Den tillhandahåller en komplett, färdig att använda PDF-visningslösning med funktioner som är jämförbara med kommersiella PDF-läsare.

Nyckelfunktioner

  • Dokument laddas – Öppna PDF-filer med lösenordsskydd
  • Sidnavigering – Knappar för första, föregående, nästa, sista sida med kortkommandon
  • Zoomkontroller – Flera zoomnivåer inklusive anpassa till sida och anpassa till bredd
  • Sidrotation – Rotera sidorna 90° åt vänster eller höger
  • Textval – Välj och kopiera text från PDF-dokument
  • Bokmärken – Navigera med hjälp av dokumentets innehållsförteckning
  • Textsökning – Hitta text i dokumentet
  • Utskrift – Skriv ut dokument med val av sidintervall
  • Spara som – Exportera dokumentet till en ny PDF-fil

PDFium DLL-krav

Innan du kör ett PDFium VCL-program måste du installera PDFium DLL-filerna. DLL-filerna finns i DLLs mapp för PDFium VCL-paketet:

  • pdfium32.dll – 32-bitarsversion (~5 MB)
  • pdfium64.dll – 64-bitarsversion (~6 MB)
  • pdfium32v8.dll – 32-bitars med V8 JavaScript-motor (~23 MB)
  • pdfium64v8.dll – 64-bitars med V8 JavaScript-motor (~27 MB)

Installation: Kör PDFiumVCL\DLLs\CopyDlls.bat som administratör. Det här skriptet kopierar automatiskt lämpliga DLL-filer till Windows-systemkatalogerna:

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\

Obs: Använd standard-DLL-filerna (pdfium32.dll/pdfium64.dll) för de flesta applikationer. V8-versionerna behövs bara om dina PDF-filer innehåller JavaScript som kräver körning.

Kärnkomponenter

Demon använder två huvudsakliga PDFium VCL-komponenter:

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

TPdf-komponent

Den TPdf komponenten hanterar alla PDF-dokumentoperationer inklusive att ladda, spara och komma åt dokumentegenskaper som metadata, bokmärken och sidinformation.

TPdfView-komponent

Den TPdfView komponent är en rullningsbar visuell kontroll som renderar PDF-sidor med smidig rullning, zoomstöd och hantering av användarinteraktion.

Laddar ett PDF-dokument

Att öppna en PDF-fil är enkelt:

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;

Sidnavigering

Att implementera sidnavigering är enkelt med PageNumber egendom:

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;

Zoomkontroll

Den TPdfView komponent erbjuder flexibla zoomalternativ:

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

Sidrotation

Rotera sidor med hjälp av Rotation egendom:

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;

Visar dokumentinformation

Få åtkomst till dokumentmetadata via TPdf komponent:

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;

Arbeta med bokmärken

Demon fyller en TreeView med dokumentets bokmärken för enkel navigering:

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;

Renderalternativ

Anpassa renderingen med olika alternativ:

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

Slutsats

PDF Viewer-demon ger en solid grund för att bygga in PDF-visningsfunktioner i dina Delphi-applikationer. Med PDFium VCL får du tillgång till samma PDF-renderingsmotor som används av Google Chrome, vilket säkerställer högkvalitativ, exakt PDF-visning.

Komponenten hanterar komplexa PDF-funktioner som anteckningar, formulärfält och inbäddade typsnitt automatiskt, så att du kan fokusera på att bygga programmets unika funktioner snarare än att analysera PDF-filer på låg nivå.

Ladda ner PDFium VCL från loslab.com för att komma igång med PDF-utveckling i Delphi.