Olá Mundo do Componente Delphi HotPDF
Bem-vindo ao guia abrangente para o programa de demonstração HelloWorld do Componente Delphi HotPDF!
Sobre o Componente HotPDF
O Componente HotPDF é uma biblioteca de processamento de PDF poderosa e versátil projetada especificamente para desenvolvedores Delphi e C++Builder. Este componente abrangente fornece uma API extensa que permite aos desenvolvedores criar, manipular e modificar documentos PDF com facilidade e precisão.
Principais Recursos do Componente HotPDF:
- Criação e Geração de PDF: Crie documentos PDF do zero com controle total sobre layout, formatação e conteúdo
- Suporte a Texto e Gráficos: Adicione texto, imagens, formas e gráficos complexos às páginas PDF
- Suporte Multilíngue: Suporte completo ao Unicode para renderização de texto internacional
- Gerenciamento de Fontes: Incorpore fontes para aparência consistente do documento em diferentes sistemas
- Opções de Compressão: Múltiplos algoritmos de compressão para otimizar o tamanho do arquivo
- Recursos de Segurança: Criptografia de documentos, proteção por senha e controles de permissão
- Manipulação de Documentos: Mescle, divida e modifique documentos PDF existentes
- Suporte a Tabelas e Formulários: Crie tabelas complexas e formulários interativos
Visão Geral do Programa HelloWorld.dpr
O programa de exemplo HelloWorld.dpr
serve como uma excelente introdução ao recurso mais básico e importante do Componente HotPDF: A função TexOut. Este programa de demonstração também mostra a funcionalidade básica de criação de PDF.
Funcionalidade Principal:
1. Criação de Documento PDF
A função principal do programa é gerar documentos PDF contendo texto “Olá Mundo” multilíngue. O procedimento CreatePDF
demonstra:
- Inicialização do Componente: Configuração e configuração adequada do componente THotPDF
- Propriedades do Documento: Definição de metadados como opções de compressão e incorporação de fontes
- Renderização de Texto Multilíngue: Exibição de texto em 11 idiomas diferentes incluindo inglês, espanhol, alemão, francês, italiano, português, russo, japonês, turco, chinês e coreano
- Gerenciamento de Fontes: Usando Arial Unicode MS para a maioria dos idiomas e Malgun Gothic para texto coreano
- Comparação de Compressão: Criação de versões comprimidas e não comprimidas para demonstrar diferenças de tamanho de arquivo
2. Gerenciamento de Janelas e Integração do Sistema
O programa inclui funcionalidade sofisticada de enumeração de janelas que demonstra:
- Enumeração de Janelas do Sistema: Usando a função da API do Windows
EnumWindows
para iterar através de todas as janelas de nível superior - Correspondência de Título de Janela: Implementação de correspondência de substring para identificar aplicações alvo
- Fechamento Automatizado de Janelas: Envio de mensagens
WM_CLOSE
para fechar visualizadores de PDF que possam ter arquivos abertos - Prevenção de Conflitos: Garantindo que não ocorram conflitos de acesso a arquivos ao criar novos arquivos PDF
3. Tratamento de Erros e Gerenciamento de Recursos
O programa demonstra as melhores práticas para:
- Gerenciamento de Memória: Criação e descarte adequados de instâncias de componentes
- Segurança de Exceções: Uso de blocos try-finally para garantir limpeza de recursos
- Feedback do Usuário: Fornecimento de saída no console para informar os usuários sobre o progresso do programa
Detalhes de Implementação Técnica:
Tecnologia de Compressão
O programa cria duas versões do mesmo PDF para demonstrar a eficácia da compressão FlateDecode:
- Versão Não Comprimida: Tempo de criação mais rápido, tamanho de arquivo maior
- Versão Comprimida: Tempo de criação ligeiramente maior, tamanho de arquivo significativamente menor
Estratégia de Manipulação de Fontes
O programa emprega uma estratégia sofisticada de seleção de fontes:
- Arial Unicode MS: Usado para a maioria dos idiomas devido ao seu amplo suporte de caracteres
- Malgun Gothic Semilight: Especificamente escolhido para renderização de texto coreano
- Incorporação de Fontes: Garante aparência consistente em diferentes sistemas
Compatibilidade Entre Versões
O código inclui diretivas de compilação condicional para suportar versões modernas e legadas do Delphi:
- Suporte XE2+: Usa unidades com namespace (WinApi.Windows, System.SysUtils, etc.)
- Suporte Legado: Volta para nomes de unidades tradicionais para versões mais antigas do Delphi
- Integração EurekaLog: Suporte opcional para detecção de vazamentos de memória e depuração
Valor Educacional
Este exemplo HelloWorld serve a múltiplos propósitos educacionais:
- Introdução ao Componente: Fornece uma introdução suave ao uso do Componente HotPDF
- Melhores Práticas: Demonstra gerenciamento adequado de recursos e tratamento de erros
- Integração do Sistema: Mostra como integrar geração de PDF com operações do sistema Windows
- Internacionalização: Ilustra manipulação de texto multilíngue em documentos PDF
- Considerações de Performance: Compara diferentes estratégias de compressão e seus trade-offs
Começando
Para executar este programa de exemplo:
- Certifique-se de que o Componente HotPDF está adequadamente instalado em seu IDE Delphi
- Abra o arquivo de projeto HelloWorld.dpr
- Compile e execute o programa
- O programa criará automaticamente dois arquivos PDF demonstrando diferenças de compressão
- Examine os arquivos gerados para ver a renderização de texto multilíngue e compare os tamanhos dos arquivos
Código Fonte
Abaixo está o código fonte completo e bem documentado para o programa de demonstração 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 {************************************************************} // Programa de Demonstração HelloWorld para Componente HotPDF // Este programa demonstra capacidades básicas de criação de PDF // incluindo suporte a texto multilíngue e opções de compressão {************************************************************} program HelloWorld; {$APPTYPE CONSOLE} // Tipo de aplicação console {$I ..\..\..\Lib\HotPDF.inc} // Incluir arquivo de configuração HotPDF uses // Unidades EurekaLog para detecção de vazamentos de memória e depuração (opcional) {$IFDEF EurekaLog} EMemLeaks, // Detecção de vazamentos de memória EResLeaks, // Detecção de vazamentos de recursos EDebugJCL, // Suporte de depuração JCL EDebugExports, // Exportar informações de depuração EFixSafeCallException, // Tratamento de exceções SafeCall EMapWin32, // Suporte de mapeamento Win32 EAppConsole, // Suporte de aplicação console EDialogConsole, // Suporte de diálogo console ExceptionLog7, // Log de exceções {$ENDIF EurekaLog} // Unidades do sistema - diferentes namespaces para XE2+ vs versões mais antigas {$IFDEF XE2+} WinApi.Windows, // Funções da API do Windows WinApi.Messages, // Constantes de mensagens do Windows System.SysUtils, // Utilitários do sistema System.Classes, // Classes base (TStringList, etc.) Vcl.Graphics, // Suporte gráfico {$ELSE} Windows, // Funções da API do Windows (Delphi mais antigo) Messages, // Constantes de mensagens do Windows (Delphi mais antigo) SysUtils, // Utilitários do sistema (Delphi mais antigo) Classes, // Classes base (Delphi mais antigo) Graphics, // Suporte gráfico (Delphi mais antigo) {$ENDIF} HPDFDoc; // Unidade principal do componente HotPDF // Cria um arquivo PDF com texto "Olá Mundo" multilíngue // Parâmetros: // FileName: Nome do arquivo PDF de saída // UseCompression: True para habilitar compressão FlateDecode, False para sem compressão procedure CreatePDF(const FileName: string; UseCompression: Boolean); var HotPDF: THotPDF; // Instância principal do componente HotPDF begin // Criar instância do componente HotPDF HotPDF := THotPDF.Create(nil); try // Configurar propriedades do PDF HotPDF.AutoLaunch := true; // Abrir automaticamente o PDF após criação HotPDF.FileName := FileName; // Definir nome do arquivo de saída // Definir compressão baseada no parâmetro if UseCompression then begin HotPDF.Compression := cmFlateDecode; // Habilitar compressão FlateDecode WriteLn('Criando PDF comprimido: ', FileName); end else begin HotPDF.Compression := cmNone; // Sem compressão WriteLn('Criando PDF não comprimido: ', FileName); end; HotPDF.FontEmbedding := true; // Incorporar fontes para melhor compatibilidade HotPDF.BeginDoc; // Iniciar criação do documento PDF // Definir fonte Unicode para suporte a texto multilíngue // Arial Unicode MS suporta a maioria dos idiomas exceto coreano // procedure SetFont ( FontName: AnsiString; FontStyle: TFontStyles; ASize: Single; FontCharset: TFontCharset = DEFAULT_CHARSET; IsVertical: boolean = false); // DEFAULT_CHARSET: 1 - Fonte é escolhida baseada no Nome. Se a fonte descrita não estiver disponível no sistema, Windows substituirá por outra fonte HotPDF.CurrentPage.SetFont('Arial Unicode MS', [], 12, 1, False); // Exibir "Olá Mundo" em múltiplos idiomas // Parâmetros TextOut: (X, Y, Ângulo, Texto) HotPDF.CurrentPage.TextOut(80, 50, 0, 'Hello, Delphi PDF world!'); // Inglês HotPDF.CurrentPage.TextOut(80, 70, 0, 'Hola, mundo Delphi PDF!'); // Espanhol HotPDF.CurrentPage.TextOut(80, 90, 0, 'Hallo, Delphi PDF Welt!'); // Alemão HotPDF.CurrentPage.TextOut(80, 110, 0, 'Bonjour, monde PDF Delphi!'); // Francês HotPDF.CurrentPage.TextOut(80, 130, 0, 'Ciao, mondo Delphi PDF!'); // Italiano HotPDF.CurrentPage.TextOut(80, 150, 0, 'Olá, mundo Delphi PDF!'); // Português HotPDF.CurrentPage.TextOut(80, 170, 0, 'Здравствуйте, Delphi PDF мир!'); // Russo HotPDF.CurrentPage.TextOut(80, 190, 0, 'こんにちは、Delphi PDFの世界!'); // Japonês HotPDF.CurrentPage.TextOut(80, 210, 0, 'Merhaba, Delphi PDF dünyası!'); // Turco HotPDF.CurrentPage.TextOut(80, 230, 0, '你好,Delphi PDF世界'); // Chinês // Texto coreano requer uma fonte coreana específica // Arial Unicode MS não suporta adequadamente caracteres coreanos HotPDF.CurrentPage.SetFont('Malgun Gothic Semilight', [], 12, 0, False); HotPDF.CurrentPage.TextOut(80, 250, 0, '여보세요, Delphi PDF 세계!'); // Coreano HotPDF.EndDoc; // Finalizar e salvar o documento PDF WriteLn('PDF criado com sucesso: ', FileName); finally HotPDF.Free; // Limpar componente HotPDF end; end; // Variáveis globais para enumeração de janelas e criação de PDF var Title: String; // String de título individual (não usado na implementação atual) Titles: TStrings; // Lista de títulos de janelas para procurar Window: HWND; // Handle da janela (não usado na implementação atual) WindowText: array[0..255] of Char; // Buffer para texto da janela (não usado na implementação atual) WindowTitle: String; // String do título da janela (não usado na implementação atual) I: Integer; // Contador de loop (não usado na implementação atual) // Função callback para API EnumWindows // Esta função é chamada para cada janela de nível superior no sistema // Parâmetros: // hWnd: Handle para a janela atual sendo enumerada // lParam: Dados definidos pelo usuário (no nosso caso, ponteiro para TStrings com títulos alvo) // Retorna: True para continuar enumeração, False para parar function EnumWindowsProc(hWnd: HWND; lParam: LPARAM): BOOL; stdcall; var Titles: TStrings; // Lista de títulos de janelas alvo I: Integer; // Contador de loop WindowText: array[0..255] of Char; // Buffer para armazenar texto da janela WindowTitle: String; // Título da janela atual como string begin Result := True; // Continuar enumeração por padrão Titles := TStrings(lParam); // Converter lParam de volta para TStrings // Obter o texto do título da janela if GetWindowText(hWnd, WindowText, SizeOf(WindowText)) > 0 then begin WindowTitle := String(WindowText); // Converter array de char para string // Verificar se o título da janela contém alguma de nossas strings alvo for I := 0 to Titles.Count - 1 do begin // Usar função Pos para verificar se string alvo está contida no título da janela if Pos(Titles[I], WindowTitle) > 0 then begin // Enviar mensagem WM_CLOSE para fechar a janela PostMessage(hWnd, WM_CLOSE, 0, 0); Break; // Sair do loop após encontrar primeira correspondência end; end; end; end; // Execução principal do programa começa aqui begin // Fechar quaisquer arquivos PDF existentes que possam estar abertos em visualizadores de PDF // Isso previne conflitos de acesso a arquivos ao criar novos PDFs com os mesmos nomes Titles := TStringList.Create; try // Definir lista de substrings de títulos de janelas para procurar // Qualquer janela contendo essas strings será fechada // Isso fechará Adobe e Foxit PDF reader & editor e muitos outros aplicativos PDF Titles.CommaText := '"HelloWorld-compressed.pdf", "HelloWorld-uncompressed.pdf", "Foxit"'; // Enumerar todas as janelas de nível superior e fechar as correspondentes // EnumWindows chama nossa função callback para cada janela EnumWindows(@EnumWindowsProc, LPARAM(Titles)); finally Titles.Free; // Limpar lista de strings end; // Exibir cabeçalho do programa WriteLn('=== Teste de Compressão HotPDF ==='); WriteLn('Esta demonstração cria dois arquivos PDF para demonstrar diferenças de compressão.'); WriteLn(''); // Criar PDF não comprimido primeiro // Esta versão será maior mas mais rápida para criar CreatePDF('HelloWorld-uncompressed.pdf', False); // Criar PDF comprimido segundo // Esta versão será menor mas leva ligeiramente mais tempo para criar CreatePDF('HelloWorld-compressed.pdf', True); // Exibir mensagem de conclusão WriteLn(''); WriteLn('Todos os arquivos PDF criados com sucesso!'); WriteLn('Por favor, verifique os arquivos para comparar versões comprimidas vs não comprimidas.'); WriteLn('Você pode examinar os tamanhos dos arquivos para ver o efeito da compressão.'); WriteLn(''); WriteLn('Pressione Enter para sair...'); ReadLn; // Aguardar entrada do usuário antes de fechar o console end. |
Discover more from losLab Software Development
Subscribe to get the latest posts sent to your email.