PDFium Component Docs

Hướng dẫn bắt đầu nhanh

Hướng dẫn này sẽ giúp bạn bắt đầu với các thành phần PDFium VCL chỉ trong vài phút

Bước 1: Tạo dự án mới

  1. Tạo một VCL Forms Application mới trong IDE của bạn
  2. Lưu dự án ở một vị trí thuận tiện

Bước 2: Thêm các thành phần vào Form của bạn

  1. Mở bảng thành phần losLab
  2. Thả một thành phần TPdf lên Form của bạn
  3. Thả một thành phần TPdfView lên Form của bạn
  4. Đặt thuộc tính Pdf của TPdfView trỏ tới thành phần TPdf của bạn

Bước 3: Tải PDF đầu tiên của bạn

Tải PDF đơn giản:

// Tải một file PDF
Pdf1.FileName := 'C:\Sample.pdf';
Pdf1.Active := True;
ShowMessage('Số trang: ' + IntToStr(Pdf1.PageCount));

// Hoặc tải từ một memory stream
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;

Bước 4: Các thao tác PDF cơ bản

Điều hướng trang

// Đi tới trang tiếp theo
if PdfView1.PageNumber < Pdf1.PageCount then
  PdfView1.PageNumber := PdfView1.PageNumber + 1;

// Đi tới trang trước đó
if PdfView1.PageNumber > 1 then
  PdfView1.PageNumber := PdfView1.PageNumber - 1;

Trích xuất văn bản

// Trích xuất toàn bộ văn bản từ trang hiện tại
Pdf1.PageNumber := 1;
Memo1.Text := Pdf1.Text;

// Trích xuất văn bản từ một khu vực hình chữ nhật
var
  RectText: WString;
begin
  RectText := Pdf1.TextInRectangle(100, 100, 500, 200);
  ShowMessage(RectText);
end;

Tìm kiếm văn bản

// Tìm văn bản trong tài liệu
var
  Position: Integer;
begin
  Position := Pdf1.FindFirst('search term');
  if Position >= 0 then
    ShowMessage('Tìm thấy tại vị trí: ' + IntToStr(Position))
  else
    ShowMessage('Không tìm thấy');
end;

Tạo PDF mới

// Tạo một PDF mới chứa văn bản
Pdf1.CreateDocument;
Pdf1.Compressed := True; // bật nén luồng (stream compression)
Pdf1.Active := True;
Pdf1.AddPage(0, 595, 842); // Kích thước A4
Pdf1.AddText('Hello World!', 'Arial', 24, 100, 700, clBlack, $FF, 0.0);
Pdf1.SaveAs('C:\NewDocument.pdf');
Pdf1.Active := False;

Thu phóng và hiển thị

// Thiết lập mức thu phóng (1.0 = 100%)
PdfView1.Zoom := 1.5; // 150%

// Thiết lập chế độ hiển thị
PdfView1.DisplayMode := dmSingleContinuous;

// Xoay trang
PdfView1.Rotation := ro90;

Bước 5: Thuộc tính tài liệu

// Đọc metadata của tài liệu
ShowMessage('Tiêu đề: ' + Pdf1.Title);
ShowMessage('Tác giả: ' + Pdf1.Author);
ShowMessage('Người tạo: ' + Pdf1.Creator);
ShowMessage('Nhà sản xuất: ' + Pdf1.Producer);
ShowMessage('Số trang: ' + IntToStr(Pdf1.PageCount));
ShowMessage('Phiên bản: ' + IntToStr(Ord(Pdf1.PdfVersion)));

Bước 6: Tài liệu được bảo vệ bằng mật khẩu

// Mở một PDF được bảo vệ bằng mật khẩu
Pdf1.FileName := 'C:\Protected.pdf';
Pdf1.Password := 'mypassword';
Pdf1.Active := True;

Bước 7: Tài liệu lớn (tải theo luồng)

Với các PDF nhiều GB hoặc nguồn từ xa / cơ sở dữ liệu, hãy dùng LoadCustomDocument để PDFium lấy các khối theo yêu cầu thay vì đệm toàn bộ tệp trong bộ nhớ:

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

Bước 8: Bố cục trang (chế độ FitMode của TPdfView)

FitMode giữ cho tài liệu dài được căn khung tự động khi Resize và khi trang hiện tại thay đổi:

PdfView1.FitMode := pfmFitPage; // toàn bộ trang trong viewport
// pfmFitWidth — chiều rộng trang khớp với chiều rộng viewport
// pfmActualSize — 100%
// pfmNone — thu phóng thủ công

// Mẫu trình xem chế độ tối (dark-mode): vùng cuộn tối, trang PDF trắng như giấy
PdfView1.Color := clBlack;
PdfView1.PageColor := clWhite;

Bước 9: Tô sáng tìm kiếm

HighlightSearchText quét trang đang xem và tô một mặt nạ HighlightColor lên mọi kết quả khớp trong mỗi lần vẽ lại:

var
  MatchCount: Integer;
begin
  PdfView1.HighlightColor := clYellow;
  MatchCount := PdfView1.HighlightSearchText('invoice');
  Status.Caption := IntToStr(MatchCount) + ' kết quả khớp';
end;

// Chuyển sang một trang khác sẽ xóa phần làm nổi bật một cách tự động

Bước 10: Xuất lưu trữ PDF/A

SaveAsPdfA hậu xử lý lệnh lưu cơ bản bằng một bản cập nhật gia tăng chèn luồng siêu dữ liệu XMP, một sRGB ICC OutputIntent và một danh mục tài liệu đã cập nhật:

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

// Kiểm tra sự tuân thủ (conformance) của một tài liệu đầu vào
case Pdf1.PdfAConformance of
  pac1b: Log.Add('PDF/A-1b');
  pacNone: Log.Add('Không phải PDF/A');
end;

Các bước tiếp theo