html Tworzenie bogatej w funkcje przeglądarki PDF z PDFium VCL w Delphi | losLab Software Development Blog

Artykuł techniczny

Tworzenie bogatej w funkcje przeglądarki PDF z PDFium VCL w Delphi

· Programowanie PDF

W tym samouczku omówimy, jak utworzyć profesjonalną aplikację przeglądarki PDF przy użyciu PDFium VCL, potężny komponent Delphi, który stanowi uzupełnienie silnika renderującego PDFium firmy Google. To demo prezentuje podstawowe możliwości przeglądania, które stanowią podstawę każdej aplikacji PDF.

Przegląd

Demo przeglądarki PDF Viewer demonstruje podstawową funkcjonalność potrzebną do przeglądania dokumentów PDF w aplikacji Delphi. Zapewnia kompletne, gotowe do użycia rozwiązanie do przeglądania PDF z funkcjami porównywalnymi z komercyjnymi czytnikami PDF.

Kluczowe funkcje

  • Ładowanie dokumentu – Otwórz pliki PDF z obsługą ochrony hasłem
  • Nawigacja strony – Przyciski Pierwsza, Poprzednia, Następna, Ostatnia strona ze skrótami klawiaturowymi
  • Sterowanie powiększeniem – Wiele poziomów powiększenia, w tym dopasowanie do strony i dopasowanie do szerokości
  • Obrót strony – Obróć strony o 90° w lewo lub w prawo
  • Wybór tekstu – Zaznacz i skopiuj tekst z dokumentów PDF
  • Zakładki – Nawiguj, korzystając ze spisu treści dokumentu
  • Wyszukiwanie tekstowe – Znajdź tekst w dokumencie
  • Drukowanie – Drukuj dokumenty z wyborem zakresu stron
  • Zapisz jako – Eksportuj dokument do nowego pliku PDF

PDFium Wymagania DLL

Przed uruchomieniem jakiejkolwiek aplikacji PDFium VCL należy zainstalować pliki DLL PDFium. Biblioteki DLL znajdują się w pliku DLLs folder pakietu PDFium VCL:

  • pdfium32.dll – wersja 32-bitowa (~5 MB)
  • pdfium64.dll – wersja 64-bitowa (~6 MB)
  • pdfium32v8.dll – 32-bitowy z silnikiem V8 JavaScript (~23 MB)
  • pdfium64v8.dll – 64-bitowy z silnikiem V8 JavaScript (~27 MB)

Instalacja: Uruchom PDFiumVCL\DLLs\CopyDlls.bat jako Administrator. Skrypt ten automatycznie kopiuje odpowiednie biblioteki DLL do katalogów systemu Windows:

Zakreślacz składni Urvanov 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\
[Czas formatowania: 0,0007 sekundy]

Uwaga: Użyj standardowych bibliotek DLL (pdfium32.dll/pdfium64.dll) dla większości zastosowań. Wersje V8 są potrzebne tylko wtedy, gdy pliki PDF zawierają JavaScript, który wymaga wykonania.

Podstawowe komponenty

Demo wykorzystuje dwa główne komponenty PDFium VCL:

Zakreślacz składni Urvanov v2.9.1
1
2
Pdf: TPdf;        // Non-visual component for PDF operations
PdfView: TPdfView; // Visual component for rendering PDF pages
[Czas formatowania: 0,0001 sekundy]

TPdf Komponent

 TPdf obsługuje wszystkie operacje na dokumentach PDF, w tym ładowanie, zapisywanie i uzyskiwanie dostępu do właściwości dokumentu, takich jak metadane, zakładki i informacje o stronie.

TPdfView Komponent

 TPdfView to przewijalny wizualny element sterujący, który renderuje strony PDF z płynnym przewijaniem, obsługą powiększania i obsługą interakcji użytkownika.

Ładowanie dokumentu PDF

Otwarcie pliku PDF jest proste:

Zakreślacz składni Urvanov 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;
[Czas formatowania: 0,0004 sekundy]

Nawigacja strony

Implementacja nawigacji na stronie jest prosta dzięki PageNumber właściwość:

Zakreślacz składni Urvanov 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;
[Czas formatowania: 0,0001 sekundy]

Sterowanie powiększeniem

 TPdfView oferuje elastyczne opcje powiększania:

Zakreślacz składni Urvanov 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];
[Czas formatowania: 0,0002 sekundy]

Obrót strony

Obracaj strony za pomocą Rotation właściwość:

Zakreślacz składni Urvanov 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;
[Czas formatowania: 0,0003 sekundy]

Wyświetlanie informacji o dokumencie

Uzyskaj dostęp do metadanych dokumentu poprzez TPdf komponent:

Zakreślacz składni Urvanov 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;
[Czas formatowania: 0,0002 sekundy]

Praca z zakładkami

Demo wypełnia TreeView zakładkami dokumentu, co ułatwia nawigację:

Zakreślacz składni Urvanov 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;
[Czas formatowania: 0,0004 sekundy]

Opcje renderowania

Dostosuj renderowanie za pomocą różnych opcji:

Zakreślacz składni Urvanov 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];
[Czas formatowania: 0,0002 sekundy]

Wniosek

Wersja demonstracyjna przeglądarki PDF Viewer zapewnia solidną podstawę do tworzenia funkcjonalności przeglądania PDF w aplikacjach Delphi. Dzięki PDFium VCL masz dostęp do tego samego silnika renderującego PDF, którego używa Google Chrome, zapewniając wysoką jakość i dokładność wyświetlania PDF.

Komponent automatycznie obsługuje złożone funkcje PDF, takie jak adnotacje, pola formularzy i osadzone czcionki, dzięki czemu możesz skupić się na budowaniu unikalnych funkcji aplikacji, a nie na niskopoziomowym analizowaniu PDF.

Pobierz PDFium VCL od losLab.com aby rozpocząć rozwój PDF w Delphi.