Categories: Nihongo

HotPDF コンポーネント Delphi TextOut サンプル

HotPDF コンポーネント Delphi TextOut サンプル – フォントスタイルと文字セット

この包括的なHotPDF コンポーネント TextOut サンプルは、高度なフォント処理、文字セットサポート、テキストスケーリング、間隔調整、およびレンダリングモードを実演します。このサンプルは、Delphi アプリケーションでの PDF 生成のための詳細なフォントと文字セットのデモンストレーションを実用的な例とともに生成します。

実演される主要機能

  • フォントファミリーサポート: 様々なスタイルの Arial、Times New Roman、Courier New
  • 文字セット処理: アラビア語、東欧、OEM、ロシア語、トルコ語文字セット
  • テキストスケーリング: 水平テキスト圧縮と拡張
  • 文字間隔: 読みやすさ向上のための文字間隔の微調整
  • 単語間隔: より良いテキストレイアウトのための単語間のスペース調整
  • レンダリングモード: 塗りつぶし、ストローク、塗りつぶし+ストローク、非表示テキストレンダリング

📝 重要な注意

ShowCharset は、文字コードを通じて文字セットから文字を表示することを技術的に実演するためにのみ使用されます。通常のテキスト表示では、文字コードを指定する必要なく、TextOut を使用して希望する文字列を直接表示できます。

このサンプルの ShowCharset プロシージャは、異なる文字エンコーディングが Unicode/ASCII コードによって個々の文字をどのようにレンダリングするかを具体的に示すために設計されています。実際のアプリケーションでは、テキスト文字列で直接 TextOut メソッドを使用するだけです。

技術的実装

このサンプルは、以下を含む HotPDF コンポーネントの包括的なテキスト出力機能を紹介します:

  • クロスプラットフォーム表示の一貫性のためのフォント埋め込み
  • 国際テキストのための Unicode 文字サポート
  • 高度なテキスト配置と回転
  • ナビゲーションのための PDF アウトライン/ブックマーク生成
  • 自動ページ管理による複数ページドキュメント作成
{***************************************************************}
// HotPDF PDF コンポーネント - テキストスタイルと文字セットのデモンストレーション
// Copyright(c)2007-2025, https://www.loslab.com
{***************************************************************}

program TextOut;
{$APPTYPE CONSOLE}
{$I ..\..\..\Lib\HotPDF.inc}

uses
  {$IFDEF XE2+}
  WinApi.Windows,
  System.SysUtils,
  System.Classes,
  Vcl.Graphics,
  {$ELSE}
  Windows,
  SysUtils,
  Classes,
  Graphics,
  {$ENDIF}
  HPDFDoc;

// PDF ドキュメントとアウトライン管理のためのグローバル変数
var
  HotPDF: THotPDF; // メイン HotPDF コンポーネントインスタンス
  OutlineRoot: THPDFDocOutlineObject; // ドキュメントナビゲーション用のルートアウトラインオブジェクト
  CurrnetOutline: THPDFDocOutlineObject; // ネストした構造用の現在のアウトラインオブジェクト

  {
    ====================================================================
    ShowFontGroup - 異なるスタイルでフォントファミリーを表示
    ====================================================================

    目的:
    同じフォントを異なるスタイル(通常、太字、斜体、太字斜体)で
    様々なテキスト回転角度で表示する方法を実演します。

    パラメータ:
    @param FontGroup: String - 表示するフォントファミリー名(例:'Arial')
    @param Position: Integer - テキスト配置のX座標

    機能:
    1. ベース位置でフォント名を通常スタイルで表示
    2. 正の回転(+1度)で太字版を表示
    3. 負の回転(-1度)で斜体版を表示
    4. 通常の向きで太字斜体の組み合わせを表示

    レイアウト:
    各フォントスタイルは前のものより20ピクセル下に表示されます
  }

