Categories: PDF Programming

Delphi HotPDF Component Hello World Sample

Hello World from Delphi HotPDF Component

Welcome to the comprehensive guide for the Delphi HotPDF Component HelloWorld demonstration program!

About HotPDF Component

HotPDF Component is a powerful and versatile PDF processing library designed specifically for Delphi and C++Builder developers. This comprehensive component provides an extensive API that enables developers to create, manipulate, and modify PDF documents with ease and precision.

Key Features of HotPDF Component:

  • PDF Creation & Generation: Create PDF documents from scratch with full control over layout, formatting, and content
  • Text & Graphics Support: Add text, images, shapes, and complex graphics to PDF pages
  • Multilingual Support: Full Unicode support for international text rendering
  • Font Management: Embed fonts for consistent document appearance across different systems
  • Compression Options: Multiple compression algorithms to optimize file size
  • Security Features: Document encryption, password protection, and permission controls
  • Document Manipulation: Merge, split, and modify existing PDF documents
  • Table & Form Support: Create complex tables and interactive forms

HelloWorld.dpr Program Overview

The HelloWorld.dpr example program serves as an excellent introduction to the HotPDF Component’s
most basic and important feature: The TexOut function. This demonstration program
also showcases the basic PDF creation functionality.

Core Functionality:

1. PDF Document Creation

The program’s primary function is to generate PDF documents containing multilingual “Hello World” text. The CreatePDF procedure demonstrates:

  • Component Initialization: Proper setup and configuration of the THotPDF component
  • Document Properties: Setting metadata such as compression options and font embedding
  • Multilingual Text Rendering: Displaying text in 11 different languages including English, Spanish, German, French, Italian, Portuguese, Russian, Japanese, Turkish, Chinese, and Korean
  • Font Management: Using Arial Unicode MS for most languages and Malgun Gothic for Korean text
  • Compression Comparison: Creating both compressed and uncompressed versions to demonstrate file size differences

2. Window Management & System Integration

The program includes sophisticated window enumeration functionality that demonstrates:

  • System Window Enumeration: Using the Windows API EnumWindows function to iterate through all top-level windows
  • Window Title Matching: Implementing substring matching to identify target applications
  • Automated Window Closure: Sending WM_CLOSE messages to close PDF viewers that might have files open
  • Conflict Prevention: Ensuring no file access conflicts occur when creating new PDF files

3. Error Handling & Resource Management

The program demonstrates best practices for:

  • Memory Management: Proper creation and disposal of component instances
  • Exception Safety: Using try-finally blocks to ensure resource cleanup
  • User Feedback: Providing console output to inform users of program progress

Technical Implementation Details:

Compression Technology

The program creates two versions of the same PDF to demonstrate the effectiveness of FlateDecode compression:

  • Uncompressed Version: Faster creation time, larger file size
  • Compressed Version: Slightly longer creation time, significantly smaller file size

Font Handling Strategy

The program employs a sophisticated font selection strategy:

  • Arial Unicode MS: Used for most languages due to its broad character support
  • Malgun Gothic Semilight: Specifically chosen for Korean text rendering
  • Font Embedding: Ensures consistent appearance across different systems

Cross-Version Compatibility

The code includes conditional compilation directives to support both modern and legacy Delphi versions:

  • XE2+ Support: Uses namespaced units (WinApi.Windows, System.SysUtils, etc.)
  • Legacy Support: Falls back to traditional unit names for older Delphi versions
  • EurekaLog Integration: Optional memory leak detection and debugging support

Educational Value

This HelloWorld example serves multiple educational purposes:

  • Component Introduction: Provides a gentle introduction to HotPDF Component usage
  • Best Practices: Demonstrates proper resource management and error handling
  • System Integration: Shows how to integrate PDF generation with Windows system operations
  • Internationalization: Illustrates multilingual text handling in PDF documents
  • Performance Considerations: Compares different compression strategies and their trade-offs

Getting Started

To run this example program:

  1. Ensure HotPDF Component is properly installed in your Delphi IDE
  2. Open the HelloWorld.dpr project file
  3. Compile and run the program
  4. The program will automatically create two PDF files demonstrating compression differences
  5. Examine the generated files to see the multilingual text rendering and compare file sizes

Source Code

Below is the complete, well-documented source code for the HelloWorld demonstration program:

