Документация PDFiumPas

Руководство по быстрому старту

Это руководство поможет начать работу с компонентами PDFium VCL всего за несколько минут.

Шаг 1: создание нового проекта

  1. Создайте новое приложение VCL Forms в вашей IDE
  2. Сохраните проект в удобном месте

Шаг 2: добавление компонентов на форму

  1. Откройте палитру компонентов losLab
  2. Перетащите компонент TPdf на форму
  3. Перетащите компонент TPdfView на форму
  4. Установите свойство Pdf элемента TPdfView, чтобы оно указывало на ваш компонент TPdf

Шаг 3: загрузка первого PDF

Простая загрузка PDF:

// Загрузить PDF-файл
Pdf1.FileName := 'C:\Sample.pdf';
Pdf1.Active := True;
ShowMessage('Pages: ' + IntToStr(Pdf1.PageCount));

// Или загрузить из потока памяти
var
  Stream: TMemoryStream;
begin
  Stream := TMemoryStream.Create;
  try
    Stream.LoadFromFile('C:\Sample.pdf');
    Pdf1.LoadDocument(Stream, True);
    Pdf1.Active := True;
  finally
    Stream.Free;
  end;
end;

Шаг 4: базовые операции с PDF

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

// Перейти на следующую страницу
if PdfView1.PageNumber < Pdf1.PageCount then
  PdfView1.PageNumber := PdfView1.PageNumber + 1;

// Перейти на предыдущую страницу
if PdfView1.PageNumber > 1 then
  PdfView1.PageNumber := PdfView1.PageNumber - 1;

Извлечение текста

// Извлечь весь текст с текущей страницы
Pdf1.PageNumber := 1;
Memo1.Text := Pdf1.Text;

// Извлечь текст из прямоугольной области
var
  RectText: WString;
begin
  RectText := Pdf1.TextInRectangle(100, 100, 500, 200);
  ShowMessage(RectText);
end;

Поиск текста

// Найти текст в документе
var
  Position: Integer;
begin
  Position := Pdf1.FindFirst('search term');
  if Position >= 0 then
    ShowMessage('Found at position: ' + IntToStr(Position))
  else
    ShowMessage('Not found');
end;

Создание нового PDF

// Создать новый PDF с текстом
Pdf1.CreateDocument;
Pdf1.Compressed := True; // включить сжатие потоков
Pdf1.Active := True;
Pdf1.AddPage(0, 595, 842); // размер A4
Pdf1.AddText('Hello World!', 'Arial', 24, 100, 700, clBlack, $FF, 0.0);
Pdf1.SaveAs('C:\NewDocument.pdf');
Pdf1.Active := False;

Масштабирование и отображение

// Установить уровень масштаба (1.0 = 100%)
PdfView1.Zoom := 1.5; // 150%

// Установить режим отображения
PdfView1.DisplayMode := dmSingleContinuous;

// Повернуть страницу
PdfView1.Rotation := ro90;

Шаг 5: свойства документа

// Прочитать метаданные документа
ShowMessage('Title: ' + Pdf1.Title);
ShowMessage('Author: ' + Pdf1.Author);
ShowMessage('Creator: ' + Pdf1.Creator);
ShowMessage('Producer: ' + Pdf1.Producer);
ShowMessage('Pages: ' + IntToStr(Pdf1.PageCount));
ShowMessage('Version: ' + IntToStr(Ord(Pdf1.PdfVersion)));

Шаг 6: документы, защищённые паролем

// Открыть защищённый паролем PDF
Pdf1.FileName := 'C:\Protected.pdf';
Pdf1.Password := 'mypassword';
Pdf1.Active := True;

Шаг 7: большие документы (потоковая загрузка)

Для многогигабайтных PDF или удалённых / БД-источников используйте LoadCustomDocument, чтобы PDFium забирал блоки по требованию, а не буферизовал весь файл в памяти:

var
  FileStream: TFileStream;
begin
  FileStream := TFileStream.Create('C:\Huge.pdf', fmOpenRead or fmShareDenyWrite);
  Pdf1.LoadCustomDocument(FileStream, True); // AOwnsStream
  Pdf1.Active := True;
end;

Шаг 8: компоновка страницы (FitMode в TPdfView)

FitMode автоматически удерживает длинные документы в кадре при изменении размера и смене текущей страницы:

PdfView1.FitMode := pfmFitPage; // вся страница в области просмотра
// pfmFitWidth — ширина страницы совпадает с шириной области просмотра
// pfmActualSize — 100%
// pfmNone — ручное масштабирование

// Шаблон просмотрщика тёмной темы: тёмная область прокрутки, белая страница PDF
PdfView1.Color := clBlack;
PdfView1.PageColor := clWhite;

Шаг 9: подсветка результатов поиска

HighlightSearchText сканирует текущую страницу просмотра и рисует маску HighlightColor поверх каждого совпадения при каждой перерисовке:

var
  MatchCount: Integer;
begin
  PdfView1.HighlightColor := clYellow;
  MatchCount := PdfView1.HighlightSearchText('invoice');
  Status.Caption := IntToStr(MatchCount) + ' matches';
end;

// Переход на другую страницу автоматически очищает подсветку

Шаг 10: архивный вывод PDF/A

SaveAsPdfA постобрабатывает базовое сохранение инкрементальным обновлением, которое внедряет поток метаданных XMP, ICC OutputIntent sRGB и обновлённый catalog документа:

if Pdf1.SaveAsPdfA('C:\Report.pdfa.pdf', pac1b) then
  ShowMessage('Saved PDF/A-1b');

// Проверить соответствие входящего документа
case Pdf1.PdfAConformance of
  pac1b: Log.Add('PDF/A-1b');
  pacNone: Log.Add('Not PDF/A');
end;

Следующие шаги