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.