{************************************************************}
// HotPDF PDF Component
// Copyright(c)2007-2025, https://www.loslab.com
{************************************************************}
// HelloWorld Demo Program for HotPDF Component
// This program demonstrates basic PDF creation capabilities
// including multilingual text support and compression options
{************************************************************}

program HelloWorld;
{$APPTYPE CONSOLE}  // Console application type
{$I ..\..\..\Lib\HotPDF.inc}  // Include HotPDF configuration file

uses
  // EurekaLog units for memory leak detection and debugging (optional)
  {$IFDEF EurekaLog}
  EMemLeaks,          // Memory leak detection
  EResLeaks,          // Resource leak detection
  EDebugJCL,          // JCL debugging support
  EDebugExports,      // Export debugging information
  EFixSafeCallException, // SafeCall exception handling
  EMapWin32,          // Win32 mapping support
  EAppConsole,        // Console application support
  EDialogConsole,     // Console dialog support
  ExceptionLog7,      // Exception logging
  {$ENDIF EurekaLog}
  // System units - different namespaces for XE2+ vs older versions
  {$IFDEF XE2+}
  WinApi.Windows,     // Windows API functions
  WinApi.Messages,    // Windows message constants
  System.SysUtils,    // System utilities
  System.Classes,     // Base classes (TStringList, etc.)
  Vcl.Graphics,       // Graphics support
  {$ELSE}
  Windows,            // Windows API functions (older Delphi)
  Messages,           // Windows message constants (older Delphi)
  SysUtils,           // System utilities (older Delphi)
  Classes,            // Base classes (older Delphi)
  Graphics,           // Graphics support (older Delphi)
  {$ENDIF}
  HPDFDoc;            // HotPDF main component unit

// Creates a PDF file with multilingual "Hello World" text
// Parameters:
//   FileName: Output PDF file name
//   UseCompression: True to enable FlateDecode compression, False for no compression
procedure CreatePDF(const FileName: string; UseCompression: Boolean);
var
  HotPDF: THotPDF;  // Main HotPDF component instance
begin
  // Create HotPDF component instance
  HotPDF := THotPDF.Create(nil);
  try
    // Configure PDF properties
    HotPDF.AutoLaunch := true;        // Automatically open PDF after creation
    HotPDF.FileName := FileName;      // Set output file name

    // Set compression based on parameter
    if UseCompression then
    begin
      HotPDF.Compression := cmFlateDecode;  // Enable FlateDecode compression
      WriteLn('Creating compressed PDF: ', FileName);
    end
    else
    begin
      HotPDF.Compression := cmNone;         // No compression
      WriteLn('Creating uncompressed PDF: ', FileName);
    end;

    HotPDF.FontEmbedding := true;     // Embed fonts for better compatibility
    HotPDF.BeginDoc;                  // Start PDF document creation

    // Set Unicode font for multilingual text support
    // Arial Unicode MS supports most languages except Korean
    // procedure SetFont ( FontName: AnsiString; FontStyle: TFontStyles; ASize: Single; FontCharset: TFontCharset = DEFAULT_CHARSET; IsVertical: boolean = false);
    // DEFAULT_CHARSET: 1 - Font is chosen based on Name. If the described font is not available on the system, Windows will substitute another font
    HotPDF.CurrentPage.SetFont('Arial Unicode MS', [], 12, 1, False);
    
    // Display "Hello World" in multiple languages
    // TextOut parameters: (X, Y, Angle, 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
    
    // Korean text requires a specific Korean font
    // Arial Unicode MS doesn't properly support Korean characters
    HotPDF.CurrentPage.SetFont('Malgun Gothic Semilight', [], 12, 0, False);
    HotPDF.CurrentPage.TextOut(80, 250, 0, '여보세요, Delphi PDF 세계!');     // Korean
    
    HotPDF.EndDoc;  // Finalize and save the PDF document
    WriteLn('PDF created successfully: ', FileName);
  finally 
    HotPDF.Free;    // Clean up HotPDF component
  end;
end;

// Global variables for window enumeration and PDF creation
var
  Title: String;                        // Individual title string (unused in current implementation)
  Titles: TStrings;                     // List of window titles to search for
  Window: HWND;                         // Window handle (unused in current implementation)
  WindowText: array[0..255] of Char;    // Buffer for window text (unused in current implementation)
  WindowTitle: String;                  // Window title string (unused in current implementation)
  I: Integer;                           // Loop counter (unused in current implementation)

