HotPDF Delphiコンポーネント:PDFドキュメントでの縦書きテキストレイアウトの作成
この包括的なガイドでは、HotPDFコンポーネントを使用して、開発者がPDFドキュメントでUnicode縦書きテキストを簡単に生成する方法を実演します。
縦書き組版の理解(縦書き/세로쓰기/竖排)
縦書き組版は、日本語では縦書きまたはたてがきとも呼ばれ、2000年以上前の古代中国で生まれた伝統的なテキストレイアウト方法です。この書字体系は上から下、右から左に流れ、深い文化的意義を持つ独特の視覚的外観を作り出します。
歴史的・文化的背景
縦書きシステムは東アジアの文学と文書において重要な役割を果たしてきました:
- 中国:伝統的な中国語テキスト、古典詩、書道では主に縦書きレイアウトが使用されていました。現代の簡体字中国語は主に横書きを使用していますが、縦書きテキストは芸術的・儀式的な文脈で一般的です。
- 日本:日本語は縦書き(縦書き/たてがき)と横書き(横書き/よこがき)の両方の書字体系を維持しています。縦書きテキストは小説、漫画、新聞、伝統的な文書で広く使用されています。
- 韓国:歴史的には縦書き(세로쓰기)を使用していましたが、現代韓国語(한글)は主に横書きレイアウトを使用しています。縦書きテキストは伝統的な文脈や芸術的応用で見られます。
- ベトナム:伝統的なベトナム語テキストは漢字(Chữ Hán)で書かれた際に縦書きレイアウトを使用していましたが、この慣行はラテン文字の採用とともにほぼ消失しました。
縦書きテキストの現代的応用
横書きへの世界的な傾向にもかかわらず、縦書きテキストレイアウトはいくつかの文脈で関連性を保っています:
- 出版:台湾、日本、香港の伝統的な小説、詩集、文学作品
- デザイン:視覚的インパクトを必要とするロゴ、看板、芸術的レイアウト
- デジタルメディア:伝統的な読書嗜好をターゲットとする電子書籍、モバイルアプリケーション、ウェブコンテンツ
- 文書:伝統的な形式での法的文書、証明書、正式な通信
HotPDFコンポーネント:プロフェッショナルな縦書きテキストサポート
HotPDF Delphiコンポーネントは、PDFドキュメントでの縦書きテキストレイアウトの包括的なサポートを提供し、多言語アプリケーションや伝統的な文書形式で作業する開発者にとって理想的なソリューションです。
縦書き組版の主要機能
- ✅ Unicodeサポート:CJK(中国語、日本語、韓国語)文字セットとの完全な互換性
- ✅ フォント埋め込み:異なるシステム間での一貫した表示を保証
- ✅ 混合レイアウト:同じドキュメント内で横書きと縦書きテキストを組み合わせ
- ✅ 精密な位置決め:テキスト配置のピクセル完璧な制御
- ✅ 多言語サポート:複雑なスクリプトと文字の組み合わせを処理

