HTML'si Delphi'de Sürekli Kaydırma Özellikli Çok Sayfalı PDF Görüntüleyici Oluşturma | losLab Software Development Blog

Teknik makale

Delphi'de Sürekli Kaydırma Özellikli Çok Sayfalı PDF Görüntüleyici Oluşturma

· PDF Programlama

Bu eğitimde Çok Sayfalı Görüntüleyici Temel PDF görüntüleyiciyi sürekli kaydırma özellikleriyle genişleten demo. Bu görüntüleme modu, Adobe Acrobat gibi modern PDF okuyucularının belgeleri görüntüleme biçimine benzer ve kullanıcıların tüm sayfaları sorunsuz bir şekilde kaydırmasına olanak tanır.

Genel Bakış

Çok Sayfalı Görüntüleyici demosu, tek sayfa sürekli kaydırma ve çift sayfa sürekli kaydırma (kitap modu) dahil olmak üzere PDFium VCL'deki gelişmiş görüntüleme modlarını sergiliyor. Bu özellikler profesyonel bir PDF okuma deneyimi oluşturmak için gereklidir.

Ekran Modları

PDFium VCL, birden fazla ekran modunu destekler. DisplayMode özelliği:

Urvanov Sözdizimi Vurgulayıcı v2.9.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
type
  TPdfDisplayMode = (
    dmSingleContinuous,  // Single page with continuous vertical scrolling
    dmDoubleContinuous   // Two pages side-by-side (book layout)
  );
 
// Switch between display modes
procedure TFormMain.ComboBoxDisplayModeChange(Sender: TObject);
begin
  case ComboBoxDisplayMode.ItemIndex of
    0: PdfView.DisplayMode := dmSingleContinuous;
    1: PdfView.DisplayMode := dmDoubleContinuous;
  end;
end;
[Format Süresi: 0,0008 saniye]

Temel Özellikler

  • Sürekli Kaydırma – Sayfa sayfa gezinmeden tüm sayfalarda gezinin
  • Çift Sayfa Modu – İki sayfayı fiziksel bir kitap gibi yan yana görüntüleyin
  • Sayfalar Arasında Metin Seçimi – Birden fazla sayfaya yayılan metni seçin ve kopyalayın
  • Yer İşaretinde Gezinme – Yer imlerine eklenen bölümlere anında atlayın
  • Vurgulayarak Arama – Belgedeki metni bulun ve vurgulayın
  • Klavye Gezinmesi – Ok tuşları, Sayfa Yukarı/Aşağı, Ana Sayfa/Son desteği
  • Optimize Edilmiş Performans – Düzgün kaydırma için yalnızca görünür sayfaları oluşturur

PDFium DLL Gereksinimleri

Herhangi bir PDFium VCL uygulamasını çalıştırmadan önce PDFium DLL dosyalarını yüklemelisiniz. DLL'ler şurada bulunur: PDFium VCL paketinin DLLs klasörü:

  • pdfium32.dll / pdfium64.dll – Çoğu uygulama için standart versiyonlar
  • pdfium32v8.dll / pdfium64v8.dll – V8 JavaScript motorlu genişletilmiş sürümler DLL'leri Windows sistem dizinlerine kopyalamak için Yönetici olarak

Kurulum: Çalıştır DLL'leri otomatik olarak Windows sistem dizinlerine kopyalamak için Yönetici olarak PDFiumVCL\DLLs\CopyDlls.bat . 64 bit Windows'ta 32 bit DLL'ler SysWOW64 ve 64 bit DLL'ler şuraya gider: System32.

Bileşenin Kurulumu

Demo, gelişmiş bir metin seçim sistemi uygular:

Urvanov Sözdizimi Vurgulayıcı v2.9.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
procedure TFormMain.PdfViewMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  CharIndex: Integer;
begin
  if Button = mbLeft then
  begin
    // Get character index at click position
    CharIndex := GetPreciseCharacterIndex(X, Y);
    
    if CharIndex >= 0 then
    begin
      SelectionMode := True;
      Selecting := True;
      SelectionStart := CharIndex;
      SelectionEnd := CharIndex;
    end;
  end;
end;
 
procedure TFormMain.PdfViewMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
var
  CharIndex: Integer;
