HotPDF Delphi组件:在PDF文档中创建垂直文本布局
本综合指南演示了HotPDF组件如何让开发者轻松在PDF文档中生成Unicode垂直文本。
理解垂直排版(縦書き/세로쓰기/竖排)
垂直排版,也称为垂直书写,中文称为縱書,日文称为tategaki(縦書き),是一种起源于2000多年前古代中国的传统文本布局方法。这种书写系统从上到下、从右到左流动,创造出具有深厚文化意义的独特视觉外观。
历史和文化背景
垂直书写系统在东亚文学和文献中发挥了重要作用:
- 中国:传统中文文本、古典诗歌和书法主要使用垂直布局。现代简体中文主要使用横向书写,但垂直文本在艺术和仪式场合仍然常见。
- 日本:日语保持垂直(縦書き/tategaki)和水平(横書き/yokogaki)两种书写系统。垂直文本仍广泛用于小说、漫画、报纸和传统文档。
- 韩国:历史上使用垂直书写(세로쓰기),但现代韩语(한글)主要使用水平布局。垂直文本出现在传统场合和艺术应用中。
- 越南:传统越南文本在使用汉字(Chữ Hán)书写时使用垂直布局,但随着拉丁字母的采用,这种做法已基本消失。
垂直文本的现代应用
尽管全球趋向于水平书写,垂直文本布局在几个方面仍然相关:
- 出版:台湾、日本和香港的传统小说、诗集和文学作品
- 设计:需要视觉冲击力的标志、标牌和艺术布局
- 数字媒体:针对传统阅读偏好的电子书、移动应用程序和网页内容
- 文档:传统格式的法律文件、证书和正式通信
HotPDF组件:专业垂直文本支持
HotPDF Delphi组件为PDF文档中的垂直文本布局提供全面支持,使其成为处理多语言应用程序或传统文档格式的开发者的理想解决方案。
垂直排版的关键特性
- ✅ Unicode支持:完全兼容CJK(中文、日文、韩文)字符集
- ✅ 字体嵌入:确保在不同系统上的一致显示
- ✅ 混合布局:在同一文档中结合水平和垂直文本
- ✅ 精确定位:对文本位置的像素级精确控制
- ✅ 多语言支持:处理复杂脚本和字符组合

实现指南:Delphi代码示例
以下综合Delphi代码示例演示了如何使用HotPDF组件实现垂直文本渲染。此示例展示了多种语言的水平和垂直文本布局。
突出显示的代码特性
- 字体配置:为多语言支持正确设置Unicode字体
- 文本定位:对垂直布局中文本位置的精确控制
- 语言混合:在同一文档中结合不同脚本(拉丁文、中日韩文字)
- 资源管理: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组件 // 版权所有(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, '人生在世不稱意。明朝散髮弄扁舟。'); // 韩文文本 - 当代诗歌 // 注意:为了兼容性使用Arial Unicode MS而不是Malgun Gothic //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
以确保一致显示 - 字符编码:使用UTF-8编码进行正确的Unicode字符处理
文本定位最佳实践
垂直文本定位需要仔细考虑阅读流程和字符间距:
- 从右到左的列流:从最右侧位置开始,后续列向左移动
- 从上到下的字符流:每列内的字符从上到下流动
- 一致的间距:保持统一的列间距以获得专业外观
- 混合脚本处理:混合拉丁文和中日韩文字时考虑不同的字符宽度
高级功能和自定义
性能优化技巧
- 🚀 批量文本操作:将多个文本输出分组以最小化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文档,为多样化的全球受众服务。