// Callback function for EnumWindows API
// This function is called for each top-level window in the system
// Parameters:
//   hWnd: Handle to the current window being enumerated
//   lParam: User-defined data (in our case, pointer to TStrings with target titles)
// Returns: True to continue enumeration, False to stop
function EnumWindowsProc(hWnd: HWND; lParam: LPARAM): BOOL; stdcall;
var
  Titles: TStrings;                     // List of target window titles
  I: Integer;                           // Loop counter
  WindowText: array[0..255] of Char;    // Buffer to store window text
  WindowTitle: String;                  // Current window's title as string
begin
  Result := True;                       // Continue enumeration by default
  Titles := TStrings(lParam);           // Cast lParam back to TStrings
  
  // Get the window title text
  if GetWindowText(hWnd, WindowText, SizeOf(WindowText)) > 0 then
  begin
    WindowTitle := String(WindowText);  // Convert char array to string
    
    // Check if window title contains any of our target strings
    for I := 0 to Titles.Count - 1 do
    begin
      // Use Pos function to check if target string is contained in window title
      if Pos(Titles[I], WindowTitle) > 0 then
      begin
        // Send WM_CLOSE message to close the window
        PostMessage(hWnd, WM_CLOSE, 0, 0);
        Break;  // Exit loop after finding first match
      end;
    end;
  end;
end;

// Main program execution begins here
begin
  // Close any existing PDF files that might be open in PDF viewers
  // This prevents file access conflicts when creating new PDFs with same names
  Titles := TStringList.Create;
  try
    // Define list of window title substrings to search for
    // Any window containing these strings will be closed
    // This will close Adobe and Foxit PDF reader & editor and many other PDF apps
    Titles.CommaText := '"HelloWorld-compressed.pdf", "HelloWorld-uncompressed.pdf", "Foxit"';

    // Enumerate all top-level windows and close matching ones
    // EnumWindows calls our callback function for each window
    EnumWindows(@EnumWindowsProc, LPARAM(Titles));
  finally
    Titles.Free;  // Clean up string list
  end;

  // Display program header
  WriteLn('=== HotPDF Compression Test ===');
  WriteLn('This demo creates two PDF files to demonstrate compression differences.');
  WriteLn('');

  // Create uncompressed PDF first
  // This version will be larger but faster to create
  CreatePDF('HelloWorld-uncompressed.pdf', False);

  // Create compressed PDF second
  // This version will be smaller but takes slightly longer to create
  CreatePDF('HelloWorld-compressed.pdf', True);

  // Display completion message
  WriteLn('');
  WriteLn('All PDF files created successfully!');
  WriteLn('Please check the files to compare compressed vs uncompressed versions.');
  WriteLn('You can examine file sizes to see the compression effect.');
  WriteLn('');
  WriteLn('Press Enter to exit...');
  ReadLn;  // Wait for user input before closing console

end.

 

 

losLab

Devoted to developing PDF and Spreadsheet developer library, including PDF creation, PDF manipulation, PDF rendering library, and Excel Spreadsheet creation & manipulation library.

Recent Posts

HotPDF Delphi组件:在PDF文档中创建垂直文本布局

HotPDF Delphi组件:在PDF文档中创建垂直文本布局 本综合指南演示了HotPDF组件如何让开发者轻松在PDF文档中生成Unicode垂直文本。 理解垂直排版(縦書き/세로쓰기/竖排) 垂直排版,也称为垂直书写,中文称为縱書,日文称为tategaki(縦書き),是一种起源于2000多年前古代中国的传统文本布局方法。这种书写系统从上到下、从右到左流动,创造出具有深厚文化意义的独特视觉外观。 历史和文化背景 垂直书写系统在东亚文学和文献中发挥了重要作用: 中国:传统中文文本、古典诗歌和书法主要使用垂直布局。现代简体中文主要使用横向书写,但垂直文本在艺术和仪式场合仍然常见。 日本:日语保持垂直(縦書き/tategaki)和水平(横書き/yokogaki)两种书写系统。垂直文本仍广泛用于小说、漫画、报纸和传统文档。 韩国:历史上使用垂直书写(세로쓰기),但现代韩语(한글)主要使用水平布局。垂直文本出现在传统场合和艺术应用中。 越南:传统越南文本在使用汉字(Chữ Hán)书写时使用垂直布局,但随着拉丁字母的采用,这种做法已基本消失。 垂直文本的现代应用 尽管全球趋向于水平书写,垂直文本布局在几个方面仍然相关: 出版:台湾、日本和香港的传统小说、诗集和文学作品…

