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.