PDFiumPas 文件

快速入門指南

本指南將協助您在幾分鐘之內開始使用 PDFium VCL 元件。

步驟 1:建立新專案

  1. 在您的 IDE 中建立新的 VCL Forms Application
  2. 將專案儲存於方便的位置

步驟 2:將元件加入表單

  1. 開啟 losLab 元件面板
  2. TPdf 元件拖放至表單上
  3. TPdfView 元件拖放至表單上
  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 符合模式)

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;

後續步驟