Article technique

Dessin sur toile HotPDF

· Logiciels PDF

Cet exemple de composant HotPDF illustre comment créer des dessins PDF de type vectoriel en utilisant le même flux de travail TCanvas que les développeurs Delphi utilisent déjà dans les applications VCL. Au lieu de traiter la sortie PDF comme un modèle de dessin distinct, l'exemple écrit du texte et des formes via HotPDF.Canvas, puis enregistre le résultat sous forme de document PDF.

Cet exemple est utile lorsque l'application dispose déjà de code de rendu de graphiques, de diagrammes, d'aperçus ou de contrôles personnalisés basé sur TCanvas. Le modèle de base est simple : créez un objet THotPDF, attribuez le fichier de sortie, appelez BeginDoc, configurez l'état de la zone de dessin, dessinez le contenu et terminez le fichier avec EndDoc.

Dans le code ci-dessous, la boucle de dessin affiche trois groupes de formes colorées. Chaque groupe utilise le même système de coordonnées et ne modifie que la primitive dessinée : Rectangle, Ellipse ou RoundRect. Cela en fait une référence compacte pour tester les couleurs de la zone de dessin, le comportement du remplissage, le placement du texte et la mise en page des pages dans un PDF généré.

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.

Ce que cet exemple montre.

  • Comment initialiser THotPDF pour une tâche de génération de PDF Delphi de type console.
  • Comment utiliser HotPDF.Canvas pour le texte et le dessin géométrique de base.
  • Comment les couleurs des pinceaux affectent les formes remplies dans le PDF généré.
  • Comment les coordonnées répétées peuvent créer une sortie visuelle en couches sans captures d'écran bitmap.

Notes d'implémentation.

La page PDF n'est finalisée qu'après l'appel de EndDoc, donc le code de production doit conserver le bloc try/finally autour de la durée de vie du composant et éviter de laisser un fichier partiellement écrit en cas d'échec du dessin. Pour une sortie de test déterministe, remplacez Randomize et les couleurs aléatoires par des valeurs de couleur fixes.

Le dessin PDF basé sur Canvas est idéal pour les rapports, les superpositions, les diagrammes et les formulaires générés, où la sortie doit rester nette quel que soit le niveau de zoom. Si le dessin source dépend de la résolution de l'écran ou des polices spécifiques à l'appareil, vérifiez le PDF final sur un système propre avant de le distribuer.