実装ガイド:Delphiコード例
以下の包括的なDelphiコード例では、HotPDFコンポーネントを使用して縦書きテキストレンダリングを実装する方法を実演します。この例では、複数言語での横書きと縦書きの両方のテキストレイアウトを紹介します。
コード機能のハイライト
- フォント設定:多言語サポートのためのUnicodeフォントの適切な設定
- テキスト位置決め:縦書きレイアウトでのテキスト配置の精密な制御
- 言語混合:同じドキュメント内での異なるスクリプト(ラテン文字、CJK)の組み合わせ
- リソース管理:PDFリソースの適切な初期化とクリーンアップ
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 |
{***********************************************************} // HotPDF PDFコンポーネント // Copyright(c)2007-2025, https://www.loslab.com {***********************************************************} { ユニット: uVerticalText 目的: HotPDFでの縦書きテキスト出力機能を実演 機能: - 横書きと縦書きテキストレンダリング - 多言語サポート(英語、韓国語、日本語、中国語) - Unicode文字処理 - 適切な表示のためのフォント埋め込み } unit uVerticalText; interface {$I ..\..\..\Lib\HotPDF.inc} uses {$IFDEF XE2+} WinApi.Windows, WinApi.Messages, System.SysUtils, System.Classes, Vcl.Graphics, Vcl.StdCtrls, Vcl.Controls, Vcl.Dialogs, Vcl.Forms, {$ELSE} Windows, Messages, SysUtils, Graphics, Controls, StdCtrls, Classes, Dialogs, Forms, {$ENDIF} HPDFDoc; // PDF生成用HotPDFコンポーネント type // 縦書きテキスト実演用メインフォームクラス TForm1 = class(TForm) Button1: TButton; // PDF生成をトリガーするボタン procedure Button1Click(Sender: TObject); private {プライベート宣言} public {パブリック宣言} end; var Form1: TForm1; // メインフォームインスタンス HotPDF: THotPDF; // HotPDFコンポーネントインスタンス implementation {$R *.DFM} // 重要な注意:古いバージョンのDelphiはUnicode文字を正しく処理できません。 // このファイルを開くにはDelphi 2009以上が必要です。 { メソッド: Button1Click 目的: 複数言語での縦書きと横書きテキスト出力を実演 パラメータ: Sender - イベントをトリガーしたオブジェクト 機能: - 横書きと縦書きテキストの両方でPDFを作成 - 複数言語でのテキスト表示(英語、韓国語、日本語、中国語) - 適切な文字表示のためのUnicodeフォントを使用 - 異なるテキスト位置決め技術を実演 } procedure TForm1.Button1Click(Sender: TObject); begin // HotPDFインスタンスを作成 HotPDF := THotPDF.Create(nil); try // PDF生成設定を構成 HotPDF.AutoLaunch := true; // 作成後にPDFを自動的に開く HotPDF.FontEmbedding := true; // 適切な表示のためにフォントを埋め込む HotPDF.FileName := 'VerticalText.pdf'; // 出力ファイル名を設定 // PDFドキュメント作成を開始 HotPDF.BeginDoc; HotPDF.CurrentPage.Size := psA4; // ページサイズをA4に設定 // === 横書きテキスト実演 === HotPDF.CurrentPage.SetFont('Arial Unicode MS', [], 12, 0, False); // 横書きテキストモードを設定 // 複数言語での横書きテキストを出力 HotPDF.CurrentPage.TextOut(80, 70, 0, 'Horizontal Text 가로텍스트 가로쓰기 横向きのテキスト 横書き 横向文本 横書'); // 装飾的な区切り線を追加 HotPDF.CurrentPage.TextOut(40, 110, 0, '※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※'); // === 縦書きテキスト実演 === HotPDF.CurrentPage.SetFont('Arial Unicode MS', [], 12, 0, true); // 縦書きテキストモードを設定 // 混合言語縦書きテキスト(韓国語、日本語) HotPDF.CurrentPage.TextOut(530, 180, 0, '縦書 縦書き 세로쓰기 垂直テキスト 수직 텍스트'); // 中国語テキスト - 独立宣言の抜粋 HotPDF.CurrentPage.SetFont('Arial Unicode MS', [], 12, 0, true); HotPDF.CurrentPage.TextOut(500, 180, 0, '『我等之見解為,下述真理不證自明:凡人生而平等,秉造物者之賜,'); HotPDF.CurrentPage.TextOut(470, 180, 0, '擁諸無可轉讓之權利,包含生命權、自由權、與追尋幸福之權。』'); // 日本語テキスト - 伝統的な詩 HotPDF.CurrentPage.TextOut(430, 180, 0, '昨日またかくてありけり、今日もまたかくてありなむ'); HotPDF.CurrentPage.TextOut(400, 180, 0, 'この命にを齷齪、明日をのみ思ひわづらふ'); HotPDF.CurrentPage.TextOut(370, 180, 0, 'いくたびか栄枯の夢の、消え残る谷に下りて'); HotPDF.CurrentPage.TextOut(340, 180, 0, '河波のいざよふ見れば、砂まじり水巻き帰る'); HotPDF.CurrentPage.TextOut(310, 180, 0, '嗚呼古城なにをか語り、岸の波なにをか答ふ、過し世を静かに思へ'); // 中国古典詩 - 李白の詩 HotPDF.CurrentPage.TextOut(270, 180, 0, '棄我去者昨日之日不可留,亂我心者今日之日多煩憂。'); HotPDF.CurrentPage.TextOut(240, 180, 0, '長風萬里送秋鴈,對此可以酣高樓。蓬萊文章建安骨,中間小謝又清發'); HotPDF.CurrentPage.TextOut(210, 180, 0, '俱懷逸興壯思飛,欲上青天攬明月。抽刀斷水水更流,舉杯消愁愁更愁'); HotPDF.CurrentPage.TextOut(180, 180, 0, '人生在世不稱意。明朝散髮弄扁舟。'); // 韓国語テキスト - 現代詩 // 注意:互換性のためMalgun Gothicの代わりにArial Unicode MSを使用 //HotPDF.CurrentPage.SetFont('Malgun Gothic', [], 12, 0, true); // 代替韓国語フォント HotPDF.CurrentPage.TextOut(140, 180, 0, '눈 맞으며 어둠 속을 떨며 가는 사람들을트、노래가 길이 되어 앞질러 가고'); HotPDF.CurrentPage.TextOut(110, 180, 0, '돌아올 길 없는 눈길 앞질러 가고'); HotPDF.CurrentPage.TextOut(80, 180, 0, '아름다움이 이 세상을 건질 때까지'); HotPDF.CurrentPage.TextOut(50, 180, 0, '절망에서 즐거움이 찾아올 때까지'); // === フッター装飾 === HotPDF.CurrentPage.SetFont('Arial Unicode MS', [], 12, 0, False); // 横書きテキストに戻す // 装飾的なフッター線を追加 HotPDF.CurrentPage.TextOut(40, 720, 0, '■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■'); // PDFドキュメントを完成 HotPDF.EndDoc; finally // リソースをクリーンアップ HotPDF.Free; end; end; end. |
技術実装の詳細
フォント選択とUnicodeサポート
PDFでの縦書きテキストを扱う際、異なる言語での正しい文字表示を保証するために適切なフォント選択が重要です:
- Arial Unicode MS:ほとんどのCJK文字をサポートする包括的なUnicodeフォント
- フォント埋め込み:一貫した表示を保証するために常に
FontEmbedding := true
を有効にする - 文字エンコーディング:適切なUnicode文字処理のためにUTF-8エンコーディングを使用
テキスト位置決めのベストプラクティス
縦書きテキストの位置決めには、読書の流れと文字間隔の慎重な考慮が必要です:
- 右から左への列の流れ:最右端の位置から開始し、後続の列のために左に移動
- 上から下への文字の流れ:各列内の文字は上から下に流れる
- 一貫した間隔:プロフェッショナルな外観のために均一な列間隔を維持
- 混合スクリプト処理:ラテン文字とCJKスクリプトを混合する際は異なる文字幅を考慮
高度な機能とカスタマイズ
パフォーマンス最適化のヒント
- 🚀 バッチテキスト操作:PDF操作を最小化するために複数のテキスト出力をグループ化
- 🚀 フォントキャッシュ:パフォーマンスを向上させるために可能な場合はフォントオブジェクトを再利用
- 🚀 メモリ管理:メモリリークを防ぐためにHotPDFインスタンスを適切に破棄
- 🚀 ストリーム処理:大きなドキュメントの処理速度を向上させるためにメモリストリームを使用
一般的な問題のトラブルシューティング
⚠️ 一般的な問題と解決策
- 文字の欠落:選択したフォントが必要なすべてのUnicode範囲をサポートしていることを確認
- 位置決めの不正確さ:座標系の理解を確認(PDFは左下原点を使用)
- フォントレンダリングの問題:フォント埋め込みを有効にし、システムにインストールされたUnicodeフォントを使用
- パフォーマンスの問題:テキスト出力呼び出しを最適化し、ドキュメント構造を考慮
関連リソースと参考資料
ドキュメントとサポート
- 📚 HotPDFコンポーネント公式ドキュメント
- 📚 LosLabブログ – PDF開発チュートリアル
- 📚 Unicode標準:国際アプリケーションのための文字エンコーディングの理解
- 📚 PDF仕様:高度なカスタマイズのためのAdobe PDFリファレンス
関連トピック
- 🔗 PDFテキストレンダリング:PDFドキュメントでの高度な組版技術
- 🔗 多言語PDF生成:複雑なスクリプトと右から左の言語の処理
- 🔗 Delphi Unicodeプログラミング:DelphiアプリケーションでのUnicode処理のベストプラクティス
- 🔗 アジア組版:CJKテキストレイアウトの伝統的および現代的アプローチ
結論
HotPDF Delphiコンポーネントは縦書きテキストレイアウトの堅牢なサポートを提供し、伝統的なアジア組版や縦書きテキスト方向を必要とする現代デザインアプリケーションで作業する開発者にとって優れた選択肢です。Unicodeフォントの適切な実装、慎重な位置決め、文化的組版慣習への注意により、伝統的な読書パターンを尊重しながら現代の技術標準を維持するプロフェッショナルなPDFドキュメントを作成できます。
出版、ドキュメント管理、クリエイティブデザインのアプリケーションを開発している場合でも、HotPDFの縦書きテキスト機能により、多様なグローバルオーディエンスにサービスを提供する文化的に適切で視覚的に魅力的なPDFドキュメントを作成できます。