Categories: PDF-Programmierung

Hallo Welt von der Delphi HotPDF Komponente

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:

  1. Stellen Sie sicher, dass die HotPDF Komponente ordnungsgemäß in Ihrer Delphi IDE installiert ist
  2. Öffnen Sie die HelloWorld.dpr Projektdatei
  3. Kompilieren und führen Sie das Programm aus
  4. Das Programm erstellt automatisch zwei PDF-Dateien, die Komprimierungsunterschiede demonstrieren
  5. 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:

{************************************************************}
// 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.

 

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 |…

4 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