Technisch artikel

PDF-documenten helemaal opnieuw maken met PDFium VCL in Delphi

· PDF-programmeren

Hoewel PDFium vooral bekend staat om het bekijken en manipuleren van PDF, biedt PDFium VCL ook krachtige mogelijkheden voor het maken van PDF. De Maak PDF demo laat zien hoe u PDF-documenten programmatisch kunt genereren met tekst, vormen, tabellen en watermerken.

Overzicht

Met deze demo wordt een nieuw PDF-document gemaakt met verschillende elementen, waaronder opgemaakte tekst, geometrische vormen, een eenvoudige tabel en een diagonaal watermerk. Het demonstreert de kern PDF-creatie APIs die beschikbaar is in PDFium VCL.

Belangrijkste kenmerken

  • Maak nieuwe documenten – Genereer PDF's vanaf het begin
  • Tekst toevoegen – Voeg gestileerde tekst in met aangepaste lettertypen, formaten en kleuren
  • Vormen tekenen – Maak rechthoeken, paden en andere geometrische vormen
  • Tabellen bouwen – Maak eenvoudige, op tekst gebaseerde tabellen
  • Watermerken toevoegen – Geroteerde, semi-transparante tekst invoegen

PDFium DLL-vereisten

Voordat u een PDFium VCL-toepassing uitvoert, moet u ervoor zorgen dat de PDFium DLL-bestanden zijn geïnstalleerd:

  • pdfium32.dll / pdfium64.dll – Standaardversies (~5-6 MB)
  • pdfium32v8.dll / pdfium64v8.dll – Met V8 JavaScript-engine (~23-27 MB)

Installatie: Loop PDFiumVCL\DLLs\CopyDlls.bat als beheerder om de DLL's automatisch naar Windows-systeemmappen te kopiëren.

Een nieuw PDF-document maken

Urvanov Syntaxis Markeerstift 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
procedure CreateNewPdf;
var
  Pdf: TPdf;
begin
  Pdf := TPdf.Create(nil);
  try
    // Create empty document
    Pdf.CreateDocument;
    Pdf.Active := True;
    
    // Add first page (A4 size: 595 x 842 points)
    Pdf.AddPage(1, 595, 842);
    Pdf.PageNumber := 1;
    
    // Add content here...
    
    // Save the document
    Pdf.SaveAs('output.pdf');
    
  finally
    Pdf.Active := False;
    Pdf.Free;
  end;
end;
[Formaattijd: 0,0007 seconden]

Tekst toevoegen

De AddText methode voegt opgemaakte tekst toe aan de huidige pagina:

Urvanov Syntaxis Markeerstift v2.9.1
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TPdf.AddText(
  const Text, Font: WString;   // Text content and font name
  FontSize: Single;            // Font size in points
  X, Y: Double;                // Position (from bottom-left)
  Color: TColor = clBlack;     // Text color
  Alpha: Byte = $FF;           // Transparency (0-255)
  Angle: Double = 0.0          // Rotation angle in degrees
);
 
// Examples
Pdf.AddText('Hello World', 'Arial', 24, 50, 750, clBlack, $FF, 0.0);
Pdf.AddText('Subtitle', 'Times New Roman', 14, 50, 720, clGray, $FF, 0.0);
Pdf.AddText('Rotated Text', 'Arial', 18, 300, 400, clRed, $80, 45.0);
[Formaattijd: 0,0003 seconden]

Compleet PDF-aanmaakvoorbeeld

Urvanov Syntaxis Markeerstift 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
procedure TFormMain.CreateSimplePDF;
begin
  Pdf.CreateDocument;
  Pdf.Active := True;
  try
    // Add A4 page
    Pdf.AddPage(0, 595, 842);
    
    // Title
    Pdf.AddText(EditTitle.Text, 'Arial', 18, 50, 750, clBlack, $FF, 0.0);
    
    // Author line
    Pdf.AddText('By: ' + EditAuthor.Text, 'Arial', 12, 50, 720, clGray, $FF, 0.0);
    
    // Body text
    Pdf.AddText('This is a simple PDF document created with PDFium VCL.',
      'Arial', 12, 50, 680, clBlack, $FF, 0.0);
    Pdf.AddText('You can add various elements to your PDF:',
      'Arial', 12, 50, 650, clBlack, $FF, 0.0);
      
    // Optional features
    if CheckShapes.Checked then
      AddShapes;
      
    if CheckTable.Checked then
      AddTable;
      
    if CheckWatermark.Checked then
      AddWatermark;
      
    // Save
    Pdf.SaveAs('Sample.pdf');
    
  finally
    Pdf.Active := False;
  end;
