Fachartikel

HotPDF Canvas Draw

· PDF-Software

Dieses HotPDF-Komponentenbeispiel zeigt, wie Vektor-PDF-Zeichnungen mit dem gleichen TCanvas-Workflow erstellt werden, den Delphi-Entwickler bereits in VCL-Anwendungen verwenden. Anstatt die PDF-Ausgabe als ein separates Zeichenmodell zu behandeln, schreibt das Beispiel Text und Formen über HotPDF.Canvas und speichert das Ergebnis als PDF-Dokument.

Das Beispiel ist nützlich, wenn eine Anwendung bereits Rendering-Code für Diagramme, Schemata, Vorschauen oder benutzerdefinierte Steuerelemente basierend auf TCanvas enthält. Das Kernmuster ist einfach: Erstellen Sie ein THotPDF-Objekt, weisen Sie die Ausgabedatei zu, rufen Sie BeginDoc auf, konfigurieren Sie den Canvas-Zustand, zeichnen Sie den Inhalt und schließen Sie die Datei mit EndDoc.

Im folgenden Code rendert die Zeichenschleife drei Gruppen von farbigen Formen. Jede Gruppe verwendet das gleiche Koordinatensystem und ändert nur das gezeichnete Primitive: Rechteck, Ellipse oder abgerundetes Rechteck. Dies macht es zu einer kompakten Referenz zum Testen von Canvas-Farben, Füllverhalten, Textplatzierung und Seitenlayout in einem generierten PDF.

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
47
48
49
50
51
52
53
54
program CanvasDraw;
{$APPTYPE CONSOLE}
uses
{$IFDEF VER230} System.SysUtils, System.Classes, Vcl.Graphics, {$ELSE} SysUtils, Classes, Graphics, {$ENDIF} HPDFDoc;
 
var
   I, Y: Integer;
   HotPDF: THotPDF;
 
begin
    HotPDF:= THotPDF.Create(nil);
    try
        Randomize;
        HotPDF.AutoLaunch := true;
        HotPDF.FileName := 'CanvasDraw.pdf';
        HotPDF.BeginDoc;                                          // Create PDF file
        HotPDF.Canvas.Font.Size := 14;                            // Set canvas font size
        I :=20;
        Y := 60;
        HotPDF.Canvas.TextOut(10, 30, 'Canvas Rectangles');      //  Print text
        while I <= 700 do
        begin                                                   //  Draw colour
            HotPDF.Canvas.Brush.Color := random($FFFFFF);         //  rectangles
            HotPDF.Canvas.Rectangle(I, Y, I+90, Y + 160);
            Inc(I, 30);
            Inc( Y, 3 );
        end;
 
        I :=20;
        Y := 350;
        HotPDF.Canvas.TextOut(10, 320, 'Canvas Ellipses');         // Print text
        while I <= 700 do                                       //  Draw colour
        begin                                                   //  ellipses
            HotPDF.Canvas.Brush.Color := random($FFFFFF);
            HotPDF.Canvas.Ellipse(I, Y, I+90, Y + 160);
            Inc(I, 30);
            Inc( Y, 3 );
        end;
 
        I :=20;
        Y := 680;
        HotPDF.Canvas.TextOut(10, 650, 'Canvas RoundRects');      // Print text
        while I <= 700 do
        begin
            HotPDF.Canvas.Brush.Color := random($FFFFFF);         //  Draw colour
            HotPDF.Canvas.RoundRect(I, Y, I+90, Y + 160, 20, 20); //  roundrects
            Inc(I, 30);                                        
            Inc( Y, 3 );
        end;
        HotPDF.EndDoc;                                            // Close PDF file
    finally
        HotPDF.Free;
    end;
end.

Was das Beispiel zeigt

  • Wie THotPDF für eine Delphi-PDF-Generierungsaufgabe im Konsolenstil initialisiert wird.
  • Wie HotPDF.Canvas für Text und grundlegende geometrische Zeichnungen verwendet wird.
  • Wie Füllfarben die gefüllten Formen im generierten PDF beeinflussen.
  • Wie wiederholte Koordinaten eine mehrschichtige visuelle Ausgabe erzeugen können, ohne Bitmap-Screenshots zu verwenden.

Implementierungsanmerkungen.

Eine PDF-Seite wird erst nach dem Aufruf von EndDoc finalisiert, daher sollte der Produktionscode einen try/finally-Block um die Lebensdauer des Komponents verwenden, um zu vermeiden, dass eine teilweise geschriebene Datei zurückbleibt, wenn das Zeichnen fehlschlägt. Für deterministische Testergebnisse sollten Sie Randomize und zufällige Farben durch feste Farbwerte ersetzen.

Das zeichnen von PDF-Dateien mit Canvas eignet sich am besten für Berichte, Overlays, Diagramme und generierte Formulare, bei denen die Ausgabe auch bei jeder Zoomstufe scharf bleiben soll. Wenn das Quellbild von der Bildschirm-DPI oder gerätespezifischen Schriftarten abhängt, überprüfen Sie die endgültige PDF-Datei auf einem sauberen System, bevor Sie sie ausliefern.