Willkommen zum umfassenden Leitfaden für das Delphi HotPDF Komponente HelloWorld Demonstrationsprogramm!
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.
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.
Die Hauptfunktion des Programms ist die Generierung von PDF-Dokumenten mit mehrsprachigem “Hallo Welt” Text. Die CreatePDF
Prozedur demonstriert:
Das Programm enthält ausgeklügelte Fensteraufzählungsfunktionalität, die demonstriert:
EnumWindows
Funktion zur Iteration durch alle Top-Level-FensterWM_CLOSE
Nachrichten zum Schließen von PDF-Viewern, die möglicherweise Dateien geöffnet habenDas Programm demonstriert bewährte Praktiken für:
Das Programm erstellt zwei Versionen derselben PDF, um die Wirksamkeit der FlateDecode-Komprimierung zu demonstrieren:
Das Programm verwendet eine ausgeklügelte Schriftartenauswahlstrategie:
Der Code enthält bedingte Kompilierungsanweisungen zur Unterstützung sowohl moderner als auch älterer Delphi-Versionen:
Dieses HelloWorld-Beispiel dient mehreren Bildungszwecken:
Um dieses Beispielprogramm auszuführen:
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.
HotPDF Delphi组件:在PDF文档中创建垂直文本布局 本综合指南演示了HotPDF组件如何让开发者轻松在PDF文档中生成Unicode垂直文本。 理解垂直排版(縦書き/세로쓰기/竖排) 垂直排版,也称为垂直书写,中文称为縱書,日文称为tategaki(縦書き),是一种起源于2000多年前古代中国的传统文本布局方法。这种书写系统从上到下、从右到左流动,创造出具有深厚文化意义的独特视觉外观。 历史和文化背景 垂直书写系统在东亚文学和文献中发挥了重要作用: 中国:传统中文文本、古典诗歌和书法主要使用垂直布局。现代简体中文主要使用横向书写,但垂直文本在艺术和仪式场合仍然常见。 日本:日语保持垂直(縦書き/tategaki)和水平(横書き/yokogaki)两种书写系统。垂直文本仍广泛用于小说、漫画、报纸和传统文档。 韩国:历史上使用垂直书写(세로쓰기),但现代韩语(한글)主要使用水平布局。垂直文本出现在传统场合和艺术应用中。 越南:传统越南文本在使用汉字(Chữ Hán)书写时使用垂直布局,但随着拉丁字母的采用,这种做法已基本消失。 垂直文本的现代应用 尽管全球趋向于水平书写,垂直文本布局在几个方面仍然相关: 出版:台湾、日本和香港的传统小说、诗集和文学作品…
HotPDF Delphi 컴포넌트: PDF 문서에서 세로쓰기 텍스트 레이아웃 생성 이 포괄적인 가이드는 HotPDF 컴포넌트를 사용하여…
HotPDF Delphiコンポーネント:PDFドキュメントでの縦書きテキストレイアウトの作成 この包括的なガイドでは、HotPDFコンポーネントを使用して、開発者がPDFドキュメントでUnicode縦書きテキストを簡単に生成する方法を実演します。 縦書き組版の理解(縦書き/세로쓰기/竖排) 縦書き組版は、日本語では縦書きまたはたてがきとも呼ばれ、2000年以上前の古代中国で生まれた伝統的なテキストレイアウト方法です。この書字体系は上から下、右から左に流れ、深い文化的意義を持つ独特の視覚的外観を作り出します。 歴史的・文化的背景 縦書きシステムは東アジアの文学と文書において重要な役割を果たしてきました: 中国:伝統的な中国語テキスト、古典詩、書道では主に縦書きレイアウトが使用されていました。現代の簡体字中国語は主に横書きを使用していますが、縦書きテキストは芸術的・儀式的な文脈で一般的です。 日本:日本語は縦書き(縦書き/たてがき)と横書き(横書き/よこがき)の両方の書字体系を維持しています。縦書きテキストは小説、漫画、新聞、伝統的な文書で広く使用されています。 韓国:歴史的には縦書き(세로쓰기)を使用していましたが、現代韓国語(한글)は主に横書きレイアウトを使用しています。縦書きテキストは伝統的な文脈や芸術的応用で見られます。 ベトナム:伝統的なベトナム語テキストは漢字(Chữ Hán)で書かれた際に縦書きレイアウトを使用していましたが、この慣行はラテン文字の採用とともにほぼ消失しました。 縦書きテキストの現代的応用 横書きへの世界的な傾向にもかかわらず、縦書きテキストレイアウトはいくつかの文脈で関連性を保っています: 出版:台湾、日本、香港の伝統的な小説、詩集、文学作品…
Отладка проблем порядка страниц PDF: Реальный кейс-стади компонента HotPDF Опубликовано losLab | Разработка PDF |…
PDF 페이지 순서 문제 디버깅: HotPDF 컴포넌트 실제 사례 연구 발행자: losLab | PDF 개발…
PDFページ順序問題のデバッグ:HotPDFコンポーネント実例研究 発行者:losLab | PDF開発 | Delphi PDFコンポーネント PDF操作は特にページ順序を扱う際に複雑になることがあります。最近、私たちはPDF文書構造とページインデックスに関する重要な洞察を明らかにした魅力的なデバッグセッションに遭遇しました。このケーススタディは、一見単純な「オフバイワン」エラーがPDF仕様の深い調査に発展し、文書構造に関する根本的な誤解を明らかにした過程を示しています。 PDFページ順序の概念 - 物理的オブジェクト順序と論理的ページ順序の関係 問題 私たちはHotPDF DelphiコンポーネントのCopyPageと呼ばれるPDFページコピーユーティリティに取り組んでいました。このプログラムはデフォルトで最初のページをコピーするはずでしたが、代わりに常に2番目のページをコピーしていました。一見すると、これは単純なインデックスバグのように見えました -…