Technisch artikel

HotPDF Canvas tekenen

· PDF Software

Dit HotPDF Component-voorbeeld laat zien hoe u vectorachtige PDF-tekeningen maakt met dezelfde TCanvas-workflow die Delphi-ontwikkelaars al in VCL-toepassingen gebruiken. In plaats van PDF-uitvoer als een apart tekenmodel te behandelen, schrijft het voorbeeld tekst en vormen via HotPDF.Canvas en slaat het resultaat daarna op als PDF-document.

Het voorbeeld is nuttig wanneer een toepassing al grafieken, diagrammen, previews of eigen control-rendering op basis van TCanvas heeft. Het kernpatroon is eenvoudig: maak THotPDF aan, wijs het uitvoerbestand toe, roep BeginDoc aan, configureer de canvasstatus, teken de inhoud en voltooi het bestand met EndDoc.

In de onderstaande code rendert de tekenlus drie groepen gekleurde vormen. Elke groep gebruikt hetzelfde coördinatensysteem en wijzigt alleen de getekende primitieve: Rectangle, Ellipse of RoundRect. Daardoor is dit een compacte referentie voor het testen van canvaskleuren, vulgedrag, tekstplaatsing en paginalay-out in een gegenereerde 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.

Wat het voorbeeld laat zien

  • Hoe u THotPDF initialiseert voor een consoleachtige Delphi-taak voor PDF-generatie.
  • Hoe u HotPDF.Canvas gebruikt voor tekst en eenvoudige geometrische tekeningen.
  • Hoe brush-kleuren gevulde vormen in de gegenereerde PDF beïnvloeden.
  • Hoe herhaalde coördinaten gelaagde visuele uitvoer kunnen opbouwen zonder bitmap-schermafbeeldingen.

Implementatienotities

De PDF-pagina wordt pas definitief gemaakt nadat EndDoc is aangeroepen. Productiecode moet daarom het try/finally-blok rond de levensduur van de component behouden en voorkomen dat er een gedeeltelijk geschreven bestand achterblijft als het tekenen mislukt. Vervang Randomize en willekeurige kleuren door vaste kleurwaarden voor deterministische testuitvoer.

Canvas-gebaseerd tekenen naar PDF werkt het best voor rapporten, overlays, diagrammen en gegenereerde formulieren waarbij de uitvoer op elk zoomniveau scherp moet blijven. Als de brontekening afhankelijk is van scherm-DPI of apparaatspecifieke lettertypen, controleer de uiteindelijke PDF dan op een schoon systeem voordat u deze uitlevert.