기술 문서

HotPDF 구성 요소 세로 텍스트 샘플 프로젝트

· PDF 프로그래밍

HotPDF Delphi 컴포넌트: PDF 문서에서 수직 텍스트 레이아웃 생성

이 포괄적인 가이드에서는 HotPDF 컴포넌트가 개발자가 PDF 문서에서 Unicode 수직 텍스트를 쉽게 생성할 수 있도록 지원합니다.

수직 편집 이해 (縦書き/세로쓰기/竖排)

수직 편집, 또는 수직 쓰기라고도 합니다.중국어의 "縱書" 또는 일본어의 "tategaki (縦書き)"는 2,000년 이상 전 고대 중국에서 유래한 전통적인 텍스트 배치 방법입니다. 이 글쓰기 방식은 위에서 아래로, 오른쪽에서 왼쪽으로 흐르며 독특한 시각적 효과를 만들어내며 깊은 문화적 의미를 지닙니다.

역사적, 문화적 배경

수직 문자 체계는 동아시아 문학과 기록에서 중요한 역할을 해왔습니다.

  • 중국전통 중국어 텍스트, 고전 시, 그리고 서예는 주로 수직 방식을 사용했습니다. 현대 간체 중국어는 주로 수평 방식을 사용하지만, 수직 글씨는 여전히 예술 및 의례적인 맥락에서 흔히 사용됩니다.
  • 일본.일본어는 세로 쓰기(縦書き/tategaki)와 가로 쓰기(横書き/yokogaki) 방식을 모두 사용합니다. 세로 쓰기는 여전히 소설, 만화, 신문, 전통 문서 등에서 널리 사용됩니다.
  • 한국어: 한국과거에는 주로 세로쓰기를 사용했지만, 현대 한국어(한글)는 주로 가로 방향으로 작성됩니다. 세로쓰기는 전통적인 맥락이나 예술적인 용도에서 주로 사용됩니다.
  • 베트남: 베트남어에서 한자(Chữ Hán)를 사용할 때, 전통적으로는 수직 레이아웃을 사용했지만, 라틴 문자 채택 이후 이러한 방식은 거의 사라졌습니다.

수직 텍스트의 현대적 활용

전 세계적으로 수평 쓰기가 주류가 되었지만, 수직 텍스트 레이아웃은 여전히 다음과 같은 맥락에서 관련성이 있습니다.

  • 출판: 대만, 일본, 홍콩의 전통 소설, 시집, 문학 작품
  • 디자인: 로고, 표지판, 시각적 효과가 필요한 예술 작품 레이아웃
  • 디지털 미디어: 전자책, 모바일 애플리케이션 및 웹 콘텐츠로, 기존의 독서 선호도를 반영합니다.
  • 문서: 법률 문서, 인증서 및 공식 커뮤니케이션을 기존 형식으로 제공합니다.

HotPDF 컴포넌트: 전문 수직 텍스트 지원

The HotPDF Delphi 컴포넌트를 사용하여 PDF 문서에서 수직 텍스트 레이아웃을 완벽하게 지원하므로, 다국어 애플리케이션 또는 기존 문서 형식을 사용하는 개발자에게 이상적인 솔루션입니다.

수직 타이포그래피의 주요 기능

  • 유니코드 지원: CJK (중국어, 일본어, 한국어) 문자 세트에 대한 완벽한 호환성
  • 글꼴 임베딩.다양한 시스템에서 일관된 표시를 보장합니다.
  • 혼합 레이아웃동일 문서에서 가로 및 세로 텍스트를 결합합니다.
  • 정확한 위치 조정텍스트 배치에 대한 픽셀 단위의 완벽한 제어.
  • 다국어 지원복잡한 문자 및 문자 조합을 처리합니다.
HotPDF Component generating vertical text in PDF - showing Chinese, Japanese, and Korean characters in traditional vertical layout
그림 1: HotPDF 구성 요소에 의해 생성된 세로 텍스트 레이아웃의 PDF 문서로, 중국어(中文), 일본어(日本語) 및 한국어(한국어) 세로 글꼴에 대한 다국어 지원을 보여줍니다.