begin
  if Selecting then
  begin
    CharIndex := GetPreciseCharacterIndex(X, Y);
    if CharIndex >= 0 then
    begin
      SelectionEnd := CharIndex;
      PdfView.Invalidate; // Redraw to show selection
    end;
  end;
end;
[Format Süresi: 0,0004 saniye]

Karakter Dizini Algılama

Demo, hassas metin seçimi için karakter algılama amacıyla yakınlaştırmaya duyarlı toleransı kullanır:

Urvanov Sözdizimi Vurgulayıcı v2.9.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function TFormMain.GetPreciseCharacterIndex(X, Y: Integer): Integer;
var
  BaseTolerance: Single;
  ZoomFactor: Single;
  AdjustedTolerance: Single;
  CharIndex: Integer;
begin
  Result := -1;
  
  if not PdfView.Active then
    Exit;
    
  // Calculate dynamic tolerance based on zoom level
  ZoomFactor := PdfView.Zoom;
  BaseTolerance := 5.0;
  
  // Adjust tolerance inversely to zoom
  AdjustedTolerance := BaseTolerance / ZoomFactor;
  
  // Get character at position with tolerance
  CharIndex := PdfView.CharacterIndexAtPos(X, Y,
    AdjustedTolerance, AdjustedTolerance);
    
  Result := CharIndex;
end;
[Format Süresi: 0,0005 saniye]

Seçilen Metni Vurgulama

Demo, seçimin önemli noktalarını çiziyor OnPaint olayı:

Urvanov Sözdizimi Vurgulayıcı v2.9.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
procedure TFormMain.PdfViewPaint(Sender: TObject);
var
  I, StartIdx, EndIdx: Integer;
  Rect: TPdfRectangle;
  R: TRect;
begin
  if (SelectionStart >= 0) and (SelectionEnd >= 0) then
  begin
    StartIdx := Min(SelectionStart, SelectionEnd);
    EndIdx := Max(SelectionStart, SelectionEnd);
    
    // Draw highlight for each character in selection
    for I := StartIdx to EndIdx do
    begin
      Rect := PdfView.CharacterRectangle[I];
      
      // Convert PDF coordinates to screen coordinates
      if PdfView.PageToDevice(
        Rect.Left, Rect.Top,
        PdfView.Left, PdfView.Top,
        PdfView.Width, PdfView.Height,
        PdfView.Rotation, R.Left, R.Top) then
      begin
        // Draw highlight rectangle
        PdfView.Canvas.Brush.Color := clHighlight;
        PdfView.Canvas.Brush.Style := bsSolid;
        PdfView.Canvas.FillRect(R);
      end;
    end;
  end;
end;
[Format Süresi: 0,0005 saniye]

Seçilen Metni Panoya Kopyala

Urvanov Sözdizimi Vurgulayıcı v2.9.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TFormMain.MenuItemCopyClick(Sender: TObject);
var
  StartIdx, EndIdx: Integer;
  SelectedText: string;
begin
  if (SelectionStart >= 0) and (SelectionEnd >= 0) then
  begin
    StartIdx := Min(SelectionStart, SelectionEnd);
    EndIdx := Max(SelectionStart, SelectionEnd);
    
    // Set page number for text extraction
    Pdf.PageNumber := PdfView.PageNumber;
    
    // Extract text from selection range
    SelectedText := Pdf.Text(StartIdx, EndIdx - StartIdx + 1);
    
    // Copy to clipboard
    Clipboard.AsText := SelectedText;
  end;
end;
[Format Süresi: 0,0003 saniye]

Arama İşlevselliği

Aşağıdakileri vurgulayarak metin aramayı uygulayın:

Urvanov Sözdizimi Vurgulayıcı v2.9.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure TFormMain.SpeedButtonSearchClick(Sender: TObject);
var
  SearchText: string;
  FoundIndex: Integer;
begin
  SearchText := EditSearch.Text;
  
  if SearchText = '' then
    Exit;
    
  // Find first occurrence
  FoundIndex := Pdf.FindFirst(SearchText, [], 0, True);
  
  if FoundIndex >= 0 then
  begin
    SearchStart := FoundIndex;
    SearchEnd := FoundIndex + Length(SearchText) - 1;
    PdfView.Invalidate; // Redraw to show highlight
  end
  else
    ShowMessage('Text not found');
