Hallo Welt von der Delphi HotPDF Komponente
Willkommen zum umfassenden Leitfaden für das Delphi HotPDF Komponente HelloWorld Demonstrationsprogramm!
Über die HotPDF Komponente
Die HotPDF Komponente ist eine leistungsstarke und vielseitige PDF-Verarbeitungsbibliothek, die speziell für Delphi- und C++Builder-Entwickler entwickelt wurde. Diese umfassende Komponente bietet eine umfangreiche API, die es Entwicklern ermöglicht, PDF-Dokumente mit Leichtigkeit und Präzision zu erstellen, zu bearbeiten und zu modifizieren.
Hauptmerkmale der HotPDF Komponente:
- PDF-Erstellung & -Generierung: Erstellen Sie PDF-Dokumente von Grund auf mit vollständiger Kontrolle über Layout, Formatierung und Inhalt
- Text- & Grafikunterstützung: Fügen Sie Text, Bilder, Formen und komplexe Grafiken zu PDF-Seiten hinzu
- Mehrsprachige Unterstützung: Vollständige Unicode-Unterstützung für internationale Textdarstellung
- Schriftartenverwaltung: Einbetten von Schriftarten für konsistentes Dokumentaussehen auf verschiedenen Systemen
- Komprimierungsoptionen: Mehrere Komprimierungsalgorithmen zur Optimierung der Dateigröße
- Sicherheitsfeatures: Dokumentenverschlüsselung, Passwortschutz und Berechtigungskontrollen
- Dokumentenmanipulation: Zusammenführen, Aufteilen und Modifizieren bestehender PDF-Dokumente
- Tabellen- & Formularunterstützung: Erstellen komplexer Tabellen und interaktiver Formulare
HelloWorld.dpr Programmübersicht
Das HelloWorld.dpr
Beispielprogramm dient als ausgezeichnete Einführung in die grundlegendste und wichtigste Funktion der HotPDF Komponente: Die TexOut Funktion. Dieses Demonstrationsprogramm zeigt auch die grundlegende PDF-Erstellungsfunktionalität.
Kernfunktionalität:
1. PDF-Dokumentenerstellung
Die Hauptfunktion des Programms ist die Generierung von PDF-Dokumenten mit mehrsprachigem “Hallo Welt” Text. Die CreatePDF
Prozedur demonstriert:
- Komponenteninitialisierung: Ordnungsgemäße Einrichtung und Konfiguration der THotPDF Komponente
- Dokumenteigenschaften: Setzen von Metadaten wie Komprimierungsoptionen und Schriftarteneinbettung
- Mehrsprachige Textdarstellung: Anzeige von Text in 11 verschiedenen Sprachen einschließlich Englisch, Spanisch, Deutsch, Französisch, Italienisch, Portugiesisch, Russisch, Japanisch, Türkisch, Chinesisch und Koreanisch
- Schriftartenverwaltung: Verwendung von Arial Unicode MS für die meisten Sprachen und Malgun Gothic für koreanischen Text
- Komprimierungsvergleich: Erstellen sowohl komprimierter als auch unkomprimierter Versionen zur Demonstration der Dateigrößenunterschiede
2. Fensterverwaltung & Systemintegration
Das Programm enthält ausgeklügelte Fensteraufzählungsfunktionalität, die demonstriert:
- Systemfensteraufzählung: Verwendung der Windows API
EnumWindows
Funktion zur Iteration durch alle Top-Level-Fenster - Fenstertitel-Abgleich: Implementierung von Teilstring-Abgleich zur Identifizierung von Zielanwendungen
- Automatisierte Fensterschließung: Senden von
WM_CLOSE
Nachrichten zum Schließen von PDF-Viewern, die möglicherweise Dateien geöffnet haben - Konfliktprävention: Sicherstellen, dass keine Dateizugriffskonflikte beim Erstellen neuer PDF-Dateien auftreten
3. Fehlerbehandlung & Ressourcenverwaltung
Das Programm demonstriert bewährte Praktiken für:
- Speicherverwaltung: Ordnungsgemäße Erstellung und Entsorgung von Komponenteninstanzen
- Ausnahmesicherheit: Verwendung von try-finally Blöcken zur Sicherstellung der Ressourcenbereinigung
- Benutzerfeedback: Bereitstellung von Konsolenausgabe zur Information der Benutzer über den Programmfortschritt
Technische Implementierungsdetails:
Komprimierungstechnologie
Das Programm erstellt zwei Versionen derselben PDF, um die Wirksamkeit der FlateDecode-Komprimierung zu demonstrieren:
- Unkomprimierte Version: Schnellere Erstellungszeit, größere Dateigröße
- Komprimierte Version: Etwas längere Erstellungszeit, deutlich kleinere Dateigröße
Schriftarten-Behandlungsstrategie
Das Programm verwendet eine ausgeklügelte Schriftartenauswahlstrategie:
- Arial Unicode MS: Wird für die meisten Sprachen aufgrund ihrer breiten Zeichenunterstützung verwendet
- Malgun Gothic Semilight: Speziell für koreanische Textdarstellung ausgewählt
- Schriftarteneinbettung: Gewährleistet konsistentes Aussehen auf verschiedenen Systemen
Versionsübergreifende Kompatibilität
Der Code enthält bedingte Kompilierungsanweisungen zur Unterstützung sowohl moderner als auch älterer Delphi-Versionen:
- XE2+ Unterstützung: Verwendet namespaced Units (WinApi.Windows, System.SysUtils, etc.)
- Legacy-Unterstützung: Fällt auf traditionelle Unit-Namen für ältere Delphi-Versionen zurück
- EurekaLog Integration: Optionale Speicherleck-Erkennung und Debugging-Unterstützung
Bildungswert
Dieses HelloWorld-Beispiel dient mehreren Bildungszwecken:
- Komponenteneinführung: Bietet eine sanfte Einführung in die Verwendung der HotPDF Komponente
- Bewährte Praktiken: Demonstriert ordnungsgemäße Ressourcenverwaltung und Fehlerbehandlung
- Systemintegration: Zeigt, wie PDF-Generierung mit Windows-Systemoperationen integriert wird
- Internationalisierung: Veranschaulicht mehrsprachige Textbehandlung in PDF-Dokumenten
- Leistungsüberlegungen: Vergleicht verschiedene Komprimierungsstrategien und ihre Kompromisse
Erste Schritte
Um dieses Beispielprogramm auszuführen:
- Stellen Sie sicher, dass die HotPDF Komponente ordnungsgemäß in Ihrer Delphi IDE installiert ist
- Öffnen Sie die HelloWorld.dpr Projektdatei
- Kompilieren und führen Sie das Programm aus
- Das Programm erstellt automatisch zwei PDF-Dateien, die Komprimierungsunterschiede demonstrieren
- Untersuchen Sie die generierten Dateien, um die mehrsprachige Textdarstellung zu sehen und Dateigrößen zu vergleichen
Quellcode
Unten ist der vollständige, gut dokumentierte Quellcode für das HelloWorld Demonstrationsprogramm:
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 |
{************************************************************} // HotPDF PDF Komponente // Copyright(c)2007-2025, https://www.loslab.com {************************************************************} // HelloWorld Demo-Programm für HotPDF Komponente // Dieses Programm demonstriert grundlegende PDF-Erstellungsfunktionen // einschließlich mehrsprachiger Textunterstützung und Komprimierungsoptionen {************************************************************} program HelloWorld; {$APPTYPE CONSOLE} // Console application type {$I ..\..\..\Lib\HotPDF.inc} // Include HotPDF configuration file uses // EurekaLog Units für Speicherleck-Erkennung und Debugging (optional) {$IFDEF EurekaLog} EMemLeaks, // Speicherleck-Erkennung EResLeaks, // Ressourcenleck-Erkennung EDebugJCL, // JCL Debugging-Unterstützung EDebugExports, // Export von Debugging-Informationen EFixSafeCallException, // SafeCall Ausnahmebehandlung EMapWin32, // Win32 Mapping-Unterstützung EAppConsole, // Konsolenanwendungsunterstützung EDialogConsole, // Konsolen-Dialog-Unterstützung ExceptionLog7, // Ausnahme-Protokollierung {$ENDIF EurekaLog} // System-Units - verschiedene Namespaces für XE2+ vs. ältere Versionen {$IFDEF XE2+} WinApi.Windows, // Windows API Funktionen WinApi.Messages, // Windows Nachrichtenkonstanten System.SysUtils, // System-Hilfsprogramme System.Classes, // Basisklassen (TStringList, etc.) Vcl.Graphics, // Grafikunterstützung {$ELSE} Windows, // Windows API Funktionen (älteres Delphi) Messages, // Windows Nachrichtenkonstanten (älteres Delphi) SysUtils, // System-Hilfsprogramme (älteres Delphi) Classes, // Basisklassen (älteres Delphi) Graphics, // Grafikunterstützung (älteres Delphi) {$ENDIF} HPDFDoc; // HotPDF Hauptkomponenten-Unit // Erstellt eine PDF-Datei mit mehrsprachigem "Hallo Welt" Text // Parameter: // FileName: Name der Ausgabe-PDF-Datei // UseCompression: True für FlateDecode-Komprimierung, False für keine Komprimierung procedure CreatePDF(const FileName: string; UseCompression: Boolean); var HotPDF: THotPDF; // Haupt-HotPDF-Komponenteninstanz begin // HotPDF-Komponenteninstanz erstellen HotPDF := THotPDF.Create(nil); try // PDF-Eigenschaften konfigurieren HotPDF.AutoLaunch := true; // PDF nach Erstellung automatisch öffnen HotPDF.FileName := FileName; // Ausgabedateiname setzen // Komprimierung basierend auf Parameter setzen if UseCompression then begin HotPDF.Compression := cmFlateDecode; // FlateDecode-Komprimierung aktivieren WriteLn('Erstelle komprimierte PDF: ', FileName); end else begin HotPDF.Compression := cmNone; // Keine Komprimierung WriteLn('Erstelle unkomprimierte PDF: ', FileName); end; HotPDF.FontEmbedding := true; // Schriftarten für bessere Kompatibilität einbetten HotPDF.BeginDoc; // PDF-Dokumenterstellung starten // Unicode-Schriftart für mehrsprachige Textunterstützung setzen // Arial Unicode MS unterstützt die meisten Sprachen außer Koreanisch // procedure SetFont ( FontName: AnsiString; FontStyle: TFontStyles; ASize: Single; FontCharset: TFontCharset = DEFAULT_CHARSET; IsVertical: boolean = false); // DEFAULT_CHARSET: 1 - Schriftart wird basierend auf dem Namen ausgewählt. Wenn die beschriebene Schriftart auf dem System nicht verfügbar ist, ersetzt Windows sie durch eine andere Schriftart HotPDF.CurrentPage.SetFont('Arial Unicode MS', [], 12, 1, False); // "Hallo Welt" in mehreren Sprachen anzeigen // TextOut Parameter: (X, Y, Winkel, Text) HotPDF.CurrentPage.TextOut(80, 50, 0, 'Hello, Delphi PDF world!'); // English HotPDF.CurrentPage.TextOut(80, 70, 0, 'Hola, mundo Delphi PDF!'); // Spanish HotPDF.CurrentPage.TextOut(80, 90, 0, 'Hallo, Delphi PDF Welt!'); // German HotPDF.CurrentPage.TextOut(80, 110, 0, 'Bonjour, monde PDF Delphi!'); // French HotPDF.CurrentPage.TextOut(80, 130, 0, 'Ciao, mondo Delphi PDF!'); // Italian HotPDF.CurrentPage.TextOut(80, 150, 0, 'Olá, mundo Delphi PDF!'); // Portuguese HotPDF.CurrentPage.TextOut(80, 170, 0, 'Здравствуйте, Delphi PDF мир!'); // Russian HotPDF.CurrentPage.TextOut(80, 190, 0, 'こんにちは、Delphi PDFの世界!'); // Japanese HotPDF.CurrentPage.TextOut(80, 210, 0, 'Merhaba, Delphi PDF dünyası!'); // Turkish HotPDF.CurrentPage.TextOut(80, 230, 0, '你好,Delphi PDF世界'); // Chinese // Koreanischer Text erfordert eine spezielle koreanische Schriftart // Arial Unicode MS unterstützt koreanische Zeichen nicht richtig HotPDF.CurrentPage.SetFont('Malgun Gothic Semilight', [], 12, 0, False); HotPDF.CurrentPage.TextOut(80, 250, 0, '여보세요, Delphi PDF 세계!'); // Korean HotPDF.EndDoc; // PDF-Dokument fertigstellen und speichern WriteLn('PDF erfolgreich erstellt: ', FileName); finally HotPDF.Free; // HotPDF-Komponente bereinigen end; end; // Globale Variablen für Fensteraufzählung und PDF-Erstellung var Title: String; // Einzelner Titelstring (in der aktuellen Implementierung nicht verwendet) Titles: TStrings; // Liste der zu suchenden Fenstertitel Window: HWND; // Fensterhandle (in der aktuellen Implementierung nicht verwendet) WindowText: array[0..255] of Char; // Puffer für Fenstertext (in der aktuellen Implementierung nicht verwendet) WindowTitle: String; // Fenstertitelstring (in der aktuellen Implementierung nicht verwendet) I: Integer; // Schleifenzähler (in der aktuellen Implementierung nicht verwendet) // Callback-Funktion für EnumWindows API // Diese Funktion wird für jedes Top-Level-Fenster im System aufgerufen // Parameter: // hWnd: Handle zum aktuellen aufgezählten Fenster // lParam: Benutzerdefinierte Daten (in unserem Fall Zeiger auf TStrings mit Zieltiteln) // Rückgabe: True, um die Aufzählung fortzusetzen, False, um sie zu beenden function EnumWindowsProc(hWnd: HWND; lParam: LPARAM): BOOL; stdcall; var Titles: TStrings; // Liste der Zielfenstertitel I: Integer; // Schleifenzähler WindowText: array[0..255] of Char; // Puffer zum Speichern des Fenstertexts WindowTitle: String; // Titel des aktuellen Fensters als String begin Result := True; // Aufzählung standardmäßig fortsetzen Titles := TStrings(lParam); // lParam zurück zu TStrings casten // Fenstertiteltext abrufen if GetWindowText(hWnd, WindowText, SizeOf(WindowText)) > 0 then begin WindowTitle := String(WindowText); // Char-Array zu String konvertieren // Prüfen, ob Fenstertitel einen unserer Zielstrings enthält for I := 0 to Titles.Count - 1 do begin // Pos-Funktion verwenden, um zu prüfen, ob Zielstring im Fenstertitel enthalten ist if Pos(Titles[I], WindowTitle) > 0 then begin // WM_CLOSE-Nachricht senden, um das Fenster zu schließen PostMessage(hWnd, WM_CLOSE, 0, 0); Break; // Schleife nach dem ersten Treffer verlassen end; end; end; end; // Hauptprogrammausführung beginnt hier begin // Alle vorhandenen PDF-Dateien schließen, die möglicherweise in PDF-Viewern geöffnet sind // Dies verhindert Dateizugriffskonflikte beim Erstellen neuer PDFs mit denselben Namen Titles := TStringList.Create; try // Liste der zu suchenden Fenstertitel-Teilstrings definieren // Alle Fenster, die diese Strings enthalten, werden geschlossen // Dies schließt Adobe und Foxit PDF Reader & Editor und viele andere PDF-Apps Titles.CommaText := '"HelloWorld-compressed.pdf", "HelloWorld-uncompressed.pdf", "Foxit"'; // Alle Top-Level-Fenster aufzählen und passende schließen // EnumWindows ruft unsere Callback-Funktion für jedes Fenster auf EnumWindows(@EnumWindowsProc, LPARAM(Titles)); finally Titles.Free; // String-Liste bereinigen end; // Programmkopf anzeigen WriteLn('=== HotPDF Komprimierungstest ==='); WriteLn('Diese Demo erstellt zwei PDF-Dateien, um Komprimierungsunterschiede zu demonstrieren.'); WriteLn(''); // Zuerst unkomprimierte PDF erstellen // Diese Version wird größer, aber schneller zu erstellen sein CreatePDF('HelloWorld-uncompressed.pdf', False); // Zweitens komprimierte PDF erstellen // Diese Version wird kleiner, aber etwas länger zum Erstellen dauern CreatePDF('HelloWorld-compressed.pdf', True); // Abschlussnachricht anzeigen WriteLn(''); WriteLn('Alle PDF-Dateien erfolgreich erstellt!'); WriteLn('Bitte überprüfen Sie die Dateien, um komprimierte vs. unkomprimierte Versionen zu vergleichen.'); WriteLn('Sie können die Dateigrößen untersuchen, um den Komprimierungseffekt zu sehen.'); WriteLn(''); WriteLn('Drücken Sie Enter zum Beenden...'); ReadLn; // Auf Benutzereingabe warten, bevor die Konsole geschlossen wird end. |
Discover more from losLab Software Development
Subscribe to get the latest posts sent to your email.