procedure ShowFontGroup(FontGroup: AnsiString; Position: Integer);
begin
  // procedure SetFont ( FontName: AnsiString; FontStyle: TFontStyles; ASize: Single; FontCharset: TFontCharset; IsVertiacal: Boolean);
  // 通常のフォントスタイルを表示
  HotPDF.CurrentPage.SetFont(FontGroup, [], 12); // スタイル修飾子なしでフォントを設定
  // procedure TextOut ( X, Y: Single; Angle: Extended; Text: WideString);
  HotPDF.CurrentPage.TextOut(Position, 70, 0, WideString(FontGroup)); // ベースY位置(70)で表示

  // わずかな正の回転で太字フォントスタイルを表示
  HotPDF.CurrentPage.SetFont(FontGroup, [fsBold], 12); // 太字スタイルを適用
  HotPDF.CurrentPage.TextOut(Position, 90, 1, WideString(FontGroup + '-Bold')); // +1度回転、Y+20

  // わずかな負の回転で斜体フォントスタイルを表示
  HotPDF.CurrentPage.SetFont(FontGroup, [fsItalic], 12); // 斜体スタイルを適用
  HotPDF.CurrentPage.TextOut(Position, 110, - 1, WideString(FontGroup + '-Italic')); // -1度回転、Y+40

  // 回転なしで太字斜体の組み合わせを表示
  HotPDF.CurrentPage.SetFont(FontGroup, [fsBold, fsItalic], 12); // 太字と斜体の両方を適用
  HotPDF.CurrentPage.TextOut(Position, 130, 0, WideString(FontGroup + '-Bold-Italic')); // 通常の向き、Y+60
end;

{
  ====================================================================
  ShowCharset - 特定の文字セットの文字を表示
  ====================================================================

  目的:
  異なる文字エンコーディングの適切な文字表示を実演

  パラメータ:
  @param FontCharset: TFontCharset - Windows 文字セット識別子
  @param First: Integer - 開始 Unicode/ASCII 文字コード
  @param Last: Integer - 終了 Unicode/ASCII 文字コード(含む)
  @param Y1: Integer - 文字セット名表示のY座標
  @param Y2: Integer - 文字グリッド表示のY座標

  文字範囲:
  各文字セットは特定の Unicode/ASCII 範囲から文字を表示します:

  - ARABIC_CHARSET: Unicode 1536-1625(アラビア語ブロック文字)
  - EASTEUROPE_CHARSET: Unicode 160-249(Latin-1 補助)
  - OEM_CHARSET: ASCII 32-121(印刷可能ASCII文字)
  - RUSSIAN_CHARSET: Unicode 1024-1113(キリル文字ブロック文字)
  - TURKISH_CHARSET: Unicode 161-255(印刷可能Latin拡張)

  表示レイアウト:
  文字は1行30文字で3行に配置されます:
  - 行1:文字0-29、X=50から開始
  - 行2:文字30-59、X=50から開始、Y+20
  - 行3:文字60-89、X=50から開始、Y+40
  - 文字間隔:水平16ピクセル、垂直20ピクセル
}

procedure ShowCharset(FontCharset: TFontCharset; First, Last: Integer; Y1, Y2: Integer);
var
  i: Integer; // 文字反復用のループカウンタ
  CSName: AnsiString; // 表示用の文字セット名
  XPos, YPos: Integer; // 位置変数
  CharCode: Integer; // 表示する文字コード
  CharCount: Integer; // 表示する文字数
  Row: Integer; // 現在の行(1、2、または3)
  CharInRow: Integer; // 現在の行内の文字位置
