PDFium Delphi Component 文件

快速开始指南

本指南将帮助你在几分钟内上手 PDFium VCL 组件。

第 1 步:新建工程

  1. 在 IDE 中新建一个 VCL Forms Application
  2. 把工程保存到方便的位置

第 2 步:把组件放到 Form 上

  1. 打开 losLab 组件面板
  2. 把 TPdf 组件拖到 Form 上
  3. 把 TPdfView 组件拖到 Form 上
  4. 把 TPdfView 的 Pdf 属性指向你的 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 步:处理大型文档(流式加载)

对于多 GB 的 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 步:页面布局(TPdfView Fit 模式)

FitMode 让长文档在 Resize 和翻页时自动保持合适的页面框定:

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 元数据流、sRGB ICC OutputIntent 和更新后的文档 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;

下一步