Delphi HotPDFコンポーネントからのHello World
Delphi HotPDFコンポーネント HelloWorldデモンストレーションプログラムの包括的なガイドへようこそ!
HotPDFコンポーネントについて
HotPDFコンポーネントは、DelphiおよびC++Builder開発者向けに特別に設計された強力で多機能なPDF処理ライブラリです。この包括的なコンポーネントは、開発者がPDFドキュメントを簡単かつ正確に作成、操作、変更できる広範なAPIを提供します。
HotPDFコンポーネントの主要機能:
- PDF作成・生成: レイアウト、フォーマット、コンテンツを完全に制御してPDFドキュメントを一から作成
- テキスト・グラフィックサポート: PDFページにテキスト、画像、図形、複雑なグラフィックを追加
- 多言語サポート: 国際的なテキストレンダリングのための完全なUnicodeサポート
- フォント管理: 異なるシステム間でのドキュメントの一貫した外観のためのフォント埋め込み
- 圧縮オプション: ファイルサイズを最適化するための複数の圧縮アルゴリズム
- セキュリティ機能: ドキュメント暗号化、パスワード保護、権限制御
- ドキュメント操作: 既存のPDFドキュメントの結合、分割、変更
- テーブル・フォームサポート: 複雑なテーブルとインタラクティブフォームの作成
HelloWorld.dprプログラム概要
HelloWorld.dpr
サンプルプログラムは、HotPDFコンポーネントの最も基本的で重要な機能であるTexOut関数への優れた入門として機能します。このデモンストレーションプログラムは、基本的なPDF作成機能も紹介しています。
コア機能:
1. PDFドキュメント作成
プログラムの主要機能は、多言語の「Hello World」テキストを含むPDFドキュメントを生成することです。CreatePDF
プロシージャは以下を実演します:
- コンポーネント初期化: THotPDFコンポーネントの適切なセットアップと設定
- ドキュメントプロパティ: 圧縮オプションやフォント埋め込みなどのメタデータの設定
- 多言語テキストレンダリング: 英語、スペイン語、ドイツ語、フランス語、イタリア語、ポルトガル語、ロシア語、日本語、トルコ語、中国語、韓国語の11の異なる言語でのテキスト表示
- フォント管理: ほとんどの言語にはArial Unicode MS、韓国語テキストにはMalgun Gothicを使用
- 圧縮比較: ファイルサイズの違いを実演するために圧縮版と非圧縮版の両方を作成
2. ウィンドウ管理・システム統合
プログラムには、以下を実演する高度なウィンドウ列挙機能が含まれています:
- システムウィンドウ列挙: Windows API
EnumWindows
関数を使用してすべてのトップレベルウィンドウを反復処理 - ウィンドウタイトルマッチング: ターゲットアプリケーションを識別するための部分文字列マッチングの実装
- 自動ウィンドウクローズ: ファイルを開いている可能性のあるPDFビューアを閉じるための
WM_CLOSE
メッセージの送信 - 競合防止: 新しいPDFファイルを作成する際にファイルアクセス競合が発生しないことを保証
3. エラーハンドリング・リソース管理
プログラムは以下のベストプラクティスを実演します:
- メモリ管理: コンポーネントインスタンスの適切な作成と破棄
- 例外安全性: リソースクリーンアップを保証するためのtry-finallyブロックの使用
- ユーザーフィードバック: プログラムの進行状況をユーザーに通知するためのコンソール出力の提供
技術実装詳細:
圧縮技術
プログラムは、FlateDecode圧縮の効果を実演するために同じPDFの2つのバージョンを作成します:
- 非圧縮版: 作成時間が短く、ファイルサイズが大きい
- 圧縮版: 作成時間がわずかに長く、ファイルサイズが大幅に小さい
フォント処理戦略
プログラムは高度なフォント選択戦略を採用しています:
- Arial Unicode MS: 幅広い文字サポートのためにほとんどの言語で使用
- Malgun Gothic Semilight: 韓国語テキストレンダリング専用に選択
- フォント埋め込み: 異なるシステム間での一貫した外観を保証
クロスバージョン互換性
コードには、モダンおよびレガシーDelphiバージョンの両方をサポートするための条件付きコンパイルディレクティブが含まれています:
- XE2+サポート: 名前空間付きユニット(WinApi.Windows、System.SysUtilsなど)を使用
- レガシーサポート: 古いDelphiバージョン用の従来のユニット名にフォールバック
- EurekaLog統合: オプションのメモリリーク検出とデバッグサポート
教育的価値
このHelloWorldサンプルは複数の教育目的を果たします:
- コンポーネント紹介: HotPDFコンポーネント使用への穏やかな導入を提供
- ベストプラクティス: 適切なリソース管理とエラーハンドリングを実演
- システム統合: PDF生成をWindowsシステム操作と統合する方法を示す
- 国際化: PDFドキュメントでの多言語テキスト処理を説明
- パフォーマンス考慮事項: 異なる圧縮戦略とそのトレードオフを比較
はじめに
このサンプルプログラムを実行するには:
- HotPDFコンポーネントがDelphi IDEに適切にインストールされていることを確認
- HelloWorld.dprプロジェクトファイルを開く
- プログラムをコンパイルして実行
- プログラムは圧縮の違いを実演する2つのPDFファイルを自動的に作成
- 生成されたファイルを調べて多言語テキストレンダリングを確認し、ファイルサイズを比較
ソースコード
以下は、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 |
{************************************************************} // HotPDF PDFコンポーネント // Copyright(c)2007-2025, https://www.loslab.com {************************************************************} // HotPDFコンポーネント用HelloWorldデモプログラム // このプログラムは、多言語テキストサポートと圧縮オプションを含む // 基本的なPDF作成機能を実演します {************************************************************} program HelloWorld; {$APPTYPE CONSOLE} // コンソールアプリケーションタイプ {$I ..\..\..\Lib\HotPDF.inc} // HotPDF設定ファイルをインクルード uses // メモリリーク検出とデバッグ用EurekaLogユニット(オプション) {$IFDEF EurekaLog} EMemLeaks, // メモリリーク検出 EResLeaks, // リソースリーク検出 EDebugJCL, // JCLデバッグサポート EDebugExports, // デバッグ情報のエクスポート EFixSafeCallException, // SafeCall例外処理 EMapWin32, // Win32マッピングサポート EAppConsole, // コンソールアプリケーションサポート EDialogConsole, // コンソールダイアログサポート ExceptionLog7, // 例外ログ {$ENDIF EurekaLog} // システムユニット - XE2+と古いバージョンで異なる名前空間 {$IFDEF XE2+} WinApi.Windows, // Windows API関数 WinApi.Messages, // Windowsメッセージ定数 System.SysUtils, // システムユーティリティ System.Classes, // ベースクラス(TStringListなど) Vcl.Graphics, // グラフィックサポート {$ELSE} Windows, // Windows API関数(古いDelphi) Messages, // Windowsメッセージ定数(古いDelphi) SysUtils, // システムユーティリティ(古いDelphi) Classes, // ベースクラス(古いDelphi) Graphics, // グラフィックサポート(古いDelphi) {$ENDIF} HPDFDoc; // HotPDFメインコンポーネントユニット // 多言語「Hello World」テキストを含むPDFファイルを作成 // パラメータ: // FileName: 出力PDFファイル名 // UseCompression: FlateDecode圧縮を有効にするにはTrue、圧縮なしはFalse procedure CreatePDF(const FileName: string; UseCompression: Boolean); var HotPDF: THotPDF; // メインHotPDFコンポーネントインスタンス begin // HotPDFコンポーネントインスタンスを作成 HotPDF := THotPDF.Create(nil); try // PDFプロパティを設定 HotPDF.AutoLaunch := true; // 作成後にPDFを自動的に開く HotPDF.FileName := FileName; // 出力ファイル名を設定 // パラメータに基づいて圧縮を設定 if UseCompression then begin HotPDF.Compression := cmFlateDecode; // FlateDecode圧縮を有効化 WriteLn('圧縮PDFを作成中: ', FileName); end else begin HotPDF.Compression := cmNone; // 圧縮なし WriteLn('非圧縮PDFを作成中: ', FileName); end; HotPDF.FontEmbedding := true; // より良い互換性のためにフォントを埋め込み HotPDF.BeginDoc; // PDFドキュメント作成を開始 // 多言語テキストサポート用のUnicodeフォントを設定 // Arial Unicode MSは韓国語以外のほとんどの言語をサポート // procedure SetFont ( FontName: AnsiString; FontStyle: TFontStyles; ASize: Single; FontCharset: TFontCharset = DEFAULT_CHARSET; IsVertical: boolean = false); // DEFAULT_CHARSET: 1 - フォントは名前に基づいて選択される。記述されたフォントがシステムで利用できない場合、Windowsは別のフォントを代用する HotPDF.CurrentPage.SetFont('Arial Unicode MS', [], 12, 1, False); // 複数の言語で「Hello World」を表示 // TextOutパラメータ: (X, Y, Angle, Text) HotPDF.CurrentPage.TextOut(80, 50, 0, 'Hello, Delphi PDF world!'); // 英語 HotPDF.CurrentPage.TextOut(80, 70, 0, 'Hola, mundo Delphi PDF!'); // スペイン語 HotPDF.CurrentPage.TextOut(80, 90, 0, 'Hallo, Delphi PDF Welt!'); // ドイツ語 HotPDF.CurrentPage.TextOut(80, 110, 0, 'Bonjour, monde PDF Delphi!'); // フランス語 HotPDF.CurrentPage.TextOut(80, 130, 0, 'Ciao, mondo Delphi PDF!'); // イタリア語 HotPDF.CurrentPage.TextOut(80, 150, 0, 'Olá, mundo Delphi PDF!'); // ポルトガル語 HotPDF.CurrentPage.TextOut(80, 170, 0, 'Здравствуйте, Delphi PDF мир!'); // ロシア語 HotPDF.CurrentPage.TextOut(80, 190, 0, 'こんにちは、Delphi PDFの世界!'); // 日本語 HotPDF.CurrentPage.TextOut(80, 210, 0, 'Merhaba, Delphi PDF dünyası!'); // トルコ語 HotPDF.CurrentPage.TextOut(80, 230, 0, '你好,Delphi PDF世界'); // 中国語 // 韓国語テキストには特定の韓国語フォントが必要 // Arial Unicode MSは韓国語文字を適切にサポートしない HotPDF.CurrentPage.SetFont('Malgun Gothic Semilight', [], 12, 0, False); HotPDF.CurrentPage.TextOut(80, 250, 0, '여보세요, Delphi PDF 세계!'); // 韓国語 HotPDF.EndDoc; // PDFドキュメントを完成させて保存 WriteLn('PDFが正常に作成されました: ', FileName); finally HotPDF.Free; // HotPDFコンポーネントをクリーンアップ end; end; // ウィンドウ列挙とPDF作成用のグローバル変数 var Title: String; // 個別タイトル文字列(現在の実装では未使用) Titles: TStrings; // 検索するウィンドウタイトルのリスト Window: HWND; // ウィンドウハンドル(現在の実装では未使用) WindowText: array[0..255] of Char; // ウィンドウテキスト用バッファ(現在の実装では未使用) WindowTitle: String; // ウィンドウタイトル文字列(現在の実装では未使用) I: Integer; // ループカウンタ(現在の実装では未使用) // EnumWindows APIのコールバック関数 // この関数はシステム内の各トップレベルウィンドウに対して呼び出される // パラメータ: // hWnd: 列挙されている現在のウィンドウのハンドル // lParam: ユーザー定義データ(この場合、ターゲットタイトルを含むTStringsへのポインタ) // 戻り値: 列挙を続行するにはTrue、停止するにはFalse function EnumWindowsProc(hWnd: HWND; lParam: LPARAM): BOOL; stdcall; var Titles: TStrings; // ターゲットウィンドウタイトルのリスト I: Integer; // ループカウンタ WindowText: array[0..255] of Char; // ウィンドウテキストを格納するバッファ WindowTitle: String; // 現在のウィンドウのタイトル(文字列) begin Result := True; // デフォルトで列挙を続行 Titles := TStrings(lParam); // lParamをTStringsにキャスト // ウィンドウタイトルテキストを取得 if GetWindowText(hWnd, WindowText, SizeOf(WindowText)) > 0 then begin WindowTitle := String(WindowText); // 文字配列を文字列に変換 // ウィンドウタイトルにターゲット文字列のいずれかが含まれているかチェック for I := 0 to Titles.Count - 1 do begin // Pos関数を使用してターゲット文字列がウィンドウタイトルに含まれているかチェック if Pos(Titles[I], WindowTitle) > 0 then begin // ウィンドウを閉じるためにWM_CLOSEメッセージを送信 PostMessage(hWnd, WM_CLOSE, 0, 0); Break; // 最初のマッチを見つけた後にループを終了 end; end; end; end; // メインプログラム実行開始 begin // 新しいPDFと同じ名前で作成する際のファイルアクセス競合を防ぐため、 // PDFビューアで開かれている可能性のある既存のPDFファイルを閉じる Titles := TStringList.Create; try // 検索するウィンドウタイトル部分文字列のリストを定義 // これらの文字列を含むウィンドウはすべて閉じられる // これによりAdobe、Foxit PDFリーダー・エディター、その他多くのPDFアプリが閉じられる Titles.CommaText := '"HelloWorld-compressed.pdf", "HelloWorld-uncompressed.pdf", "Foxit"'; // すべてのトップレベルウィンドウを列挙し、マッチするものを閉じる // EnumWindowsは各ウィンドウに対してコールバック関数を呼び出す EnumWindows(@EnumWindowsProc, LPARAM(Titles)); finally Titles.Free; // 文字列リストをクリーンアップ end; // プログラムヘッダーを表示 WriteLn('=== HotPDF圧縮テスト ==='); WriteLn('このデモは圧縮の違いを実演するために2つのPDFファイルを作成します。'); WriteLn(''); // 最初に非圧縮PDFを作成 // このバージョンはサイズが大きいが作成が速い CreatePDF('HelloWorld-uncompressed.pdf', False); // 次に圧縮PDFを作成 // このバージョンはサイズが小さいが作成にわずかに時間がかかる CreatePDF('HelloWorld-compressed.pdf', True); // 完了メッセージを表示 WriteLn(''); WriteLn('すべてのPDFファイルが正常に作成されました!'); WriteLn('圧縮版と非圧縮版を比較するためにファイルを確認してください。'); WriteLn('圧縮効果を確認するためにファイルサイズを調べることができます。'); WriteLn(''); WriteLn('終了するにはEnterキーを押してください...'); ReadLn; // コンソールを閉じる前にユーザー入力を待つ end. |
Discover more from losLab Software Development
Subscribe to get the latest posts sent to your email.