end;
[Format Süresi: 0,0003 saniye]

Sayfa Değişikliği Etkinliği

Kullanıcı arayüzü öğelerini güncellemek için sayfa değişikliklerini yönetin:

Urvanov Sözdizimi Vurgulayıcı v2.9.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure TFormMain.PdfViewPageChanged(Sender: TObject);
begin
  if PdfView.Active then
  begin
    // Update page indicator
    SpeedButtonPageNumber.Caption :=
      IntToStr(PdfView.PageNumber) + ' of ' + IntToStr(PdfView.PageCount);
    
    // Update navigation button states
    SpeedButtonFirstPage.Enabled := PdfView.PageNumber > 1;
    SpeedButtonPreviousPage.Enabled := PdfView.PageNumber > 1;
    SpeedButtonNextPage.Enabled := PdfView.PageNumber < PdfView.PageCount;
    SpeedButtonLastPage.Enabled := PdfView.PageNumber < PdfView.PageCount;
    
    // Update bookmark tree selection
    if not DisableBookmarks then
      UpdateBookmarkSelection(PdfView.PageNumber);
  end;
end;
[Format Süresi: 0,0003 saniye]

Klavye Gezinmesi

Demo, gezinme için klavye kısayollarını yönetir:

Urvanov Sözdizimi Vurgulayıcı v2.9.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
procedure TFormMain.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    VK_ESCAPE:
      begin
        // Exit selection mode on Escape
        if SelectionMode then
        begin
          SelectionMode := False;
          SelectionStart := -1;
          SelectionEnd := -1;
          PdfView.Invalidate;
        end;
        Key := 0;
      end;
      
    VK_PRIOR, VK_UP, VK_LEFT:
      begin
        if SpeedButtonPreviousPage.Enabled then
          SpeedButtonPreviousPage.Click;
        Key := 0;
      end;
      
    VK_NEXT, VK_DOWN, VK_RIGHT:
      begin
        if SpeedButtonNextPage.Enabled then
          SpeedButtonNextPage.Click;
        Key := 0;
      end;
      
    VK_HOME:
      begin
        if SpeedButtonFirstPage.Enabled then
          SpeedButtonFirstPage.Click;
        Key := 0;
      end;
      
    VK_END:
      begin
        if SpeedButtonLastPage.Enabled then
          SpeedButtonLastPage.Click;
        Key := 0;
      end;
  end;
end;
[Format Süresi: 0,0005 saniye]

Çift Sayfada Gezinme

Çift sayfa modundayken, aynı anda iki sayfada gezinin:

Urvanov Sözdizimi Vurgulayıcı v2.9.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TFormMain.SpeedButtonNextPageClick(Sender: TObject);
begin
  if PdfView.DisplayMode = dmSingleContinuous then
    PdfView.PageNumber := PdfView.PageNumber + 1
  else
    PdfView.PageNumber := PdfView.PageNumber + 2;
end;
 
procedure TFormMain.SpeedButtonPreviousPageClick(Sender: TObject);
begin
  if PdfView.DisplayMode = dmSingleContinuous then
    PdfView.PageNumber := PdfView.PageNumber - 1
  else
    PdfView.PageNumber := PdfView.PageNumber - 2;
end;
[Format Süresi: 0,0002 saniye]

Sonuç

Çok Sayfalı Görüntüleyici demosu, sürekli kaydırma, metin seçimi ve arama işleviyle tam özellikli bir PDF okuyucunun nasıl oluşturulacağını gösterir. Bunlar, kullanıcıların modern PDF görüntüleme uygulamalarından beklediği özelliklerdir.

Siz kullanıcı arayüzüne ve uygulamaya özel özelliklere odaklanırken PDFium VCL, karmaşık oluşturma ve metin çıkarma işlemlerini gerçekleştirir. Sonuç, ticari PDF okuyuculara rakip olabilecek akıcı, hızlı yanıt veren bir PDF görüntüleme deneyimidir.

Al Loslab.com'da PDFium VCL Bileşeni ve Delphi'de profesyonel PDF uygulamaları oluşturmaya bugün başlayın.