Hello World depuis le composant Delphi HotPDF
Bienvenue dans le guide complet du programme de démonstration HelloWorld du composant Delphi HotPDF !
À propos du composant HotPDF
Le composant HotPDF est une bibliothèque de traitement PDF puissante et polyvalente conçue spécifiquement pour les développeurs Delphi et C++Builder. Ce composant complet fournit une API étendue qui permet aux développeurs de créer, manipuler et modifier des documents PDF avec facilité et précision.
Fonctionnalités clés du composant HotPDF :
- Création et génération de PDF : Créer des documents PDF à partir de zéro avec un contrôle total sur la mise en page, le formatage et le contenu
- Support de texte et graphiques : Ajouter du texte, des images, des formes et des graphiques complexes aux pages PDF
- Support multilingue : Support Unicode complet pour le rendu de texte international
- Gestion des polices : Intégrer des polices pour une apparence cohérente du document sur différents systèmes
- Options de compression : Multiples algorithmes de compression pour optimiser la taille du fichier
- Fonctionnalités de sécurité : Chiffrement de document, protection par mot de passe et contrôles d’autorisation
- Manipulation de documents : Fusionner, diviser et modifier des documents PDF existants
- Support de tableaux et formulaires : Créer des tableaux complexes et des formulaires interactifs
Aperçu du programme HelloWorld.dpr
Le programme d’exemple HelloWorld.dpr
sert d’excellente introduction à la fonctionnalité la plus basique et importante du composant HotPDF : La fonction TexOut. Ce programme de démonstration présente également la fonctionnalité de création PDF de base.
Fonctionnalité principale :
1. Création de document PDF
La fonction principale du programme est de générer des documents PDF contenant du texte “Hello World” multilingue. La procédure CreatePDF
démontre :
- Initialisation du composant : Configuration et paramétrage appropriés du composant THotPDF
- Propriétés du document : Définition des métadonnées telles que les options de compression et l’intégration de polices
- Rendu de texte multilingue : Affichage de texte en 11 langues différentes incluant l’anglais, l’espagnol, l’allemand, le français, l’italien, le portugais, le russe, le japonais, le turc, le chinois et le coréen
- Gestion des polices : Utilisation d’Arial Unicode MS pour la plupart des langues et Malgun Gothic pour le texte coréen
- Comparaison de compression : Création de versions compressées et non compressées pour démontrer les différences de taille de fichier
2. Gestion des fenêtres et intégration système
Le programme inclut une fonctionnalité sophistiquée d’énumération des fenêtres qui démontre :
- Énumération des fenêtres système : Utilisation de la fonction API Windows
EnumWindows
pour itérer à travers toutes les fenêtres de niveau supérieur - Correspondance de titre de fenêtre : Implémentation de correspondance de sous-chaînes pour identifier les applications cibles
- Fermeture automatique de fenêtre : Envoi de messages
WM_CLOSE
pour fermer les visualiseurs PDF qui pourraient avoir des fichiers ouverts - Prévention de conflits : S’assurer qu’aucun conflit d’accès aux fichiers ne se produit lors de la création de nouveaux fichiers PDF
3. Gestion d’erreurs et gestion des ressources
Le programme démontre les meilleures pratiques pour :
- Gestion de la mémoire : Création et suppression appropriées des instances de composants
- Sécurité d’exception : Utilisation de blocs try-finally pour assurer le nettoyage des ressources
- Retour utilisateur : Fourniture de sortie console pour informer les utilisateurs du progrès du programme
Détails d’implémentation technique :
Technologie de compression
Le programme crée deux versions du même PDF pour démontrer l’efficacité de la compression FlateDecode :
- Version non compressée : Temps de création plus rapide, taille de fichier plus grande
- Version compressée : Temps de création légèrement plus long, taille de fichier significativement plus petite
Stratégie de gestion des polices
Le programme emploie une stratégie sophistiquée de sélection de polices :
- Arial Unicode MS : Utilisé pour la plupart des langues en raison de son large support de caractères
- Malgun Gothic Semilight : Spécifiquement choisi pour le rendu de texte coréen
- Intégration de polices : Assure une apparence cohérente sur différents systèmes
Compatibilité inter-versions
Le code inclut des directives de compilation conditionnelle pour supporter les versions Delphi modernes et anciennes :
- Support XE2+ : Utilise des unités avec espaces de noms (WinApi.Windows, System.SysUtils, etc.)
- Support hérité : Revient aux noms d’unités traditionnels pour les anciennes versions Delphi
- Intégration EurekaLog : Support optionnel de détection de fuites mémoire et de débogage
Valeur éducative
Cet exemple HelloWorld sert plusieurs objectifs éducatifs :
- Introduction au composant : Fournit une introduction douce à l’utilisation du composant HotPDF
- Meilleures pratiques : Démontre la gestion appropriée des ressources et la gestion d’erreurs
- Intégration système : Montre comment intégrer la génération PDF avec les opérations système Windows
- Internationalisation : Illustre la gestion de texte multilingue dans les documents PDF
- Considérations de performance : Compare différentes stratégies de compression et leurs compromis
Commencer
Pour exécuter ce programme d’exemple :
- Assurez-vous que le composant HotPDF est correctement installé dans votre IDE Delphi
- Ouvrez le fichier de projet HelloWorld.dpr
- Compilez et exécutez le programme
- Le programme créera automatiquement deux fichiers PDF démontrant les différences de compression
- Examinez les fichiers générés pour voir le rendu de texte multilingue et comparer les tailles de fichiers
Code source
Ci-dessous se trouve le code source complet et bien documenté du programme de démonstration HelloWorld :
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 |
{************************************************************} // Composant PDF HotPDF // Copyright(c)2007-2025, https://www.loslab.com {************************************************************} // Programme de démonstration HelloWorld pour le composant HotPDF // Ce programme démontre les capacités de création PDF de base // incluant le support de texte multilingue et les options de compression {************************************************************} program HelloWorld; {$APPTYPE CONSOLE} // Type d'application console {$I ..\..\..\Lib\HotPDF.inc} // Inclure le fichier de configuration HotPDF uses // Unités EurekaLog pour la détection de fuites mémoire et le débogage (optionnel) {$IFDEF EurekaLog} EMemLeaks, // Détection de fuites mémoire EResLeaks, // Détection de fuites de ressources EDebugJCL, // Support de débogage JCL EDebugExports, // Exporter les informations de débogage EFixSafeCallException, // Gestion d'exception SafeCall EMapWin32, // Support de mappage Win32 EAppConsole, // Support d'application console EDialogConsole, // Support de dialogue console ExceptionLog7, // Journalisation d'exceptions {$ENDIF EurekaLog} // Unités système - espaces de noms différents pour XE2+ vs anciennes versions {$IFDEF XE2+} WinApi.Windows, // Fonctions API Windows WinApi.Messages, // Constantes de messages Windows System.SysUtils, // Utilitaires système System.Classes, // Classes de base (TStringList, etc.) Vcl.Graphics, // Support graphique {$ELSE} Windows, // Fonctions API Windows (ancien Delphi) Messages, // Constantes de messages Windows (ancien Delphi) SysUtils, // Utilitaires système (ancien Delphi) Classes, // Classes de base (ancien Delphi) Graphics, // Support graphique (ancien Delphi) {$ENDIF} HPDFDoc; // Unité du composant principal HotPDF // Crée un fichier PDF avec du texte "Hello World" multilingue // Paramètres : // FileName: Nom du fichier PDF de sortie // UseCompression: True pour activer la compression FlateDecode, False pour aucune compression procedure CreatePDF(const FileName: string; UseCompression: Boolean); var HotPDF: THotPDF; // Instance du composant principal HotPDF begin // Créer une instance du composant HotPDF HotPDF := THotPDF.Create(nil); try // Configurer les propriétés PDF HotPDF.AutoLaunch := true; // Ouvrir automatiquement le PDF après création HotPDF.FileName := FileName; // Définir le nom du fichier de sortie // Définir la compression basée sur le paramètre if UseCompression then begin HotPDF.Compression := cmFlateDecode; // Activer la compression FlateDecode WriteLn('Création du PDF compressé : ', FileName); end else begin HotPDF.Compression := cmNone; // Aucune compression WriteLn('Création du PDF non compressé : ', FileName); end; HotPDF.FontEmbedding := true; // Intégrer les polices pour une meilleure compatibilité HotPDF.BeginDoc; // Commencer la création du document PDF // Définir la police Unicode pour le support de texte multilingue // Arial Unicode MS supporte la plupart des langues sauf le coréen // procedure SetFont ( FontName: AnsiString; FontStyle: TFontStyles; ASize: Single; FontCharset: TFontCharset = DEFAULT_CHARSET; IsVertical: boolean = false); // DEFAULT_CHARSET: 1 - La police est choisie basée sur le nom. Si la police décrite n'est pas disponible sur le système, Windows substituera une autre police HotPDF.CurrentPage.SetFont('Arial Unicode MS', [], 12, 1, False); // Afficher "Hello World" en plusieurs langues // Paramètres TextOut : (X, Y, Angle, Texte) HotPDF.CurrentPage.TextOut(80, 50, 0, 'Hello, Delphi PDF world!'); // Anglais HotPDF.CurrentPage.TextOut(80, 70, 0, 'Hola, mundo Delphi PDF!'); // Espagnol HotPDF.CurrentPage.TextOut(80, 90, 0, 'Hallo, Delphi PDF Welt!'); // Allemand HotPDF.CurrentPage.TextOut(80, 110, 0, 'Bonjour, monde PDF Delphi!'); // Français HotPDF.CurrentPage.TextOut(80, 130, 0, 'Ciao, mondo Delphi PDF!'); // Italien HotPDF.CurrentPage.TextOut(80, 150, 0, 'Olá, mundo Delphi PDF!'); // Portugais HotPDF.CurrentPage.TextOut(80, 170, 0, 'Здравствуйте, Delphi PDF мир!'); // Russe HotPDF.CurrentPage.TextOut(80, 190, 0, 'こんにちは、Delphi PDFの世界!'); // Japonais HotPDF.CurrentPage.TextOut(80, 210, 0, 'Merhaba, Delphi PDF dünyası!'); // Turc HotPDF.CurrentPage.TextOut(80, 230, 0, '你好,Delphi PDF世界'); // Chinois // Le texte coréen nécessite une police coréenne spécifique // Arial Unicode MS ne supporte pas correctement les caractères coréens HotPDF.CurrentPage.SetFont('Malgun Gothic Semilight', [], 12, 0, False); HotPDF.CurrentPage.TextOut(80, 250, 0, '여보세요, Delphi PDF 세계!'); // Coréen HotPDF.EndDoc; // Finaliser et sauvegarder le document PDF WriteLn('PDF créé avec succès : ', FileName); finally HotPDF.Free; // Nettoyer le composant HotPDF end; end; // Variables globales pour l'énumération des fenêtres et la création PDF var Title: String; // Chaîne de titre individuelle (non utilisée dans l'implémentation actuelle) Titles: TStrings; // Liste des titres de fenêtres à rechercher Window: HWND; // Handle de fenêtre (non utilisé dans l'implémentation actuelle) WindowText: array[0..255] of Char; // Buffer pour le texte de fenêtre (non utilisé dans l'implémentation actuelle) WindowTitle: String; // Chaîne de titre de fenêtre (non utilisée dans l'implémentation actuelle) I: Integer; // Compteur de boucle (non utilisé dans l'implémentation actuelle) // Fonction de rappel pour l'API EnumWindows // Cette fonction est appelée pour chaque fenêtre de niveau supérieur dans le système // Paramètres : // hWnd: Handle de la fenêtre actuelle énumérée // lParam: Données définies par l'utilisateur (dans notre cas, pointeur vers TStrings avec les titres cibles) // Retourne : True pour continuer l'énumération, False pour arrêter function EnumWindowsProc(hWnd: HWND; lParam: LPARAM): BOOL; stdcall; var Titles: TStrings; // Liste des titres de fenêtres cibles I: Integer; // Compteur de boucle WindowText: array[0..255] of Char; // Buffer pour stocker le texte de fenêtre WindowTitle: String; // Titre de la fenêtre actuelle comme chaîne begin Result := True; // Continuer l'énumération par défaut Titles := TStrings(lParam); // Convertir lParam vers TStrings // Obtenir le texte du titre de la fenêtre if GetWindowText(hWnd, WindowText, SizeOf(WindowText)) > 0 then begin WindowTitle := String(WindowText); // Convertir le tableau de caractères en chaîne // Vérifier si le titre de la fenêtre contient l'une de nos chaînes cibles for I := 0 to Titles.Count - 1 do begin // Utiliser la fonction Pos pour vérifier si la chaîne cible est contenue dans le titre de la fenêtre if Pos(Titles[I], WindowTitle) > 0 then begin // Envoyer un message WM_CLOSE pour fermer la fenêtre PostMessage(hWnd, WM_CLOSE, 0, 0); Break; // Sortir de la boucle après avoir trouvé la première correspondance end; end; end; end; // L'exécution du programme principal commence ici begin // Fermer tous les fichiers PDF existants qui pourraient être ouverts dans les visualiseurs PDF // Cela empêche les conflits d'accès aux fichiers lors de la création de nouveaux PDF avec les mêmes noms Titles := TStringList.Create; try // Définir la liste des sous-chaînes de titre de fenêtre à rechercher // Toute fenêtre contenant ces chaînes sera fermée // Cela fermera Adobe et Foxit PDF reader & editor et beaucoup d'autres applications PDF Titles.CommaText := '"HelloWorld-compressed.pdf", "HelloWorld-uncompressed.pdf", "Foxit"'; // Énumérer toutes les fenêtres de niveau supérieur et fermer celles qui correspondent // EnumWindows appelle notre fonction de rappel pour chaque fenêtre EnumWindows(@EnumWindowsProc, LPARAM(Titles)); finally Titles.Free; // Nettoyer la liste de chaînes end; // Afficher l'en-tête du programme WriteLn('=== Test de compression HotPDF ==='); WriteLn('Cette démo crée deux fichiers PDF pour démontrer les différences de compression.'); WriteLn(''); // Créer d'abord le PDF non compressé // Cette version sera plus grande mais plus rapide à créer CreatePDF('HelloWorld-uncompressed.pdf', False); // Créer ensuite le PDF compressé // Cette version sera plus petite mais prend légèrement plus de temps à créer CreatePDF('HelloWorld-compressed.pdf', True); // Afficher le message de fin WriteLn(''); WriteLn('Tous les fichiers PDF créés avec succès !'); WriteLn('Veuillez vérifier les fichiers pour comparer les versions compressées vs non compressées.'); WriteLn('Vous pouvez examiner les tailles de fichiers pour voir l\'effet de compression.'); WriteLn(''); WriteLn('Appuyez sur Entrée pour quitter...'); ReadLn; // Attendre l\'entrée utilisateur avant de fermer la console end. |
Discover more from losLab Software Development
Subscribe to get the latest posts sent to your email.