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.