begin
  // 説明的な名前での文字セット設定
  case FontCharset of
    ARABIC_CHARSET: CSName := 'ARABIC_CHARSET';
    EASTEUROPE_CHARSET: CSName := 'EASTEUROPE_CHARSET';
    OEM_CHARSET: CSName := 'OEM_CHARSET';
    RUSSIAN_CHARSET: CSName := 'RUSSIAN_CHARSET';
    TURKISH_CHARSET: CSName := 'TURKISH_CHARSET';
    else CSName := 'DEFAULT_CHARSET';
  end;

  // 90文字を表示するように文字数を設定(1行30文字×3行)
  CharCount := 90;
  if Last - First + 1 < CharCount then CharCount := Last - First + 1;

  // 文字セットヘッダーを表示
  HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsItalic], 12);
  HotPDF.CurrentPage.TextOut(50, Y1, 0, WideString(CSName + ' example: '));

  // 文字セット指定で文字表示用の適切なフォントを設定
  HotPDF.CurrentPage.SetFont('Arial', [], 14, FontCharset);

  // インデントなしで3行レイアウトで文字を表示
  for i := 0 to CharCount - 1 do
  begin
    // 行と行内の位置を決定
    if i < 30 then
    begin
      // 第1行:30文字、タイトルと揃える(x=50)
      Row := 1;
      CharInRow := i;
      XPos := 50 + CharInRow * 16;
      YPos := Y2;
    end else if i < 60 then
    begin
      // 第2行:30文字、タイトルと揃える(x=50)
      Row := 2;
      CharInRow := i - 30;
      XPos := 50 + CharInRow * 16;
      YPos := Y2 + 20; // 第1行より20ピクセル下
    end
    else
    begin
      // 第3行:残りの文字、タイトルと揃える(x=50)
      Row := 3;
      CharInRow := i - 60;
      XPos := 50 + CharInRow * 16;
      YPos := Y2 + 40; // 第1行より40ピクセル下
    end;

    // 文字コードを計算
    CharCode := First + i;

    try
      // すべての文字にWideString変換を使用
        HotPDF.CurrentPage.TextOut(XPos, YPos, 0, WideString(WideChar(CharCode)));
    except
      // エラーが発生した場合、フォールバック文字を表示
        HotPDF.CurrentPage.TextOut(XPos, YPos, 0, WideString('?'));
    end;
  end;
end;

{
  ====================================================================
  ShowTable - デモンストレーション用のテーブル構造を描画
  ====================================================================

  目的:
  テキスト書式設定効果を実演するための簡単なテーブル構造を作成します。
  テキストスケーリング、文字間隔、単語間隔セクションで使用されます。

  パラメータ:
  @param X: Integer - 左端のX座標
  @param Y: Integer - 上端のY座標

  構造:
  300x100ピクセルのテーブルを作成し、以下に分割:
  - 上部セル:300x50ピクセル
  - 下部セル:300x50ピクセル
  - 垂直分割線:左端から130ピクセル

  すべての線は可視性のためストローク操作で描画されます
}

procedure ShowTable(X, Y: Integer);
begin
  // 上部テーブルセルを描画(300x50の矩形)
  HotPDF.CurrentPage.Rectangle(X, Y, 300, 50);
  HotPDF.CurrentPage.Stroke;

  // 下部テーブルセルを描画(300x50の矩形、50ピクセル下にオフセット)
  HotPDF.CurrentPage.Rectangle(X, Y + 50, 300, 50);
  HotPDF.CurrentPage.Stroke;

  // 両方のセルを通る垂直分割線を描画
  HotPDF.CurrentPage.MoveTo(X + 130, Y); // 上部セルの上から開始
  HotPDF.CurrentPage.LineTo(X + 130, Y + 100); // 下部セルの下まで描画
  HotPDF.CurrentPage.Stroke;
end;

