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 文档,以服务于不同的全球受众。