Delphi HotPDFコンポーネントからのHello World

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ドキュメントでの多言語テキスト処理を説明
  • パフォーマンス考慮事項: 異なる圧縮戦略とそのトレードオフを比較

はじめに

このサンプルプログラムを実行するには:

  1. HotPDFコンポーネントがDelphi IDEに適切にインストールされていることを確認
  2. HelloWorld.dprプロジェクトファイルを開く
  3. プログラムをコンパイルして実行
  4. プログラムは圧縮の違いを実演する2つのPDFファイルを自動的に作成
  5. 生成されたファイルを調べて多言語テキストレンダリングを確認し、ファイルサイズを比較

ソースコード

以下は、HelloWorldデモンストレーションプログラムの完全で十分にドキュメント化されたソースコードです:

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

 

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