Техническая статья

Создание многофункциональной программы просмотра PDF с помощью PDFium VCL в Delphi

В этом руководстве мы рассмотрим, как создать профессиональное приложение для просмотра PDF-файлов с использованием PDFium VCL, мощного компонента Delphi, который использует движок рендеринга PDFium от Google. Эта демонстрация демонстрирует основные функции просмотра, которые являются основой любого приложения для работы с PDF. PDFium VCL, мощный компонент Delphi, который использует движок рендеринга PDFium от Google. Эта демонстрация демонстрирует основные функции просмотра, которые являются основой любого приложения для работы с PDF.

Обзор

Демонстрация PDF-просмотрщика демонстрирует основные функции, необходимые для просмотра PDF-документов в приложении Delphi. Он предоставляет полное, готовое к использованию решение для просмотра PDF с функциями, сопоставимыми с коммерческими PDF-ридерами.

Основные функции

  • Загрузка документов – Открытие PDF-файлов с поддержкой защиты паролем
  • Навигация по страницам. – Кнопки для перехода к первой, предыдущей, следующей и последней странице с использованием сочетаний клавиш.
  • Элементы управления масштабированием. – Несколько уровней масштабирования, включая "по размеру страницы" и "по ширине".
  • Поворот страниц – Поворот страниц на 90° влево или вправо.
  • Выбор текста. – Выбор и копирование текста из PDF-документов.
  • Закладки. – Навигация с использованием оглавления документа.
  • Поиск текста. – Поиск текста в документе
  • Печать – Печать документов с выбором диапазона страниц
  • Сохранить как – Экспорт документа в новый PDF-файл

Требования к библиотеке PDFium DLL

Перед запуском любого приложения PDFium VCL необходимо установить файлы PDFium DLL. Эти файлы находятся в директории: DLLs папка пакета PDFium VCL:

  • pdfium32.dll – 32-битная версия (~5 МБ)
  • pdfium64.dll – 64-битная версия (~6 МБ)
  • pdfium32v8.dll 32-разрядная версия с JavaScript-движком V8 (около 23 МБ).
  • pdfium64v8.dll 64-разрядная версия с JavaScript-движком V8 (около 27 МБ).

Установка: Запуск PDFiumVCL\DLLs\CopyDlls.bat Запустите как администратор. Этот скрипт автоматически копирует соответствующие DLL-файлы в системные каталоги 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\

Обратите внимание: Используйте стандартные DLL-файлы (pdfium32.dll/pdfium64.dll) для большинства приложений. Версии V8 необходимы только в том случае, если ваши PDF-файлы содержат JavaScript, требующий выполнения.

Основные компоненты

В демонстрации используются два основных компонента PDFium VCL:

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

Компонент TPdf.

The TPdf Этот компонент обрабатывает все операции с документами PDF, включая загрузку, сохранение и доступ к свойствам документа, таким как метаданные, закладки и информация о страницах.

Компонент TPdfView.

The TPdfView Этот компонент является визуальным элементом управления с возможностью прокрутки, который отображает страницы PDF с плавной прокруткой, поддержкой масштабирования и обработкой взаимодействия с пользователем.

Загрузка документа PDF.

Открытие файла PDF - это просто:

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;

Навигация по страницам.

Реализация навигации по страницам проста с помощью. PageNumber Непрерывная прокрутка

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;

Элемент управления масштабированием.

The TPdfView Этот компонент предлагает гибкие опции масштабирования:

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

Поворот страниц

Поворачивайте страницы с помощью Rotation Непрерывная прокрутка

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;

Отображение информации о документе

Получите доступ к метаданным документа через TPdf компонент:

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;

Работа с закладками

В демонстрации TreeView заполняется закладками документа для удобной навигации:

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;

Параметры рендеринга

Настройте отрисовку с помощью различных опций:

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

Заключение.

Демонстрация PDF Viewer предоставляет надежную основу для создания функций просмотра PDF в ваших приложениях Delphi. С PDFium VCL вы получаете доступ к тому же движку отрисовки PDF, который используется в Google Chrome, что обеспечивает высококачественное и точное отображение PDF.

Компонент автоматически обрабатывает сложные функции PDF, такие как аннотации, поля форм и встроенные шрифты, позволяя вам сосредоточиться на создании уникальных функций вашего приложения, а не на низкоуровневом анализе PDF.

Загрузите PDFium VCL с сайта loslab.com, чтобы начать разработку PDF в Delphi.