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
Pdf của TPdfView trỏ tới thành phần TPdf của bạnTả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;
// Đ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 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 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 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;
// 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;
// Đọ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)));
// 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;
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;
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;
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
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;