PDFium Component Docs

Schnellstartanleitung

Diese Anleitung hilft Ihnen, in nur wenigen Minuten mit den PDFium-VCL-Komponenten loszulegen.

Schritt 1: Neues Projekt anlegen

  1. Erstellen Sie eine neue VCL-Forms-Anwendung in Ihrer IDE
  2. Speichern Sie das Projekt an einem geeigneten Ort

Schritt 2: Komponenten zum Formular hinzufügen

  1. Öffnen Sie die Komponentenpalette losLab
  2. Legen Sie eine TPdf-Komponente auf Ihrem Formular ab
  3. Legen Sie eine TPdfView-Komponente auf Ihrem Formular ab
  4. Setzen Sie die Eigenschaft Pdf des TPdfView so, dass sie auf Ihre TPdf-Komponente verweist

Schritt 3: Erstes PDF laden

Einfaches PDF-Laden:

// PDF-Datei laden
Pdf1.FileName := 'C:\Sample.pdf';
Pdf1.Active := True;
ShowMessage('Pages: ' + IntToStr(Pdf1.PageCount));

// Oder aus einem Memory-Stream laden
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;

Schritt 4: Grundlegende PDF-Operationen

Durch Seiten navigieren

// Zur nächsten Seite wechseln
if PdfView1.PageNumber < Pdf1.PageCount then
  PdfView1.PageNumber := PdfView1.PageNumber + 1;

// Zur vorherigen Seite wechseln
if PdfView1.PageNumber > 1 then
  PdfView1.PageNumber := PdfView1.PageNumber - 1;

Text extrahieren

// Gesamten Text der aktuellen Seite extrahieren
Pdf1.PageNumber := 1;
Memo1.Text := Pdf1.Text;

// Text aus einem rechteckigen Bereich extrahieren
var
  RectText: WString;
begin
  RectText := Pdf1.TextInRectangle(100, 100, 500, 200);
  ShowMessage(RectText);
end;

Text suchen

// Text im Dokument finden
var
  Position: Integer;
begin
  Position := Pdf1.FindFirst('search term');
  if Position >= 0 then
    ShowMessage('Found at position: ' + IntToStr(Position))
  else
    ShowMessage('Not found');
end;

Neues PDF erstellen

// Neues PDF mit Text erstellen
Pdf1.CreateDocument;
Pdf1.Compressed := True; // Stream-Komprimierung aktivieren
Pdf1.Active := True;
Pdf1.AddPage(0, 595, 842); // A4-Größe
Pdf1.AddText('Hello World!', 'Arial', 24, 100, 700, clBlack, $FF, 0.0);
Pdf1.SaveAs('C:\NewDocument.pdf');
Pdf1.Active := False;

Zoom und Anzeige

// Zoomstufe festlegen (1.0 = 100 %)
PdfView1.Zoom := 1.5; // 150 %

// Anzeigemodus festlegen
PdfView1.DisplayMode := dmSingleContinuous;

// Seite drehen
PdfView1.Rotation := ro90;

Schritt 5: Dokumenteigenschaften

// Dokumentmetadaten lesen
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)));

Schritt 6: Passwortgeschützte Dokumente

// Passwortgeschütztes PDF öffnen
Pdf1.FileName := 'C:\Protected.pdf';
Pdf1.Password := 'mypassword';
Pdf1.Active := True;

Schritt 7: Große Dokumente (Streaming-Laden)

Für mehrere Gigabyte große PDFs oder Remote-/datenbankgestützte Quellen verwenden Sie LoadCustomDocument, damit PDFium Blöcke bedarfsweise lädt, anstatt die gesamte Datei in den Speicher zu puffern:

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

Schritt 8: Seitenlayout (TPdfView Fit-Mode)

FitMode hält lange Dokumente automatisch bei Resize und bei einem Seitenwechsel gerahmt:

PdfView1.FitMode := pfmFitPage; // gesamte Seite im Ansichtsbereich
// pfmFitWidth — Seitenbreite entspricht Ansichtsbereichsbreite
// pfmActualSize — 100 %
// pfmNone — manueller Zoom

// Dark-Mode-Viewer-Muster: dunkler Bildlaufbereich, papierweiße PDF-Seite
PdfView1.Color := clBlack;
PdfView1.PageColor := clWhite;

Schritt 9: Such-Hervorhebung

HighlightSearchText durchsucht die aktuelle Ansichtsseite und zeichnet bei jedem Neuzeichnen eine HighlightColor-Maske über jede Übereinstimmung:

var
  MatchCount: Integer;
begin
  PdfView1.HighlightColor := clYellow;
  MatchCount := PdfView1.HighlightSearchText('invoice');
  Status.Caption := IntToStr(MatchCount) + ' matches';
end;

// Beim Wechsel zu einer anderen Seite wird die Hervorhebung automatisch gelöscht

Schritt 10: PDF/A-Archivausgabe

SaveAsPdfA ergänzt den Basis-Speichervorgang durch ein inkrementelles Update, das einen XMP-Metadaten-Stream, ein sRGB-ICC-OutputIntent und einen aktualisierten Dokument-Catalog einfügt:

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

// Konformität eines eingehenden Dokuments prüfen
case Pdf1.PdfAConformance of
  pac1b: Log.Add('PDF/A-1b');
  pacNone: Log.Add('Not PDF/A');
end;

Nächste Schritte