end;
[Formaattijd: 0,0004 seconden]

Vormen tekenen met CreatePath

Urvanov Syntaxis Markeerstift v2.9.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Create a path starting at (X, Y)
procedure TPdf.CreatePath(
  X, Y: Single;                           // Starting point
  FillMode: TPdfFillMode = fmNone;        // None, Alternate, or Winding
  FillColor: TColor = clBlack;            // Fill color
  FillAlpha: Byte = $FF;                  // Fill transparency
  Stroke: Boolean = True;                 // Draw outline
  StrokeColor: TColor = clBlack;          // Outline color
  StrokeAlpha: Byte = $FF;                // Outline transparency
  StrokeWidth: Single = 1.0;              // Line width
  LineCap: TPdfLineCap = lcDefault;       // Line end style
  LineJoin: TPdfLineJoin = ljDefault;     // Line join style
  BlendMode: TPdfBlendMode = bmDefault    // Color blending
);
 
// Create a rectangle path
procedure TPdf.CreatePath(
  X, Y, Width, Height: Single;            // Rectangle bounds
  // Same optional parameters as above...
);
[Formaattijd: 0,0003 seconden]

Voorbeelden van vormtekeningen

Urvanov Syntaxis Markeerstift v2.9.1
1
2
3
4
5
6
7
8
9
10
11
12
procedure TFormMain.AddShapes;
begin
  // Filled rectangle with blue color at 50% opacity
  Pdf.CreatePath(100, 550, 150, 80, fmWinding, $FFCCAA, $80);
  Pdf.AddPath;
  Pdf.AddText('Rectangle', 'Arial', 10, 120, 580, clBlack, $FF, 0.0);
  
  // Another filled shape (green)
  Pdf.CreatePath(350, 590, 80, 80, fmWinding, $CCFFCC, $80);
  Pdf.AddPath;
  Pdf.AddText('Shape', 'Arial', 10, 370, 580, clBlack, $FF, 0.0);
end;
[Formaattijd: 0,0003 seconden]

Complexe paden creëren

Urvanov Syntaxis Markeerstift 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
procedure DrawTriangle(Pdf: TPdf);
begin
  // Start path at first vertex
  Pdf.CreatePath(200, 300, fmWinding, clBlue, $80, True, clNavy, $FF, 2.0);
  
  // Draw lines to other vertices
  Pdf.LineTo(300, 300);
  Pdf.LineTo(250, 400);
  
  // Close the path
  Pdf.ClosePath;
  
  // Add to page
  Pdf.AddPath;
end;
 
procedure DrawCurve(Pdf: TPdf);
begin
  Pdf.CreatePath(100, 200, fmNone, clBlack, $FF, True, clRed, $FF, 2.0);
  Pdf.MoveTo(100, 200);
  
  // Bezier curve with control points
  Pdf.BezierTo(
    150, 250,   // Control point 1
    200, 250,   // Control point 2
    250, 200    // End point
  );
  
  Pdf.AddPath;
end;
[Formaattijd: 0,0004 seconden]

Eenvoudige tabellen bouwen

Urvanov Syntaxis Markeerstift 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
procedure TFormMain.AddTable;
var
  X, Y: Double;
  I: Integer;
