HotPDF Composant Delphi TextOut – Style de Police et Jeu de Caractères
Cet exemple complet du composant HotPDF TextOut démontre la gestion avancée des polices, le support des jeux de caractères, la mise à l’échelle du texte, les ajustements d’espacement et les modes de rendu. L’exemple génère des démonstrations détaillées de polices et de jeux de caractères avec des exemples pratiques pour la génération PDF dans les applications Delphi.
Fonctionnalités Clés Démontrées
- Support des Familles de Polices : Arial, Times New Roman, Courier New avec divers styles
- Gestion des Jeux de Caractères : Jeux de caractères arabe, européen de l’est, OEM, russe et turc
- Mise à l’Échelle du Texte : Compression et expansion horizontale du texte
- Espacement des Caractères : Ajustement fin de l’espacement des caractères pour améliorer la lisibilité
- Espacement des Mots : Ajustement de l’espace entre les mots pour une meilleure mise en page du texte
- Modes de Rendu : Rendu de texte en remplissage, contour, remplissage+contour et invisible
📝 Note Importante
ShowCharset n’est utilisé que pour démontrer techniquement l’affichage de caractères d’un jeu de caractères via des codes de caractères. Pour l’affichage de texte normal, vous pouvez simplement utiliser TextOut pour afficher directement la chaîne désirée sans avoir besoin de spécifier des codes de caractères.
La procédure ShowCharset dans cet exemple est spécifiquement conçue pour montrer comment différents encodages de caractères rendent les caractères individuels par leurs codes Unicode/ASCII. Dans les applications réelles, utilisez simplement la méthode TextOut avec vos chaînes de texte directement.
Implémentation Technique
Cet exemple présente les capacités complètes de sortie de texte du composant HotPDF, incluant :
- Intégration de polices pour un affichage cohérent multi-plateforme
- Support des caractères Unicode pour le texte international
- Positionnement et rotation avancés du texte
- Génération de plan/signets PDF pour la navigation
- Création de documents multi-pages avec gestion automatique des pages
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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 | {***************************************************************} // Composant PDF HotPDF - Démonstration de Style de Texte et Jeu de Caractères // Copyright(c)2007-2025, https://www.loslab.com {***************************************************************} program TextOut; {$APPTYPE CONSOLE} {$I ..\..\..\Lib\HotPDF.inc} uses {$IFDEF XE2+} WinApi.Windows, System.SysUtils, System.Classes, Vcl.Graphics, {$ELSE} Windows, SysUtils, Classes, Graphics, {$ENDIF} HPDFDoc; // Variables globales pour la gestion du document PDF et du plan var HotPDF: THotPDF; // Instance principale du composant HotPDF OutlineRoot: THPDFDocOutlineObject; // Objet plan racine pour la navigation du document CurrnetOutline: THPDFDocOutlineObject; // Objet plan actuel pour la structure imbriquée { ==================================================================== ShowFontGroup - Affiche une famille de polices avec différents styles ==================================================================== OBJECTIF : Démontre comment afficher la même police dans différents styles (normal, gras, italique, gras-italique) avec divers angles de rotation du texte. PARAMÈTRES : @param FontGroup: String - Nom de la famille de polices à afficher (ex : 'Arial') @param Position: Integer - Coordonnée X pour le placement du texte FONCTIONNALITÉ : 1. Affiche le nom de la police en style normal à la position de base 2. Montre la version grasse avec rotation positive (+1 degré) 3. Montre la version italique avec rotation négative (-1 degré) 4. Montre la combinaison gras-italique en orientation normale DISPOSITION : Chaque style de police est affiché 20 pixels en dessous du précédent } procedure ShowFontGroup(FontGroup: AnsiString; Position: Integer); begin // procedure SetFont ( FontName: AnsiString; FontStyle: TFontStyles; ASize: Single; FontCharset: TFontCharset; IsVertiacal: Boolean); // Afficher le style de police normal HotPDF.CurrentPage.SetFont(FontGroup, [], 12); // Définir la police sans modificateurs de style // procedure TextOut ( X, Y: Single; Angle: Extended; Text: WideString); HotPDF.CurrentPage.TextOut(Position, 70, 0, WideString(FontGroup)); // Afficher à la position Y de base (70) // Afficher le style de police gras avec légère rotation positive HotPDF.CurrentPage.SetFont(FontGroup, [fsBold], 12); // Appliquer le style gras HotPDF.CurrentPage.TextOut(Position, 90, 1, WideString(FontGroup + '-Bold')); // Rotation +1 degré, Y+20 // Afficher le style de police italique avec légère rotation négative HotPDF.CurrentPage.SetFont(FontGroup, [fsItalic], 12); // Appliquer le style italique HotPDF.CurrentPage.TextOut(Position, 110, - 1, WideString(FontGroup + '-Italic')); // Rotation -1 degré, Y+40 // Afficher la combinaison gras-italique sans rotation HotPDF.CurrentPage.SetFont(FontGroup, [fsBold, fsItalic], 12); // Appliquer gras et italique HotPDF.CurrentPage.TextOut(Position, 130, 0, WideString(FontGroup + '-Bold-Italic')); // Orientation normale, Y+60 end; { ==================================================================== ShowCharset - Affiche les caractères pour un jeu de caractères spécifique ==================================================================== OBJECTIF : Démontre l'affichage correct des caractères pour différents encodages de caractères PARAMÈTRES : @param FontCharset: TFontCharset - Identifiant de jeu de caractères Windows @param First: Integer - Code de caractère Unicode/ASCII de début @param Last: Integer - Code de caractère Unicode/ASCII de fin (inclus) @param Y1: Integer - Coordonnée Y pour l'affichage du nom du jeu de caractères @param Y2: Integer - Coordonnée Y pour l'affichage de la grille de caractères PLAGES DE CARACTÈRES : Chaque jeu de caractères affiche des caractères de plages Unicode/ASCII spécifiques : - ARABIC_CHARSET: Unicode 1536-1625 (caractères du bloc arabe) - EASTEUROPE_CHARSET: Unicode 160-249 (Supplément Latin-1) - OEM_CHARSET: ASCII 32-121 (caractères ASCII imprimables) - RUSSIAN_CHARSET: Unicode 1024-1113 (caractères du bloc cyrillique) - TURKISH_CHARSET: Unicode 161-255 (Latin étendu imprimable) DISPOSITION D'AFFICHAGE : Les caractères sont arrangés en 3 rangées avec 30 caractères par rangée : - Rangée 1: Caractères 0-29, commençant à X=50 - Rangée 2: Caractères 30-59, commençant à X=50, Y+20 - Rangée 3: Caractères 60-89, commençant à X=50, Y+40 - Espacement des caractères: 16 pixels horizontalement, 20 pixels verticalement } procedure ShowCharset(FontCharset: TFontCharset; First, Last: Integer; Y1, Y2: Integer); var i: Integer; // Compteur de boucle pour l'itération des caractères CSName: AnsiString; // Nom du jeu de caractères pour l'affichage XPos, YPos: Integer; // Variables de position CharCode: Integer; // Code de caractère à afficher CharCount: Integer; // Nombre de caractères à afficher Row: Integer; // Rangée actuelle (1, 2 ou 3) CharInRow: Integer; // Position du caractère dans la rangée actuelle begin // Configuration du jeu de caractères avec noms descriptifs case FontCharset of ARABIC_CHARSET: CSName := 'ARABIC_CHARSET'; EASTEUROPE_CHARSET: CSName := 'EASTEUROPE_CHARSET'; OEM_CHARSET: CSName := 'OEM_CHARSET'; RUSSIAN_CHARSET: CSName := 'RUSSIAN_CHARSET'; TURKISH_CHARSET: CSName := 'TURKISH_CHARSET'; else CSName := 'DEFAULT_CHARSET'; end; // Définir le nombre de caractères à afficher : 90 caractères (30 par rangée × 3 rangées) CharCount := 90; if Last - First + 1 < CharCount then CharCount := Last - First + 1; // Afficher l'en-tête du jeu de caractères HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsItalic], 12); HotPDF.CurrentPage.TextOut(50, Y1, 0, WideString(CSName + ' exemple: ')); // Définir la police appropriée pour l'affichage des caractères avec spécification du jeu de caractères HotPDF.CurrentPage.SetFont('Arial', [], 14, FontCharset); // Afficher les caractères en disposition 3 rangées sans indentation for i := 0 to CharCount - 1 do begin // Déterminer la rangée et la position dans la rangée if i < 30 then begin // Première rangée: 30 caractères, alignés avec le titre (x=50) Row := 1; CharInRow := i; XPos := 50 + CharInRow * 16; YPos := Y2; end else if i < 60 then begin // Deuxième rangée: 30 caractères, alignés avec le titre (x=50) Row := 2; CharInRow := i - 30; XPos := 50 + CharInRow * 16; YPos := Y2 + 20; // 20 pixels en dessous de la première rangée end else begin // Troisième rangée: caractères restants, alignés avec le titre (x=50) Row := 3; CharInRow := i - 60; XPos := 50 + CharInRow * 16; YPos := Y2 + 40; // 40 pixels en dessous de la première rangée end; // Calculer le code de caractère CharCode := First + i; try // Utiliser la conversion WideString pour tous les caractères HotPDF.CurrentPage.TextOut(XPos, YPos, 0, WideString(WideChar(CharCode))); except // Si une erreur survient, afficher un caractère de remplacement HotPDF.CurrentPage.TextOut(XPos, YPos, 0, WideString('?')); end; end; end; { ==================================================================== ShowTable - Dessine une structure de tableau de démonstration ==================================================================== OBJECTIF : Crée une structure de tableau simple pour démontrer les effets de formatage de texte. Utilisé dans les sections de mise à l'échelle du texte, espacement des caractères et espacement des mots. PARAMÈTRES : @param X: Integer - Coordonnée X du bord gauche @param Y: Integer - Coordonnée Y du bord supérieur STRUCTURE : Crée un tableau de 300x100 pixels divisé en : - Cellule supérieure: 300x50 pixels - Cellule inférieure: 300x50 pixels - Diviseur vertical: 130 pixels du bord gauche Toutes les lignes sont dessinées avec opération de contour pour la visibilité } procedure ShowTable(X, Y: Integer); begin // Dessiner la cellule supérieure du tableau (rectangle 300x50) HotPDF.CurrentPage.Rectangle(X, Y, 300, 50); HotPDF.CurrentPage.Stroke; // Dessiner la cellule inférieure du tableau (rectangle 300x50, décalé de 50 pixels vers le bas) HotPDF.CurrentPage.Rectangle(X, Y + 50, 300, 50); HotPDF.CurrentPage.Stroke; // Dessiner la ligne de division verticale à travers les deux cellules HotPDF.CurrentPage.MoveTo(X + 130, Y); // Commencer en haut de la cellule supérieure HotPDF.CurrentPage.LineTo(X + 130, Y + 100); // Dessiner jusqu'en bas de la cellule inférieure HotPDF.CurrentPage.Stroke; end; { ==================================================================== EXÉCUTION DU PROGRAMME PRINCIPAL ==================================================================== Ceci est le corps principal du programme qui démontre toutes les capacités de sortie de texte HotPDF. Le programme est structuré en sections, chacune démontrant un aspect spécifique de la gestion du texte : 1. GROUPES DE POLICES - Montre différentes familles de polices et styles 2. JEUX DE CARACTÈRES - Démontre la gestion de l'encodage des caractères 3. MISE À L'ÉCHELLE DU TEXTE - Montre les effets de mise à l'échelle horizontale du texte 4. ESPACEMENT DES CARACTÈRES - Démontre les ajustements d'espacement des caractères 5. ESPACEMENT DES MOTS - Montre les modifications d'espacement des mots 6. MODES DE RENDU - Affiche différents effets de rendu de texte Chaque section inclut des en-têtes appropriés, des plans de navigation et des exemples pratiques avec des comparaisons avant/après le cas échéant. } begin // Initialiser le composant HotPDF HotPDF := THotPDF.Create(nil); try // Configurer les propriétés du document PDF pour un affichage optimal du texte HotPDF.AutoLaunch := true; // Ouvrir automatiquement le PDF après création HotPDF.FontEmbedding := true; // Activer l'intégration de polices pour un affichage cohérent des caractères sur tous les systèmes HotPDF.StandardFontEmulation := false; // Désactiver l'émulation de polices pour éviter les problèmes de mappage de caractères HotPDF.FileName := 'TextOut.pdf'; // Définir le nom du fichier de sortie HotPDF.PageLayout := plOneColumn; // Configurer le visualiseur pour afficher une colonne // Commencer la création du document PDF HotPDF.BeginDoc(true); // Créer le PDF avec compression activée OutlineRoot := HotPDF.OutlineRoot; // Initialiser la navigation du plan du document // ==================================================================== // SECTION 1: DÉMONSTRATION DES GROUPES DE POLICES // ==================================================================== // Cette section démontre comment différentes familles de polices apparaissent avec // diverses combinaisons de styles (normal, gras, italique, gras-italique) // Créer un en-tête de section avec formatage amélioré HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20); HotPDF.CurrentPage.TextOut(195, 30, 0, WideString('Afficher les Polices')); // Ajouter une entrée de plan de navigation pour cette section OutlineRoot.AddChild('Afficher les Polices', 195, 30); // Liens vers les coordonnées // Afficher trois familles de polices principales couramment disponibles sur tous les systèmes ShowFontGroup('Arial', 50); // Police sans-serif à X=50 ShowFontGroup('Times New Roman', 180); // Police serif à X=180 ShowFontGroup('Courier New', 350); // Police monospace à X=350 // ==================================================================== // SECTION 2: DÉMONSTRATION DES JEUX DE CARACTÈRES // ==================================================================== // Cette section démontre la gestion appropriée de différents encodages de caractères Windows // Créer un en-tête de section HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20); HotPDF.CurrentPage.TextOut(200, 170, 0, WideString('Jeux de Caractères')); // Créer un groupe de plan pour les jeux de caractères avec structure extensible // OutlineRoot.AddChild: Crée une nouvelle entrée de signet/plan dans l'arbre de navigation PDF // Paramètres: ('Titre', coordonnée-X, coordonnée-Y) // - 'Jeux de Caractères': Texte d'affichage montré dans le panneau de plan/signet PDF // - 250: Coordonnée X (position horizontale) où le clic naviguera // - 170: Coordonnée Y (position verticale) où le clic naviguera CurrnetOutline := OutlineRoot.AddChild('Jeux de Caractères', 250, 170); CurrnetOutline.Opened := true; // Étendre cette section de plan par défaut CurrnetOutline.AddChild('ARABIC_CHARSET', 50, 225); // Jeu de caractères arabe: plage Unicode U+0600-U+0659 (90 caractères) // Plage: 1536-1625 (bloc arabe incluant lettres, ponctuation, nombres et diacritiques) // Affiche 90 caractères arabes en 3 rangées de 30 caractères chacune // Utilisé pour: arabe, persan, ourdou, pachto, kurde et autres scripts RTL // procedure ShowCharset(FontCharset: TFontCharset; First, Last: Integer; Y1, Y2: Integer); // First est le code du premier caractère, sort séquentiellement jusqu'au dernier caractère // Y1 est la coordonnée Y du titre, et Y2 est la coordonnée Y de début des caractères ShowCharset(ARABIC_CHARSET, 1536, 1625, 225, 250); CurrnetOutline.AddChild('EASTEUROPE_CHARSET', 50, 325); // Jeu de caractères européen de l'est: plage Unicode U+00A0-U+00F9 (90 caractères) // Plage: 160-249 (Supplément Latin-1 avec caractères accentués et symboles) // Affiche 90 caractères latins étendus en 3 rangées de 30 caractères chacune // Utilisé pour: français, allemand, espagnol, portugais, italien, néerlandais, langues nordiques // ShowCharset sert juste à démontrer l'affichage de caractères du jeu de caractères via des codes de caractères // pour l'affichage de texte normal, vous n'avez qu'à utiliser TextOut pour afficher directement la chaîne requise ShowCharset(EASTEUROPE_CHARSET, 160, 249, 325, 350); CurrnetOutline.AddChild('OEM_CHARSET', 50, 425); // Jeu de caractères OEM: plage ASCII 32-121 (90 caractères) // Plage: 32-121 (ASCII imprimable incluant espace, symboles, nombres et lettres) // Affiche 90 caractères ASCII en 3 rangées de 30 caractères chacune // Utilisé pour: applications DOS, sortie console, systèmes hérités ShowCharset(OEM_CHARSET, 32, 121, 425, 450); CurrnetOutline.AddChild('RUSSIAN_CHARSET', 50, 525); // Jeu de caractères russe: plage Unicode U+0400-U+0459 (90 caractères) // Plage: 1024-1113 (bloc cyrillique incluant lettres russes, ukrainiennes, bulgares) // Affiche 90 caractères cyrilliques en 3 rangées de 30 caractères chacune // Utilisé pour: russe, bulgare, serbe (cyrillique), macédonien, ukrainien, biélorusse ShowCharset(RUSSIAN_CHARSET, 1024, 1113, 525, 550); CurrnetOutline.AddChild('TURKISH_CHARSET', 50, 625); // Jeu de caractères turc: plage Unicode U+00A1-U+00FF (95 caractères) // Plage: 161-255 (Supplément Latin-1 imprimable, évitant les caractères de contrôle 128-160) // Affiche 90 caractères en 3 rangées de 30 caractères chacune (premiers 90 des 95 disponibles) // Inclut les spéciaux turcs: Ç(199), ç(231), Ğ(208), ğ(240), İ(221), ı(253), Ö(214), ö(246), Ş(222), ş(254), Ü(220), ü(252) // Utilisé pour: langue turque avec ses caractères uniques et symboles européens ShowCharset(TURKISH_CHARSET, 161, 255, 625, 650); // ==================================================================== // SECTION 3: DÉMONSTRATION DE LA MISE À L'ÉCHELLE DU TEXTE // ==================================================================== // Cette section montre comment la mise à l'échelle horizontale du texte affecte l'apparence du texte // La mise à l'échelle modifie la largeur des caractères tout en maintenant la hauteur // Commencer une nouvelle page pour les démonstrations de formatage de texte avancé HotPDF.AddPage; HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20); OutlineRoot.AddChild('Mise à l\'échelle horizontale du texte', 180, 40); // Ajouter à la navigation du plan principal HotPDF.CurrentPage.TextOut(180, 40, 0, WideString('Mise à l\'échelle horizontale du texte')); // Créer une structure de tableau de comparaison ShowTable(130, 80); // Ajouter des étiquettes descriptives pour la comparaison HotPDF.CurrentPage.SetFont('Times New Roman', [], 12); HotPDF.CurrentPage.TextOut(160, 100, 0, WideString('défaut 100')); // Étiquette de mise à l'échelle normale HotPDF.CurrentPage.TextOut(165, 145, 0, WideString('réglé à 50')); // Étiquette de mise à l'échelle compressée // Démontrer la mise à l'échelle normale du texte (100% - défaut) HotPDF.CurrentPage.SetFont('Times New Roman', [], 24); HotPDF.CurrentPage.TextOut(280, 95, 0, WideString('Mot')); // Démontrer la mise à l'échelle compressée du texte (50% de largeur) HotPDF.CurrentPage.SetHorizontalScaling(50); // Comprimer le texte à 50% de largeur HotPDF.CurrentPage.TextOut(285, 140, 0, WideString('Mot')); HotPDF.CurrentPage.SetHorizontalScaling(100); // Remettre à la mise à l'échelle normale // ==================================================================== // SECTION 4: DÉMONSTRATION DE L'ESPACEMENT DES CARACTÈRES // ==================================================================== // Cette section démontre comment l'espacement des caractères affecte la lisibilité du texte // L'espacement des caractères ajoute un espace uniforme entre les caractères individuels HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20); OutlineRoot.AddChild('Espacement des Caractères', 200, 220); HotPDF.CurrentPage.TextOut(200, 220, 0, WideString('Espacement des Caractères')); // Créer un tableau de comparaison ShowTable(130, 260); // Ajouter des étiquettes descriptives HotPDF.CurrentPage.SetFont('Times New Roman', [], 12); HotPDF.CurrentPage.TextOut(162, 280, 0, WideString('défaut 0')); // Étiquette d'espacement normal HotPDF.CurrentPage.TextOut(162, 330, 0, WideString('espace réglé 5')); // Étiquette d'espacement élargi // Démontrer l'espacement normal des caractères (0 - défaut) HotPDF.CurrentPage.SetFont('Times New Roman', [], 24); HotPDF.CurrentPage.TextOut(278, 275, 0, WideString('Caractère')); // Démontrer l'espacement élargi des caractères (+5 unités entre les caractères) HotPDF.CurrentPage.SetCharacterSpacing(5); // Ajouter 5 unités entre chaque caractère HotPDF.CurrentPage.TextOut(278, 320, 0, WideString('Caractère')); HotPDF.CurrentPage.SetCharacterSpacing(0); // Remettre à l'espacement normal // ==================================================================== // SECTION 5: DÉMONSTRATION DE L'ESPACEMENT DES MOTS // ==================================================================== // Cette section démontre comment l'espacement des mots affecte la mise en page du texte // L'espacement des mots ajoute de l'espace spécifiquement entre les mots (aux caractères d'espace) HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20); OutlineRoot.AddChild('Espacement des Mots', 200, 380); HotPDF.CurrentPage.TextOut(200, 380, 0, WideString('Espacement des Mots')); // Créer un tableau de comparaison ShowTable(130, 420); // Ajouter des étiquettes descriptives HotPDF.CurrentPage.SetFont('Times New Roman', [], 12); HotPDF.CurrentPage.TextOut(162, 440, 0, WideString('défaut 0')); // Étiquette d'espacement normal des mots HotPDF.CurrentPage.TextOut(162, 490, 0, WideString('espace réglé 10')); // Étiquette d'espacement élargi des mots // Démontrer l'espacement normal des mots (0 - défaut) HotPDF.CurrentPage.SetFont('Times New Roman', [], 24); HotPDF.CurrentPage.TextOut(280, 430, 0, WideString('Espace Mot')); // Démontrer l'espacement élargi des mots (+10 unités entre les mots) HotPDF.CurrentPage.SetWordSpacing(10); // Ajouter 10 unités entre les mots HotPDF.CurrentPage.TextOut(280, 480, 0, WideString('Espace Mot')); HotPDF.CurrentPage.SetWordSpacing(0); // Remettre à l'espacement normal // ==================================================================== // SECTION 6: DÉMONSTRATION DES MODES DE RENDU DE TEXTE // ==================================================================== // Cette section démontre différents effets de rendu de texte disponibles en PDF // Le texte peut être rempli, contouré, les deux, ou invisible (pour des effets avancés) HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20); OutlineRoot.AddChild('Modes de Rendu', 200, 550); HotPDF.CurrentPage.TextOut(200, 550, 0, WideString('Modes de Rendu')); // Créer une structure de tableau complexe pour la comparaison des modes de rendu // Contour du tableau principal (500x150 pixels) HotPDF.CurrentPage.Rectangle(50, 600, 500, 150); HotPDF.CurrentPage.Stroke; // Diviseurs verticaux créant 4 colonnes de largeur égale HotPDF.CurrentPage.MoveTo(175, 600); // Premier diviseur HotPDF.CurrentPage.LineTo(175, 750); HotPDF.CurrentPage.Stroke; HotPDF.CurrentPage.MoveTo(300, 600); // Deuxième diviseur HotPDF.CurrentPage.LineTo(300, 750); HotPDF.CurrentPage.Stroke; HotPDF.CurrentPage.MoveTo(425, 600); // Troisième diviseur HotPDF.CurrentPage.LineTo(425, 750); HotPDF.CurrentPage.Stroke; // Diviseur horizontal séparant l'en-tête du contenu HotPDF.CurrentPage.MoveTo(50, 665); HotPDF.CurrentPage.LineTo(550, 665); HotPDF.CurrentPage.Stroke; // Ajouter des en-têtes de colonnes décrivant chaque mode de rendu HotPDF.CurrentPage.SetFont('Arial', [], 12); HotPDF.CurrentPage.TextOut(100, 620, 0, WideString('Remplir')); // Mode remplir - texte coloré solide HotPDF.CurrentPage.TextOut(215, 620, 0, WideString('Contour')); // Mode contour - texte contouré HotPDF.CurrentPage.TextOut(320, 620, 0, WideString('Remplir Contour')); // Mode combiné - rempli avec contour HotPDF.CurrentPage.TextOut(465, 620, 0, WideString('Invisible')); // Mode invisible - pour effets spéciaux // Configurer les couleurs pour une démonstration d'effet de rendu dramatique HotPDF.CurrentPage.SetFont('Arial', [fsBold], 72); // Grande police pour une visibilité claire HotPDF.CurrentPage.SetRGBStrokeColor(clRed); // Couleur de contour rouge HotPDF.CurrentPage.SetRGBFillColor(clYellow); // Couleur de remplissage jaune // Démontrer le mode de rendu Remplir - texte coloré solide HotPDF.CurrentPage.SetTextRenderingMode(trFill); HotPDF.CurrentPage.TextOut(90, 670, 0, WideString('P')); // Démontrer le mode de rendu Contour - texte contouré seulement HotPDF.CurrentPage.SetTextRenderingMode(trStroke); HotPDF.CurrentPage.TextOut(215, 670, 0, WideString('D')); // Démontrer le mode de rendu Remplir+Contour - texte rempli avec contour coloré HotPDF.CurrentPage.SetTextRenderingMode(trFillThenStroke); HotPDF.CurrentPage.TextOut(340, 670, 0, WideString('F')); // Démontrer le mode de rendu Invisible - le texte est présent mais pas visible // (utile pour le texte recherchable sur les images, ou techniques de mise en page avancées) HotPDF.CurrentPage.SetTextRenderingMode(trInvisible); HotPDF.CurrentPage.TextOut(475, 670, 0, WideString('X')); // Remettre au mode de rendu par défaut pour tout texte subséquent HotPDF.CurrentPage.SetTextRenderingMode(trFillThenStroke); // Finaliser et sauvegarder le document PDF HotPDF.EndDoc; finally // Assurer un nettoyage approprié du composant HotPDF HotPDF.Free; end; end. |
Discover more from losLab Software Development
Subscribe to get the latest posts sent to your email.