2 days ago

HotPDF Delphi 컴포넌트: PDF 문서에서 세로쓰기

HotPDF Delphi 컴포넌트: PDF 문서에서 세로쓰기 텍스트 레이아웃 생성 이 포괄적인 가이드는 HotPDF 컴포넌트를 사용하여…

2 days ago

HotPDF Delphiコンポーネント-PDFドキュメントでの縦書き

HotPDF Delphiコンポーネント:PDFドキュメントでの縦書きテキストレイアウトの作成 この包括的なガイドでは、HotPDFコンポーネントを使用して、開発者がPDFドキュメントでUnicode縦書きテキストを簡単に生成する方法を実演します。 縦書き組版の理解(縦書き/세로쓰기/竖排) 縦書き組版は、日本語では縦書きまたはたてがきとも呼ばれ、2000年以上前の古代中国で生まれた伝統的なテキストレイアウト方法です。この書字体系は上から下、右から左に流れ、深い文化的意義を持つ独特の視覚的外観を作り出します。 歴史的・文化的背景 縦書きシステムは東アジアの文学と文書において重要な役割を果たしてきました: 中国:伝統的な中国語テキスト、古典詩、書道では主に縦書きレイアウトが使用されていました。現代の簡体字中国語は主に横書きを使用していますが、縦書きテキストは芸術的・儀式的な文脈で一般的です。 日本:日本語は縦書き(縦書き/たてがき)と横書き(横書き/よこがき)の両方の書字体系を維持しています。縦書きテキストは小説、漫画、新聞、伝統的な文書で広く使用されています。 韓国:歴史的には縦書き(세로쓰기)を使用していましたが、現代韓国語(한글)は主に横書きレイアウトを使用しています。縦書きテキストは伝統的な文脈や芸術的応用で見られます。 ベトナム:伝統的なベトナム語テキストは漢字(Chữ Hán)で書かれた際に縦書きレイアウトを使用していましたが、この慣行はラテン文字の採用とともにほぼ消失しました。 縦書きテキストの現代的応用 横書きへの世界的な傾向にもかかわらず、縦書きテキストレイアウトはいくつかの文脈で関連性を保っています: 出版:台湾、日本、香港の伝統的な小説、詩集、文学作品…

2 days ago

Отладка проблем порядка страниц PDF: Реальный кейс-стади

Отладка проблем порядка страниц PDF: Реальный кейс-стади компонента HotPDF Опубликовано losLab | Разработка PDF |…

3 days ago

PDF 페이지 순서 문제 디버깅: HotPDF 컴포넌트 실제 사례 연구

PDF 페이지 순서 문제 디버깅: HotPDF 컴포넌트 실제 사례 연구 발행자: losLab | PDF 개발…

4 days ago

PDFページ順序問題のデバッグ:HotPDFコンポーネント実例研究

PDFページ順序問題のデバッグ:HotPDFコンポーネント実例研究 発行者:losLab | PDF開発 | Delphi PDFコンポーネント PDF操作は特にページ順序を扱う際に複雑になることがあります。最近、私たちはPDF文書構造とページインデックスに関する重要な洞察を明らかにした魅力的なデバッグセッションに遭遇しました。このケーススタディは、一見単純な「オフバイワン」エラーがPDF仕様の深い調査に発展し、文書構造に関する根本的な誤解を明らかにした過程を示しています。 PDFページ順序の概念 - 物理的オブジェクト順序と論理的ページ順序の関係 問題 私たちはHotPDF DelphiコンポーネントのCopyPageと呼ばれるPDFページコピーユーティリティに取り組んでいました。このプログラムはデフォルトで最初のページをコピーするはずでしたが、代わりに常に2番目のページをコピーしていました。一見すると、これは単純なインデックスバグのように見えました -…

4 days ago