begin
  X := 100;
  Y := 450;
  
  // Table header
  Pdf.AddText('Item', 'Arial', 10, X, Y, clBlack, $FF, 0.0);
  Pdf.AddText('Quantity', 'Arial', 10, X + 100, Y, clBlack, $FF, 0.0);
  Pdf.AddText('Price', 'Arial', 10, X + 200, Y, clBlack, $FF, 0.0);
  
  // Draw header underline
  Pdf.CreatePath(X, Y - 5, 250, 0.5, fmNone, clBlack, $FF,
    True, clBlack, $FF, 1.0);
  Pdf.AddPath;
  
  // Table rows
  for I := 1 to 3 do
  begin
    Y := Y - 20;
    Pdf.AddText('Item ' + IntToStr(I), 'Arial', 9, X, Y, clBlack, $FF, 0.0);
    Pdf.AddText(IntToStr(I), 'Arial', 9, X + 100, Y, clBlack, $FF, 0.0);
    Pdf.AddText('$' + IntToStr(I * 10) + '.00', 'Arial', 9,
      X + 200, Y, clBlack, $FF, 0.0);
  end;
end;
[Formaattijd: 0,0007 seconden]

Watermerken toevoegen

Urvanov Syntaxis Markeerstift v2.9.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TFormMain.AddWatermark;
begin
  // Large, semi-transparent, rotated text
  Pdf.AddText('SAMPLE', 'Arial', 72, 200, 200, clGray, $30, 45.0);
end;
 
// More sophisticated watermark
procedure AddDiagonalWatermark(Pdf: TPdf; const Text: string);
begin
  // Center of A4 page
  Pdf.AddText(Text, 'Arial', 60,
    595 / 2 - 100,  // X centered
    842 / 2,        // Y centered
    $CCCCCC,        // Light gray
    $40,            // 25% opacity
    45.0            // 45 degree rotation
  );
end;
[Formaattijd: 0,0002 seconden]

Afbeeldingen toevoegen

Urvanov Syntaxis Markeerstift v2.9.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure AddImageToPdf(Pdf: TPdf; const ImageFile: string);
var
  Picture: TPicture;
begin
  Picture := TPicture.Create;
  try
    Picture.LoadFromFile(ImageFile);
    
    // Add at position with automatic sizing
    Pdf.AddPicture(Picture, 50, 400);
    
    // Or with specific dimensions
    Pdf.AddPicture(Picture, 50, 400, 200, 150);
    
  finally
    Picture.Free;
  end;
end;
[Formaattijd: 0,0003 seconden]

Documenten met meerdere pagina's

Urvanov Syntaxis Markeerstift 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
procedure CreateMultiPagePdf;
var
  Pdf: TPdf;
  I: Integer;
begin
  Pdf := TPdf.Create(nil);
  try
    Pdf.CreateDocument;
    Pdf.Active := True;
    
    for I := 1 to 5 do
    begin
      // Add page
      Pdf.AddPage(I, 595, 842);
      Pdf.PageNumber := I;
      
      // Add content
      Pdf.AddText('Page ' + IntToStr(I), 'Arial', 24,
        250, 400, clBlack, $FF, 0.0);
    end;
    
    Pdf.SaveAs('multipage.pdf');
    
  finally
    Pdf.Active := False;
    Pdf.Free;
  end;
end;
[Formaattijd: 0,0004 seconden]

Paginaformaten

Format Width (pts) Height (pts)
A4 Portrait 595 842
A4 Landscape 842 595
Letter Portrait 612 792
Letter Landscape 792 612
Legal Portrait 612 1008

Gebruiksscenario's

  • Rapportgeneratie – Maak opgemaakte rapporten van gegevens
  • Factuur maken – Facturen en bonnen genereren
  • Certificaat genereren – Maak certificaten met sjablonen
  • Documentsjablonen – Vul sjablonen met dynamische inhoud

Conclusie

De Create PDF-demo laat zien dat PDFium VCL niet alleen bedoeld is om te bekijken: het is een complete PDF-toolkit. Met ondersteuning voor tekst, vormen, afbeeldingen en documenten van meerdere pagina's kunt u professionele PDF's geheel op basis van code genereren.

Gecombineerd met de weergave- en manipulatiemogelijkheden van de component biedt de PDFium VCL alles wat u nodig heeft voor uitgebreide PDF-bediening in Delphi-toepassingen.

Ontdek de creatie van PDF met PDFium VCL-onderdeel en breng dynamische documentgeneratie naar uw toepassingen.