Hello World dal Componente Delphi HotPDF
Benvenuti alla guida completa per il programma dimostrativo HelloWorld del Componente Delphi HotPDF!
Informazioni sul Componente HotPDF
Il Componente HotPDF è una libreria di elaborazione PDF potente e versatile progettata specificamente per sviluppatori Delphi e C++Builder. Questo componente completo fornisce un’API estensiva che consente agli sviluppatori di creare, manipolare e modificare documenti PDF con facilità e precisione.
Caratteristiche Principali del Componente HotPDF:
- Creazione e Generazione PDF: Crea documenti PDF da zero con controllo completo su layout, formattazione e contenuto
- Supporto Testo e Grafica: Aggiungi testo, immagini, forme e grafica complessa alle pagine PDF
- Supporto Multilingue: Supporto Unicode completo per il rendering di testo internazionale
- Gestione Font: Incorpora font per un aspetto del documento coerente su diversi sistemi
- Opzioni di Compressione: Algoritmi di compressione multipli per ottimizzare le dimensioni del file
- Funzionalità di Sicurezza: Crittografia del documento, protezione con password e controlli di autorizzazione
- Manipolazione Documenti: Unisci, dividi e modifica documenti PDF esistenti
- Supporto Tabelle e Moduli: Crea tabelle complesse e moduli interattivi
Panoramica del Programma HelloWorld.dpr
Il programma di esempio HelloWorld.dpr
serve come eccellente introduzione alla funzionalità più basilare e importante del Componente HotPDF: La funzione TexOut. Questo programma dimostrativo mostra anche la funzionalità di base per la creazione di PDF.
Funzionalità Principali:
1. Creazione di Documenti PDF
La funzione principale del programma è generare documenti PDF contenenti testo “Hello World” multilingue. La procedura CreatePDF
dimostra:
- Inizializzazione del Componente: Configurazione e setup appropriati del componente THotPDF
- Proprietà del Documento: Impostazione di metadati come opzioni di compressione e incorporamento font
- Rendering Testo Multilingue: Visualizzazione di testo in 11 lingue diverse inclusi inglese, spagnolo, tedesco, francese, italiano, portoghese, russo, giapponese, turco, cinese e coreano
- Gestione Font: Utilizzo di Arial Unicode MS per la maggior parte delle lingue e Malgun Gothic per il testo coreano
- Confronto Compressione: Creazione di versioni sia compresse che non compresse per dimostrare le differenze nelle dimensioni del file
2. Gestione Finestre e Integrazione Sistema
Il programma include funzionalità sofisticate di enumerazione finestre che dimostrano:
- Enumerazione Finestre di Sistema: Utilizzo dell’API Windows
EnumWindows
per iterare attraverso tutte le finestre di livello superiore - Corrispondenza Titoli Finestre: Implementazione di corrispondenza sottostringhe per identificare applicazioni target
- Chiusura Automatica Finestre: Invio di messaggi
WM_CLOSE
per chiudere visualizzatori PDF che potrebbero avere file aperti - Prevenzione Conflitti: Assicurarsi che non si verifichino conflitti di accesso ai file durante la creazione di nuovi file PDF
3. Gestione Errori e Gestione Risorse
Il programma dimostra le migliori pratiche per:
- Gestione Memoria: Creazione e smaltimento appropriati delle istanze dei componenti
- Sicurezza Eccezioni: Utilizzo di blocchi try-finally per garantire la pulizia delle risorse
- Feedback Utente: Fornire output console per informare gli utenti del progresso del programma
Dettagli di Implementazione Tecnica:
Tecnologia di Compressione
Il programma crea due versioni dello stesso PDF per dimostrare l’efficacia della compressione FlateDecode:
- Versione Non Compressa: Tempo di creazione più veloce, dimensione file maggiore
- Versione Compressa: Tempo di creazione leggermente più lungo, dimensione file significativamente minore
Strategia di Gestione Font
Il programma impiega una strategia sofisticata di selezione font:
- Arial Unicode MS: Utilizzato per la maggior parte delle lingue grazie al suo ampio supporto caratteri
- Malgun Gothic Semilight: Specificamente scelto per il rendering del testo coreano
- Incorporamento Font: Garantisce aspetto coerente su diversi sistemi
Compatibilità Cross-Version
Il codice include direttive di compilazione condizionale per supportare sia versioni moderne che legacy di Delphi:
- Supporto XE2+: Utilizza unità con namespace (WinApi.Windows, System.SysUtils, ecc.)
- Supporto Legacy: Ricade sui nomi di unità tradizionali per versioni Delphi più vecchie
- Integrazione EurekaLog: Supporto opzionale per rilevamento perdite di memoria e debugging
Valore Educativo
Questo esempio HelloWorld serve a molteplici scopi educativi:
- Introduzione al Componente: Fornisce un’introduzione gentile all’utilizzo del Componente HotPDF
- Migliori Pratiche: Dimostra gestione appropriata delle risorse e gestione errori
- Integrazione Sistema: Mostra come integrare la generazione PDF con operazioni del sistema Windows
- Internazionalizzazione: Illustra la gestione del testo multilingue nei documenti PDF
- Considerazioni Prestazioni: Confronta diverse strategie di compressione e i loro compromessi
Iniziare
Per eseguire questo programma di esempio:
- Assicurarsi che il Componente HotPDF sia installato correttamente nel vostro IDE Delphi
- Aprire il file di progetto HelloWorld.dpr
- Compilare ed eseguire il programma
- Il programma creerà automaticamente due file PDF dimostrando le differenze di compressione
- Esaminare i file generati per vedere il rendering del testo multilingue e confrontare le dimensioni dei file
Codice Sorgente
Di seguito è riportato il codice sorgente completo e ben documentato per il programma dimostrativo 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 |
{************************************************************} // Componente HotPDF PDF // Copyright(c)2007-2025, https://www.loslab.com {************************************************************} // Programma Demo HelloWorld per il Componente HotPDF // Questo programma dimostra le capacità di base di creazione PDF // incluso il supporto testo multilingue e le opzioni di compressione {************************************************************} program HelloWorld; {$APPTYPE CONSOLE} // Tipo di applicazione console {$I ..\..\..\Lib\HotPDF.inc} // Include file di configurazione HotPDF uses // Unità EurekaLog per rilevamento perdite di memoria e debugging (opzionale) {$IFDEF EurekaLog} EMemLeaks, // Rilevamento perdite di memoria EResLeaks, // Rilevamento perdite di risorse EDebugJCL, // Supporto debugging JCL EDebugExports, // Esporta informazioni di debugging EFixSafeCallException, // Gestione eccezioni SafeCall EMapWin32, // Supporto mapping Win32 EAppConsole, // Supporto applicazione console EDialogConsole, // Supporto dialogo console ExceptionLog7, // Logging eccezioni {$ENDIF EurekaLog} // Unità di sistema - namespace diversi per XE2+ vs versioni più vecchie {$IFDEF XE2+} WinApi.Windows, // Funzioni API Windows WinApi.Messages, // Costanti messaggi Windows System.SysUtils, // Utilità di sistema System.Classes, // Classi base (TStringList, ecc.) Vcl.Graphics, // Supporto grafica {$ELSE} Windows, // Funzioni API Windows (Delphi più vecchio) Messages, // Costanti messaggi Windows (Delphi più vecchio) SysUtils, // Utilità di sistema (Delphi più vecchio) Classes, // Classi base (Delphi più vecchio) Graphics, // Supporto grafica (Delphi più vecchio) {$ENDIF} HPDFDoc; // Unità componente principale HotPDF // Crea un file PDF con testo "Hello World" multilingue // Parametri: // FileName: Nome file PDF di output // UseCompression: True per abilitare compressione FlateDecode, False per nessuna compressione procedure CreatePDF(const FileName: string; UseCompression: Boolean); var HotPDF: THotPDF; // Istanza componente principale HotPDF begin // Crea istanza componente HotPDF HotPDF := THotPDF.Create(nil); try // Configura proprietà PDF HotPDF.AutoLaunch := true; // Apri automaticamente PDF dopo la creazione HotPDF.FileName := FileName; // Imposta nome file di output // Imposta compressione basata sul parametro if UseCompression then begin HotPDF.Compression := cmFlateDecode; // Abilita compressione FlateDecode WriteLn('Creazione PDF compresso: ', FileName); end else begin HotPDF.Compression := cmNone; // Nessuna compressione WriteLn('Creazione PDF non compresso: ', FileName); end; HotPDF.FontEmbedding := true; // Incorpora font per migliore compatibilità HotPDF.BeginDoc; // Inizia creazione documento PDF // Imposta font Unicode per supporto testo multilingue // Arial Unicode MS supporta la maggior parte delle lingue eccetto il coreano // procedure SetFont ( FontName: AnsiString; FontStyle: TFontStyles; ASize: Single; FontCharset: TFontCharset = DEFAULT_CHARSET; IsVertical: boolean = false); // DEFAULT_CHARSET: 1 - Il font è scelto basato sul Nome. Se il font descritto non è disponibile sul sistema, Windows sostituirà un altro font HotPDF.CurrentPage.SetFont('Arial Unicode MS', [], 12, 1, False); // Visualizza "Hello World" in più lingue // Parametri TextOut: (X, Y, Angolo, Testo) HotPDF.CurrentPage.TextOut(80, 50, 0, 'Hello, Delphi PDF world!'); // Inglese HotPDF.CurrentPage.TextOut(80, 70, 0, 'Hola, mundo Delphi PDF!'); // Spagnolo HotPDF.CurrentPage.TextOut(80, 90, 0, 'Hallo, Delphi PDF Welt!'); // Tedesco HotPDF.CurrentPage.TextOut(80, 110, 0, 'Bonjour, monde PDF Delphi!'); // Francese HotPDF.CurrentPage.TextOut(80, 130, 0, 'Ciao, mondo Delphi PDF!'); // Italiano HotPDF.CurrentPage.TextOut(80, 150, 0, 'Olá, mundo Delphi PDF!'); // Portoghese HotPDF.CurrentPage.TextOut(80, 170, 0, 'Здравствуйте, Delphi PDF мир!'); // Russo HotPDF.CurrentPage.TextOut(80, 190, 0, 'こんにちは、Delphi PDFの世界!'); // Giapponese HotPDF.CurrentPage.TextOut(80, 210, 0, 'Merhaba, Delphi PDF dünyası!'); // Turco HotPDF.CurrentPage.TextOut(80, 230, 0, '你好,Delphi PDF世界'); // Cinese // Il testo coreano richiede un font coreano specifico // Arial Unicode MS non supporta correttamente i caratteri coreani HotPDF.CurrentPage.SetFont('Malgun Gothic Semilight', [], 12, 0, False); HotPDF.CurrentPage.TextOut(80, 250, 0, '여보세요, Delphi PDF 세계!'); // Coreano HotPDF.EndDoc; // Finalizza e salva il documento PDF WriteLn('PDF creato con successo: ', FileName); finally HotPDF.Free; // Pulisci componente HotPDF end; end; // Variabili globali per enumerazione finestre e creazione PDF var Title: String; // Stringa titolo individuale (non utilizzata nell'implementazione corrente) Titles: TStrings; // Lista di titoli finestre da cercare Window: HWND; // Handle finestra (non utilizzato nell'implementazione corrente) WindowText: array[0..255] of Char; // Buffer per testo finestra (non utilizzato nell'implementazione corrente) WindowTitle: String; // Stringa titolo finestra (non utilizzata nell'implementazione corrente) I: Integer; // Contatore loop (non utilizzato nell'implementazione corrente) // Funzione callback per API EnumWindows // Questa funzione è chiamata per ogni finestra di livello superiore nel sistema // Parametri: // hWnd: Handle alla finestra corrente che viene enumerata // lParam: Dati definiti dall'utente (nel nostro caso, puntatore a TStrings con titoli target) // Restituisce: True per continuare enumerazione, False per fermare function EnumWindowsProc(hWnd: HWND; lParam: LPARAM): BOOL; stdcall; var Titles: TStrings; // Lista di titoli finestre target I: Integer; // Contatore loop WindowText: array[0..255] of Char; // Buffer per memorizzare testo finestra WindowTitle: String; // Titolo della finestra corrente come stringa begin Result := True; // Continua enumerazione per default Titles := TStrings(lParam); // Converte lParam di nuovo a TStrings // Ottieni il testo del titolo della finestra if GetWindowText(hWnd, WindowText, SizeOf(WindowText)) > 0 then begin WindowTitle := String(WindowText); // Converti array char a stringa // Controlla se il titolo della finestra contiene una delle nostre stringhe target for I := 0 to Titles.Count - 1 do begin // Usa funzione Pos per controllare se la stringa target è contenuta nel titolo finestra if Pos(Titles[I], WindowTitle) > 0 then begin // Invia messaggio WM_CLOSE per chiudere la finestra PostMessage(hWnd, WM_CLOSE, 0, 0); Break; // Esci dal loop dopo aver trovato la prima corrispondenza end; end; end; end; // L'esecuzione del programma principale inizia qui begin // Chiudi eventuali file PDF esistenti che potrebbero essere aperti nei visualizzatori PDF // Questo previene conflitti di accesso ai file quando si creano nuovi PDF con gli stessi nomi Titles := TStringList.Create; try // Definisci lista di sottostringhe di titoli finestre da cercare // Qualsiasi finestra contenente queste stringhe sarà chiusa // Questo chiuderà Adobe e Foxit PDF reader & editor e molte altre app PDF Titles.CommaText := '"HelloWorld-compressed.pdf", "HelloWorld-uncompressed.pdf", "Foxit"'; // Enumera tutte le finestre di livello superiore e chiudi quelle corrispondenti // EnumWindows chiama la nostra funzione callback per ogni finestra EnumWindows(@EnumWindowsProc, LPARAM(Titles)); finally Titles.Free; // Pulisci lista stringhe end; // Visualizza intestazione programma WriteLn('=== Test Compressione HotPDF ==='); WriteLn('Questa demo crea due file PDF per dimostrare le differenze di compressione.'); WriteLn(''); // Crea prima PDF non compresso // Questa versione sarà più grande ma più veloce da creare CreatePDF('HelloWorld-uncompressed.pdf', False); // Crea secondo PDF compresso // Questa versione sarà più piccola ma richiede leggermente più tempo per creare CreatePDF('HelloWorld-compressed.pdf', True); // Visualizza messaggio di completamento WriteLn(''); WriteLn('Tutti i file PDF creati con successo!'); WriteLn('Si prega di controllare i file per confrontare le versioni compresse vs non compresse.'); WriteLn('Puoi esaminare le dimensioni dei file per vedere l\'effetto della compressione.'); WriteLn(''); WriteLn('Premi Invio per uscire...'); ReadLn; // Aspetta input utente prima di chiudere console end. |
Discover more from losLab Software Development
Subscribe to get the latest posts sent to your email.