구현 가이드: 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.

기술 구현 세부 정보

글꼴 선택 및 유니코드 지원.

PDF에서 수직 텍스트를 사용할 때, 올바른 글꼴 선택은 다양한 언어에서 정확한 문자 표시를 보장하는 데 중요합니다.

  • Arial Unicode MS대부분의 CJK 문자를 지원하는 포괄적인 유니코드 글꼴.
  • 글꼴 임베딩.항상 활성화. FontEmbedding := true 일관된 표시를 보장하기 위해.
  • 문자 인코딩유니코드 문자를 올바르게 처리하려면 UTF-8 인코딩을 사용하십시오.

텍스트 배치 모범 사례

수직 텍스트 배치는 읽기 흐름과 문자 간 간격을 신중하게 고려해야 합니다.

  1. 오른쪽에서 왼쪽으로 흐르는 열: 오른쪽 가장자리에서 시작하여 이후 열은 왼쪽으로 이동합니다.
  2. 위에서 아래로 흐르는 문자: 각 열 내의 문자는 위에서 아래로 흐릅니다.
  3. 일관된 간격: 전문적인 외관을 위해 열 간 간격을 균일하게 유지합니다.
  4. 혼합 스크립트 처리: 라틴 문자 및 CJK 문자 스크립트를 혼합할 때 다양한 문자 폭을 고려하십시오.

고급 기능 및 사용자 정의

성능 최적화 팁

  • 🚀 일괄 텍스트 작업: PDF 작업을 최소화하기 위해 여러 텍스트 출력을 그룹화합니다.
  • 🚀 글꼴 캐싱: 가능한 경우 글꼴 객체를 재사용하여 성능을 향상시킵니다.
  • 🚀 메모리 관리HotPDF 인스턴스를 올바르게 폐기하여 메모리 누수를 방지하십시오.
  • 🚀 스트림 처리대용량 문서의 경우 메모리 스트림을 사용하여 처리 속도를 향상시키십시오.

일반 문제 해결

⚠️ 일반적인 문제 및 해결 방법

  • 누락된 문자선택한 글꼴이 필요한 모든 유니코드 범위를 지원하는지 확인하십시오.
  • 잘못된 위치좌표 시스템 이해 여부를 확인하십시오 (HotPDF는 왼쪽 상단 원점을 사용합니다).
  • 글꼴 렌더링 문제: 글꼴 포함을 활성화하고 적절한 유니코드 글꼴을 사용하십시오.
  • 성능 문제: 텍스트 출력 호출을 최적화하고 문서 구조를 고려하십시오.

관련 자료 및 추가 정보

문서 및 지원

관련 주제

  • 🔗 PDF 텍스트 렌더링: PDF 문서에서의 고급 서체 기술
  • 🔗 다국어 PDF 생성복잡한 스크립트 및 오른쪽에서 왼쪽으로 쓰는 언어 처리
  • 🔗 Delphi 유니코드 프로그래밍Delphi 애플리케이션에서 유니코드 처리에 대한 최적의 방법
  • 🔗 아시아 타이포그래피CJK 텍스트 레이아웃에 대한 전통적 및 현대적 접근 방식

결론

The HotPDF Delphi 컴포넌트를 사용하여 강력한 수직 텍스트 레이아웃 지원 기능을 제공하므로, 전통적인 아시아 타이포그래피를 사용하거나 수직 텍스트 방향이 필요한 현대적인 디자인 애플리케이션을 개발하는 개발자에게 훌륭한 선택입니다. 유니코드 폰트의 적절한 구현, 신중한 배치 및 문화적 타이포그래피 규칙에 대한 주의를 기울이면, 전통적인 읽기 방식을 존중하면서도 현대적인 기술 표준을 유지하는 전문적인 PDF 문서를 만들 수 있습니다.

출판, 문서 관리 또는 창의적인 디자인을 위한 애플리케이션을 개발하든, HotPDF의 수직 텍스트 기능은 다양한 글로벌 청중에게 적합하고 시각적으로 매력적인 PDF 문서를 만들 수 있도록 해줍니다.