Articolo tecnico

Disegno su tela HotPDF

· Software PDF

Questo esempio di componente HotPDF dimostra come creare disegni PDF in stile vettoriale utilizzando lo stesso flusso di lavoro di TCanvas che gli sviluppatori Delphi già utilizzano nelle applicazioni VCL. Invece di trattare l'output PDF come un modello di disegno separato, l'esempio scrive testo e forme tramite HotPDF.Canvas e quindi salva il risultato come documento PDF.

L'esempio è utile quando un'applicazione ha già codice di rendering di grafici, diagrammi, anteprime o controlli personalizzati basato su TCanvas. Il modello principale è semplice: creare un'istanza di THotPDF, assegnare il file di output, chiamare BeginDoc, configurare lo stato del canvas, disegnare il contenuto e terminare il file con EndDoc.

Nel codice sottostante, il ciclo di disegno renderizza tre gruppi di forme colorate. Ogni gruppo utilizza lo stesso sistema di coordinate e cambia solo la primitiva che viene disegnata: Rettangolo, Ellisse o Rettangolo arrotondato. Questo lo rende un riferimento compatto per testare i colori del canvas, il comportamento del riempimento, il posizionamento del testo e il layout della pagina in un PDF generato.

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.

Cosa mostra l'esempio.

  • Come inizializzare THotPDF per un'attività di generazione PDF in stile console in Delphi.
  • Come utilizzare HotPDF.Canvas per il disegno di testo e forme geometriche di base.
  • Come i colori del pennello influiscono sulle forme riempite nel PDF generato.
  • Come le coordinate ripetute possono creare un output visivo a strati senza screenshot bitmap.

Note sull'implementazione.

La pagina PDF viene finalizzata solo dopo la chiamata a EndDoc, quindi il codice di produzione dovrebbe mantenere il blocco try/finally attorno al ciclo di vita del componente ed evitare di lasciare un file parzialmente scritto se il disegno fallisce. Per un output di test deterministico, sostituire Randomize e i colori casuali con valori di colore fissi.

Il disegno PDF basato su canvas funziona meglio per report, sovrapposizioni, diagrammi e moduli generati, dove l'output deve rimanere nitido a qualsiasi livello di zoom. Se il disegno di origine dipende dalla DPI dello schermo o da font specifici del dispositivo, verificare il PDF finale su un sistema pulito prima di distribuirlo.