{
  ====================================================================
  メインプログラム実行
  ====================================================================

  これは、すべての HotPDF テキスト出力機能を実演するメインプログラム本体です。
  プログラムはセクションに構造化されており、各セクションはテキスト処理の
  特定の側面を実演します:

  1. フォントグループ - 異なるフォントファミリーとスタイルを表示
  2. 文字セット - 文字エンコーディング処理を実演
  3. テキストスケーリング - 水平テキストスケーリング効果を表示
  4. 文字間隔 - 文字間隔調整を実演
  5. 単語間隔 - 単語間隔修正を表示
  6. レンダリングモード - 異なるテキストレンダリング効果を表示

  各セクションには適切なヘッダー、ナビゲーションアウトライン、
  および該当する場合は前後比較を含む実用的な例が含まれています。
}
begin
  // HotPDF コンポーネントを初期化
  HotPDF := THotPDF.Create(nil);
  try
    // 最適なテキスト表示のためのPDFドキュメントプロパティを設定
    HotPDF.AutoLaunch := true; // 作成後にPDFを自動的に開く
    HotPDF.FontEmbedding := true; // システム間での一貫した文字表示のためのフォント埋め込みを有効化
    HotPDF.StandardFontEmulation := false; // 文字マッピング問題を防ぐためフォントエミュレーションを無効化
    HotPDF.FileName := 'TextOut.pdf'; // 出力ファイル名を設定
    HotPDF.PageLayout := plOneColumn; // ビューアを1列表示に設定

    // PDF ドキュメント作成を開始
    HotPDF.BeginDoc(true); // 圧縮を有効にしてPDFを作成
    OutlineRoot := HotPDF.OutlineRoot; // ドキュメントアウトラインナビゲーションを初期化

    // ====================================================================
    // セクション1:フォントグループのデモンストレーション
    // ====================================================================
    // このセクションは、異なるフォントファミリーが様々なスタイルの組み合わせ
    // (通常、太字、斜体、太字斜体)でどのように表示されるかを実演します

    // 強化された書式設定でセクションヘッダーを作成
    HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20);
    HotPDF.CurrentPage.TextOut(195, 30, 0, WideString('フォント表示'));

    // このセクションのナビゲーションアウトラインエントリを追加
    OutlineRoot.AddChild('フォント表示', 195, 30); // 座標にリンク

    // システム間で一般的に利用可能な3つの主要フォントファミリーを表示
    ShowFontGroup('Arial', 50); // X=50でサンセリフフォント
    ShowFontGroup('Times New Roman', 180); // X=180でセリフフォント
    ShowFontGroup('Courier New', 350); // X=350で等幅フォント

    // ====================================================================
    // セクション2:文字セットのデモンストレーション
    // ====================================================================
    // このセクションは、異なるWindows文字エンコーディングの適切な処理を実演します

    // セクションヘッダーを作成
    HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20);
    HotPDF.CurrentPage.TextOut(200, 170, 0, WideString('文字セット'));

    // 展開可能な構造で文字セットのアウトライングループを作成
    // OutlineRoot.AddChild: PDFナビゲーションツリーに新しいブックマーク/アウトラインエントリを作成
    // パラメータ:('タイトル', X座標, Y座標)
    // - '文字セット': PDFアウトライン/ブックマークパネルに表示されるテキスト
    // - 250: X座標(水平位置)クリック時にナビゲートする場所
    // - 170: Y座標(垂直位置)クリック時にナビゲートする場所
    CurrnetOutline := OutlineRoot.AddChild('文字セット', 250, 170);
    CurrnetOutline.Opened := true; // デフォルトでこのアウトラインセクションを展開

    CurrnetOutline.AddChild('ARABIC_CHARSET', 50, 225);
    // アラビア語文字セット:Unicode範囲 U+0600-U+0659(90文字)
    // 範囲:1536-1625(文字、句読点、数字、発音記号を含むアラビア語ブロック)
    // 各行30文字で3行に90のアラビア語文字を表示
    // 用途:アラビア語、ペルシア語、ウルドゥー語、パシュトー語、クルド語、その他のRTLスクリプト

    // procedure ShowCharset(FontCharset: TFontCharset; First, Last: Integer; Y1, Y2: Integer);
    // First は最初の文字のコード、Last 文字まで順次出力
    // Y1 はタイトルのY座標、Y2 は開始文字のY座標
    ShowCharset(ARABIC_CHARSET, 1536, 1625, 225, 250);

    CurrnetOutline.AddChild('EASTEUROPE_CHARSET', 50, 325);
    // 東欧文字セット:Unicode範囲 U+00A0-U+00F9(90文字)
    // 範囲:160-249(アクセント付き文字と記号を含むLatin-1補助)
    // 各行30文字で3行に90の拡張ラテン文字を表示
    // 用途:フランス語、ドイツ語、スペイン語、ポルトガル語、イタリア語、オランダ語、北欧言語

    // ShowCharset は文字コードを通じて文字セットから文字の表示を実演するためのものです
    // 通常のテキスト表示では、TextOut を使用して必要な文字列を直接表示するだけです
    ShowCharset(EASTEUROPE_CHARSET, 160, 249, 325, 350);

    CurrnetOutline.AddChild('OEM_CHARSET', 50, 425);
    // OEM文字セット:ASCII範囲 32-121(90文字)
    // 範囲:32-121(スペース、記号、数字、文字を含む印刷可能ASCII)
    // 各行30文字で3行に90のASCII文字を表示
    // 用途:DOSアプリケーション、コンソール出力、レガシーシステム
    ShowCharset(OEM_CHARSET, 32, 121, 425, 450);

    CurrnetOutline.AddChild('RUSSIAN_CHARSET', 50, 525);
    // ロシア語文字セット:Unicode範囲 U+0400-U+0459(90文字)
    // 範囲:1024-1113(ロシア語、ウクライナ語、ブルガリア語文字を含むキリル文字ブロック)
    // 各行30文字で3行に90のキリル文字を表示
    // 用途:ロシア語、ブルガリア語、セルビア語(キリル文字)、マケドニア語、ウクライナ語、ベラルーシ語
    ShowCharset(RUSSIAN_CHARSET, 1024, 1113, 525, 550);

    CurrnetOutline.AddChild('TURKISH_CHARSET', 50, 625);
    // トルコ語文字セット:Unicode範囲 U+00A1-U+00FF(95文字)
    // 範囲:161-255(制御文字128-160を避けた印刷可能Latin-1補助)
    // 各行30文字で3行に90文字を表示(利用可能な95文字の最初の90文字)
    // トルコ語特殊文字を含む:Ç(199), ç(231), Ğ(208), ğ(240), İ(221), ı(253), Ö(214), ö(246), Ş(222), ş(254), Ü(220), ü(252)
    // 用途:独特の文字とヨーロッパ記号を持つトルコ語
    ShowCharset(TURKISH_CHARSET, 161, 255, 625, 650);

    // ====================================================================
    // セクション3:テキストスケーリングのデモンストレーション
    // ====================================================================
    // このセクションは、水平テキストスケーリングがテキストの外観にどのように影響するかを示します
    // スケーリングは高さを維持しながら文字の幅を変更します

    // 高度なテキスト書式設定デモンストレーション用の新しいページを開始
    HotPDF.AddPage;

    HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20);
    OutlineRoot.AddChild('水平テキストスケーリング', 180, 40); // メインアウトラインナビゲーションに追加
    HotPDF.CurrentPage.TextOut(180, 40, 0, WideString('水平テキストスケーリング'));

    // 比較テーブル構造を作成
    ShowTable(130, 80);

    // 比較用の説明ラベルを追加
    HotPDF.CurrentPage.SetFont('Times New Roman', [], 12);
    HotPDF.CurrentPage.TextOut(160, 100, 0, WideString('デフォルト 100')); // 通常スケーリングラベル
    HotPDF.CurrentPage.TextOut(165, 145, 0, WideString('50に設定')); // 圧縮スケーリングラベル

    // 通常のテキストスケーリング(100% - デフォルト)を実演
    HotPDF.CurrentPage.SetFont('Times New Roman', [], 24);
    HotPDF.CurrentPage.TextOut(280, 95, 0, WideString('単語'));

    // 圧縮されたテキストスケーリング(50%幅)を実演
    HotPDF.CurrentPage.SetHorizontalScaling(50); // テキストを50%幅に圧縮
    HotPDF.CurrentPage.TextOut(285, 140, 0, WideString('単語'));
    HotPDF.CurrentPage.SetHorizontalScaling(100); // 通常スケーリングにリセット

    // ====================================================================
    // セクション4:文字間隔のデモンストレーション
    // ====================================================================
    // このセクションは、文字間隔がテキストの読みやすさにどのように影響するかを実演します
    // 文字間隔は個々の文字間に均一なスペースを追加します

    HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20);
    OutlineRoot.AddChild('文字間隔', 200, 220);
    HotPDF.CurrentPage.TextOut(200, 220, 0, WideString('文字間隔'));

    // 比較テーブルを作成
    ShowTable(130, 260);

    // 説明ラベルを追加
    HotPDF.CurrentPage.SetFont('Times New Roman', [], 12);
    HotPDF.CurrentPage.TextOut(162, 280, 0, WideString('デフォルト 0')); // 通常間隔ラベル
    HotPDF.CurrentPage.TextOut(162, 330, 0, WideString('間隔 5 に設定')); // 拡張間隔ラベル

    // 通常の文字間隔(0 - デフォルト)を実演
    HotPDF.CurrentPage.SetFont('Times New Roman', [], 24);
    HotPDF.CurrentPage.TextOut(278, 275, 0, WideString('文字'));

    // 拡張された文字間隔(文字間+5単位)を実演
    HotPDF.CurrentPage.SetCharacterSpacing(5); // 各文字間に5単位を追加
    HotPDF.CurrentPage.TextOut(278, 320, 0, WideString('文字'));
    HotPDF.CurrentPage.SetCharacterSpacing(0); // 通常間隔にリセット

    // ====================================================================
    // セクション5:単語間隔のデモンストレーション
    // ====================================================================
    // このセクションは、単語間隔がテキストレイアウトにどのように影響するかを実演します
    // 単語間隔は単語間(スペース文字で)に特別にスペースを追加します

    HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20);
    OutlineRoot.AddChild('単語間隔', 200, 380);
    HotPDF.CurrentPage.TextOut(200, 380, 0, WideString('単語間隔'));

    // 比較テーブルを作成
    ShowTable(130, 420);

    // 説明ラベルを追加
    HotPDF.CurrentPage.SetFont('Times New Roman', [], 12);
    HotPDF.CurrentPage.TextOut(162, 440, 0, WideString('デフォルト 0')); // 通常単語間隔ラベル
    HotPDF.CurrentPage.TextOut(162, 490, 0, WideString('間隔 10 に設定')); // 拡張単語間隔ラベル

    // 通常の単語間隔(0 - デフォルト)を実演
    HotPDF.CurrentPage.SetFont('Times New Roman', [], 24);
    HotPDF.CurrentPage.TextOut(280, 430, 0, WideString('単語 間隔'));

    // 拡張された単語間隔(単語間+10単位)を実演
    HotPDF.CurrentPage.SetWordSpacing(10); // 単語間に10単位を追加
    HotPDF.CurrentPage.TextOut(280, 480, 0, WideString('単語 間隔'));
    HotPDF.CurrentPage.SetWordSpacing(0); // 通常間隔にリセット

    // ====================================================================
    // セクション6:テキストレンダリングモードのデモンストレーション
    // ====================================================================
    // このセクションは、PDFで利用可能な異なるテキストレンダリング効果を実演します
    // テキストは塗りつぶし、ストローク、両方、または非表示(高度な効果用)にできます

    HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20);
    OutlineRoot.AddChild('レンダリングモード', 200, 550);
    HotPDF.CurrentPage.TextOut(200, 550, 0, WideString('レンダリングモード'));

    // レンダリングモード比較用の複雑なテーブル構造を作成
    // メインテーブルアウトライン(500x150ピクセル)
    HotPDF.CurrentPage.Rectangle(50, 600, 500, 150);
    HotPDF.CurrentPage.Stroke;

    // 等幅の4列を作成する垂直分割線
    HotPDF.CurrentPage.MoveTo(175, 600); // 第1分割線
    HotPDF.CurrentPage.LineTo(175, 750);
    HotPDF.CurrentPage.Stroke;

    HotPDF.CurrentPage.MoveTo(300, 600); // 第2分割線
    HotPDF.CurrentPage.LineTo(300, 750);
    HotPDF.CurrentPage.Stroke;

    HotPDF.CurrentPage.MoveTo(425, 600); // 第3分割線
    HotPDF.CurrentPage.LineTo(425, 750);
    HotPDF.CurrentPage.Stroke;

    // ヘッダーをコンテンツから分離する水平分割線
    HotPDF.CurrentPage.MoveTo(50, 665);
    HotPDF.CurrentPage.LineTo(550, 665);
    HotPDF.CurrentPage.Stroke;

    // 各レンダリングモードを説明する列ヘッダーを追加
    HotPDF.CurrentPage.SetFont('Arial', [], 12);
    HotPDF.CurrentPage.TextOut(100, 620, 0, WideString('塗りつぶし')); // 塗りつぶしモード - 単色テキスト
    HotPDF.CurrentPage.TextOut(215, 620, 0, WideString('ストローク')); // ストロークモード - アウトラインテキスト
    HotPDF.CurrentPage.TextOut(320, 620, 0, WideString('塗り+ストローク')); // 組み合わせモード - アウトライン付き塗りつぶし
    HotPDF.CurrentPage.TextOut(465, 620, 0, WideString('非表示')); // 非表示モード - 特殊効果用

    // 劇的なレンダリング効果デモンストレーション用の色を設定
    HotPDF.CurrentPage.SetFont('Arial', [fsBold], 72); // 明確な可視性のための大きなフォント
    HotPDF.CurrentPage.SetRGBStrokeColor(clRed); // 赤いアウトライン色
    HotPDF.CurrentPage.SetRGBFillColor(clYellow); // 黄色の塗りつぶし色

    // 塗りつぶしレンダリングモードを実演 - 単色テキスト
    HotPDF.CurrentPage.SetTextRenderingMode(trFill);
    HotPDF.CurrentPage.TextOut(90, 670, 0, WideString('P'));

    // ストロークレンダリングモードを実演 - アウトラインテキストのみ
    HotPDF.CurrentPage.SetTextRenderingMode(trStroke);
    HotPDF.CurrentPage.TextOut(215, 670, 0, WideString('D'));

    // 塗りつぶし+ストロークレンダリングモードを実演 - 色付きアウトライン付き塗りつぶしテキスト
    HotPDF.CurrentPage.SetTextRenderingMode(trFillThenStroke);
    HotPDF.CurrentPage.TextOut(340, 670, 0, WideString('F'));

    // 非表示レンダリングモードを実演 - テキストは存在するが見えない
    // (画像上の検索可能テキストや高度なレイアウト技術に有用)
    HotPDF.CurrentPage.SetTextRenderingMode(trInvisible);
    HotPDF.CurrentPage.TextOut(475, 670, 0, WideString('X'));

    // 後続のテキストのためにデフォルトレンダリングモードにリセット
    HotPDF.CurrentPage.SetTextRenderingMode(trFillThenStroke);

    // PDFドキュメントを完成させて保存
    HotPDF.EndDoc;

  finally
    // HotPDFコンポーネントの適切なクリーンアップを確保
    HotPDF.Free;
  end;
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