HotPDF Delphi 元件:在 PDF 文件中建立垂直文本佈局。
本綜合指南演示瞭如何使用 HotPDF 元件 幫助開發人員輕鬆生成 PDF 文件中的 Unicode 垂直文本。
瞭解垂直排版 (縦書き/세로쓰기/豎排)。
垂直排版,也稱為 垂直書寫。縱書,在中文中稱為“縱書”,在日語中稱為“tategaki”(縦書き),是一種傳統的文本佈局方法,起源於2000多年前的古代中國。這種書寫方式從上到下,從右到左排列,形成獨特的視覺效果,具有深厚的文化意義。
歷史和文化背景。
垂直書寫系統在東亞文學和文獻中發揮了至關重要的作用。
- 中國。繁體中文文本、古典詩歌和書法主要採用垂直佈局。現代簡體中文主要使用橫向書寫,但垂直文本在藝術和禮儀場合仍然很常見。
- 日本。日語既有豎寫(縦書き/tategaki)也有橫寫(橫書き/yokogaki)兩種書寫系統。 豎寫在小說、漫畫、報紙和傳統文件中仍然被廣泛使用。
- 韓國。歷史上曾使用豎寫,但現代韓語(한글)主要採用橫向佈局。豎體文字出現在傳統語境和藝術應用中。
- 越南: 傳統越南語在用漢字書寫時,採用垂直佈局,但這種做法在採用拉丁字母后已基本消失。
垂直文本的現代應用
儘管全球存在向水平書寫發展的趨勢,垂直文本佈局在某些情況下仍然具有重要意義:
- 出版: 臺灣、日本和香港的傳統小說、詩歌集和其他文學作品。
- 設計: 標誌、標牌和需要視覺衝擊力的藝術佈局。
- 數字媒體:電子書、移動應用程式和網頁內容,針對傳統閱讀偏好。
- 文件。:法律檔案、證書和正式通訊,採用傳統格式。
HotPDF 元件:專業垂直文本支援。
好的。 HotPDF Delphi 元件 提供全面的垂直文本佈局支援,使其成為開發人員處理多語言應用程式或傳統文件格式的理想解決方案。
垂直排版的主要功能。
- ✅ 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 141 |
{***********************************************************} // HotPDF PDF Component // Copyright(c)2007-2025, https://www.loslab.com {***********************************************************} { Unit: uVerticalText Purpose: Demonstrates vertical text output capabilities in HotPDF Features: - Horizontal and vertical text rendering - Multi-language support (English, Korean, Japanese, Chinese) - Unicode character handling - Font embedding for proper display } 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; // HotPDF component for PDF generation type // Main form class for the vertical text demonstration TForm1 = class(TForm) Button1: TButton; // Button to trigger PDF generation procedure Button1Click(Sender: TObject); private {Private declarations} public {Public declarations} end; var Form1: TForm1; // Main form instance HotPDF: THotPDF; // HotPDF component instance implementation {$R *.DFM} // Important Note: Old version of Delphi cannot handle Unicode characters correctly. // You need Delphi 2009 or above to open this file. { Method: Button1Click Purpose: Demonstrates vertical and horizontal text output with multiple languages Parameters: Sender - The object that triggered the event Features: - Creates a PDF with both horizontal and vertical text - Shows text in multiple languages (English, Korean, Japanese, Chinese) - Uses Unicode font for proper character display - Demonstrates different text positioning techniques } procedure TForm1.Button1Click(Sender: TObject); begin // Create HotPDF instance HotPDF := THotPDF.Create(nil); try // Configure PDF generation settings HotPDF.AutoLaunch := true; // Automatically open PDF after creation HotPDF.FontEmbedding := true; // Embed fonts for proper display HotPDF.FileName := 'VerticalText.pdf'; // Set output filename // Begin PDF document creation HotPDF.BeginDoc; HotPDF.CurrentPage.Size := psA4; // Set page size to A4 // === HORIZONTAL TEXT DEMONSTRATION === HotPDF.CurrentPage.SetFont('Arial Unicode MS', [], 12, 0, False); // Set horizontal text mode // Output horizontal text in multiple languages HotPDF.CurrentPage.TextOut(80, 70, 0, 'Horizontal Text 가로텍스트 가로쓰기 横向きのテキスト 横書き 横向文本 横書'); // Add decorative separator line HotPDF.CurrentPage.TextOut(40, 110, 0, '※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※'); // === VERTICAL TEXT DEMONSTRATION === HotPDF.CurrentPage.SetFont('Arial Unicode MS', [], 12, 0, true); // Set vertical text mode // Mixed language vertical text (Korean, Japanese) HotPDF.CurrentPage.TextOut(530, 180, 0, '縦書 縦書き 세로쓰기 垂直テキスト 수직 텍스트'); // Chinese text - Declaration of Independence excerpt HotPDF.CurrentPage.SetFont('Arial Unicode MS', [], 12, 0, true); HotPDF.CurrentPage.TextOut(500, 180, 0, '『我等之见解为,下述真理不证自明:凡人生而平等,秉造物者之赐,'); HotPDF.CurrentPage.TextOut(470, 180, 0, '拥诸无可转让之权利,包含生命权、自由权、与追寻幸福之权。』'); // Japanese text - Traditional poetry 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, '嗚呼古城なにをか語り、岸の波なにをか答ふ、過し世を静かに思へ'); // Chinese classical poetry - Li Bai's poem HotPDF.CurrentPage.TextOut(270, 180, 0, '棄我去者昨日之日不可留,亂我心者今日之日多煩憂。'); HotPDF.CurrentPage.TextOut(240, 180, 0, '長風萬里送秋鴈,對此可以酣高樓。蓬萊文章建安骨,中間小謝又清發'); HotPDF.CurrentPage.TextOut(210, 180, 0, '俱懷逸興壯思飛,欲上青天攬明月。抽刀斷水水更流,舉杯消愁愁更愁'); HotPDF.CurrentPage.TextOut(180, 180, 0, '人生在世不稱意。明朝散髮弄扁舟。'); // Korean text - Contemporary poetry // Note: Using Arial Unicode MS instead of Malgun Gothic for compatibility //HotPDF.CurrentPage.SetFont('Malgun Gothic', [], 12, 0, true); // Alternative Korean font HotPDF.CurrentPage.TextOut(140, 180, 0, '눈 맞으며 어둠 속을 떨며 가는 사람들을트、노래가 길이 되어 앞질러 가고'); HotPDF.CurrentPage.TextOut(110, 180, 0, '돌아올 길 없는 눈길 앞질러 가고'); HotPDF.CurrentPage.TextOut(80, 180, 0, '아름다움이 이 세상을 건질 때까지'); HotPDF.CurrentPage.TextOut(50, 180, 0, '절망에서 즐거움이 찾아올 때까지'); // === FOOTER DECORATION === HotPDF.CurrentPage.SetFont('Arial Unicode MS', [], 12, 0, False); // Switch back to horizontal text // Add decorative footer line HotPDF.CurrentPage.TextOut(40, 720, 0, '■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■'); // Finalize PDF document HotPDF.EndDoc; finally // Clean up resources HotPDF.Free; end; end; end. |
技術實現細節。
字型選擇和 Unicode 支援。
在處理 PDF 中的垂直文本時,正確的字型選擇對於確保不同語言的字元正確顯示至關重要。
- Arial Unicode MS具有全面的 Unicode 字型,支援大部分 CJK 字元。
- 字型嵌入。始終啟用。
FontEmbedding := true以確保一致的顯示效果。 - 字元編碼。使用 UTF-8 編碼以正確處理 Unicode 字元。
文本定位的最佳實踐
垂直文本定位需要仔細考慮閱讀流程和字元間距。
- 從右向左的列布局: 從最右邊的位置開始,然後依次向左排列後續的列。
- 從上到下的字元流程: 每列中的字元從上到下排列。
- 保持一致的間距: 保持統一的列間距,以獲得專業的視覺效果。
- 混合指令碼處理: 考慮混合拉丁文和CJK字元時,不同字元寬度的問題
高階功能和自定義
效能最佳化技巧
- 🚀 批次文本操作: 將多個文本輸出組合在一起,以減少PDF操作
- 🚀 字型快取: 儘可能重用字型物件以提高效能
- 🚀 記憶體管理正確地銷燬 HotPDF 例項以防止記憶體洩漏。
- 🚀 流處理。對於大型文件,請使用記憶體流以提高處理速度。
常見問題排查
⚠️ 常見問題和解決方案。
- 缺失的字元。確保所選字型支援所有必需的 Unicode 範圍。
- 位置不正確。驗證對座標系統的理解(HotPDF 使用左上角作為原點)。
- 字型渲染問題: 啟用字型嵌入,並使用合適的 Unicode 字型
- 效能問題: 最佳化文本輸出呼叫,並考慮文件結構
相關資源和進一步閱讀
文件和支援
- 📚 HotPDF 元件官方產品頁面
- 📚 losLab 部落格 – PDF 開發教程
- 📚 Unicode 標準: 瞭解字元編碼,用於國際化應用
- 📚 PDF 規範: Adobe PDF 參考,用於高階定製
相關主題
- 🔗 PDF 文本渲染: PDF 文件中的高階排版技術
- 🔗 多語言 PDF 生成處理複雜的指令碼和從右向左的語言。
- 🔗 Delphi Unicode 程式設計。Delphi 應用程式中處理 Unicode 的最佳實踐。
- 🔗 亞洲排版。傳統和現代的 CJK 文本佈局方法。
結論。
好的。 HotPDF Delphi 元件 它提供強大的垂直文本佈局支援,使其成為開發人員在處理傳統亞洲排版或需要垂直文本方向的現代設計應用程式時的絕佳選擇。 通過正確實現 Unicode 字型、仔細的定位以及關注文化排版約定,您可以建立尊重傳統閱讀模式的專業 PDF 文件,同時保持現代技術標準。
無論您是為出版、文件管理還是創意設計開發應用程式,HotPDF 的垂直文本功能使您能夠建立在文化上合適且具有視覺吸引力的 PDF 文件,以服務於不同的全球受眾。