HotPDF 컴포넌트 Delphi TextOut 샘플 – 폰트 스타일링 및 문자셋
이 포괄적인 HotPDF 컴포넌트 TextOut 샘플은 고급 폰트 처리, 문자셋 지원, 텍스트 스케일링, 간격 조정 및 렌더링 모드를 시연합니다. 이 샘플은 Delphi 애플리케이션에서 PDF 생성을 위한 실용적인 예제와 함께 상세한 폰트 및 문자셋 데모를 생성합니다.
다양한 스타일의 Arial, Times New Roman, Courier New를 보여주는 폰트 패밀리 데모
고급 텍스트 포맷팅: 스케일링, 문자/단어 간격, 렌더링 모드
시연된 주요 기능
- 폰트 패밀리 지원: 다양한 스타일의 Arial, Times New Roman, Courier New
- 문자셋 처리: 아랍어, 동유럽, OEM, 러시아어, 터키어 문자셋
- 텍스트 스케일링: 수평 텍스트 압축 및 확장
- 문자 간격: 가독성 향상을 위한 문자 간격 미세 조정
- 단어 간격: 더 나은 텍스트 레이아웃을 위한 단어 간 공간 조정
- 렌더링 모드: 채우기, 윤곽선, 채우기+윤곽선, 투명 텍스트 렌더링
📝 중요 참고사항
ShowCharset은 문자 코드를 통해 문자셋의 문자를 표시하는 것을 기술적으로 시연하기 위해서만 사용됩니다. 일반적인 텍스트 표시의 경우, 문자 코드를 지정할 필요 없이 TextOut을 사용하여 원하는 문자열을 직접 표시할 수 있습니다.
이 샘플의 ShowCharset 프로시저는 다양한 문자 인코딩이 유니코드/ASCII 코드로 개별 문자를 렌더링하는 방법을 보여주기 위해 특별히 설계되었습니다. 실제 애플리케이션에서는 텍스트 문자열과 함께 TextOut 메서드를 직접 사용하기만 하면 됩니다.
기술적 구현
이 샘플은 다음을 포함하여 HotPDF 컴포넌트의 포괄적인 텍스트 출력 기능을 보여줍니다:
- 일관된 크로스 플랫폼 표시를 위한 폰트 임베딩
- 국제 텍스트를 위한 유니코드 문자 지원
- 고급 텍스트 위치 지정 및 회전
- 탐색을 위한 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 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 | {***************************************************************} // HotPDF PDF 컴포넌트 - 텍스트 스타일링 및 문자셋 데모 // Copyright(c)2007-2025, https://www.loslab.com {***************************************************************} program TextOut; {$APPTYPE CONSOLE} {$I ..\..\..\Lib\HotPDF.inc} uses {$IFDEF XE2+} WinApi.Windows, System.SysUtils, System.Classes, Vcl.Graphics, {$ELSE} Windows, SysUtils, Classes, Graphics, {$ENDIF} HPDFDoc; // PDF 문서 및 개요 관리를 위한 전역 변수 var HotPDF: THotPDF; // 메인 HotPDF 컴포넌트 인스턴스 OutlineRoot: THPDFDocOutlineObject; // 문서 탐색을 위한 루트 개요 객체 CurrnetOutline: THPDFDocOutlineObject; // 중첩 구조를 위한 현재 개요 객체 { ==================================================================== ShowFontGroup - 다양한 스타일로 폰트 패밀리 표시 ==================================================================== 목적: 동일한 폰트를 다양한 스타일(일반, 굵게, 기울임, 굵게-기울임)로 다양한 텍스트 회전 각도와 함께 표시하는 방법을 시연합니다. 매개변수: @param FontGroup: String - 표시할 폰트 패밀리 이름 (예: 'Arial') @param Position: Integer - 텍스트 배치를 위한 X 좌표 기능: 1. 기본 위치에서 일반 스타일로 폰트 이름 표시 2. 양의 회전(+1도)으로 굵은 버전 표시 3. 음의 회전(-1도)으로 기울임 버전 표시 4. 일반 방향으로 굵게-기울임 조합 표시 레이아웃: 각 폰트 스타일은 이전 것보다 20픽셀 아래에 표시됩니다 } procedure ShowFontGroup(FontGroup: AnsiString; Position: Integer); begin // procedure SetFont ( FontName: AnsiString; FontStyle: TFontStyles; ASize: Single; FontCharset: TFontCharset; IsVertiacal: Boolean); // 일반 폰트 스타일 표시 HotPDF.CurrentPage.SetFont(FontGroup, [], 12); // 스타일 수정자 없이 폰트 설정 // procedure TextOut ( X, Y: Single; Angle: Extended; Text: WideString); HotPDF.CurrentPage.TextOut(Position, 70, 0, WideString(FontGroup)); // 기본 Y 위치(70)에 표시 // 약간의 양의 회전으로 굵은 폰트 스타일 표시 HotPDF.CurrentPage.SetFont(FontGroup, [fsBold], 12); // 굵은 스타일 적용 HotPDF.CurrentPage.TextOut(Position, 90, 1, WideString(FontGroup + '-Bold')); // +1도 회전, Y+20 // 약간의 음의 회전으로 기울임 폰트 스타일 표시 HotPDF.CurrentPage.SetFont(FontGroup, [fsItalic], 12); // 기울임 스타일 적용 HotPDF.CurrentPage.TextOut(Position, 110, - 1, WideString(FontGroup + '-Italic')); // -1도 회전, Y+40 // 회전 없이 굵게-기울임 조합 표시 HotPDF.CurrentPage.SetFont(FontGroup, [fsBold, fsItalic], 12); // 굵게와 기울임 모두 적용 HotPDF.CurrentPage.TextOut(Position, 130, 0, WideString(FontGroup + '-Bold-Italic')); // 일반 방향, Y+60 end; { ==================================================================== ShowCharset - 특정 문자셋의 문자 표시 ==================================================================== 목적: 다양한 문자 인코딩에 대한 적절한 문자 표시를 시연합니다 매개변수: @param FontCharset: TFontCharset - Windows 문자셋 식별자 @param First: Integer - 시작 유니코드/ASCII 문자 코드 @param Last: Integer - 끝 유니코드/ASCII 문자 코드 (포함) @param Y1: Integer - 문자셋 이름 표시를 위한 Y 좌표 @param Y2: Integer - 문자 그리드 표시를 위한 Y 좌표 문자 범위: 각 문자셋은 특정 유니코드/ASCII 범위의 문자를 표시합니다: - ARABIC_CHARSET: 유니코드 1536-1625 (아랍어 블록 문자) - EASTEUROPE_CHARSET: 유니코드 160-249 (Latin-1 보충) - OEM_CHARSET: ASCII 32-121 (인쇄 가능한 ASCII 문자) - RUSSIAN_CHARSET: 유니코드 1024-1113 (키릴 문자 블록) - TURKISH_CHARSET: 유니코드 161-255 (인쇄 가능한 Latin 확장) 표시 레이아웃: 문자는 행당 30문자씩 3행으로 배열됩니다: - 1행: 문자 0-29, X=50에서 시작 - 2행: 문자 30-59, X=50에서 시작, Y+20 - 3행: 문자 60-89, X=50에서 시작, Y+40 - 문자 간격: 수평 16픽셀, 수직 20픽셀 } procedure ShowCharset(FontCharset: TFontCharset; First, Last: Integer; Y1, Y2: Integer); var i: Integer; // 문자 반복을 위한 루프 카운터 CSName: AnsiString; // 표시를 위한 문자셋 이름 XPos, YPos: Integer; // 위치 변수 CharCode: Integer; // 표시할 문자 코드 CharCount: Integer; // 표시할 문자 수 Row: Integer; // 현재 행 (1, 2, 또는 3) CharInRow: Integer; // 현재 행 내 문자 위치 begin // 설명적 이름을 가진 문자셋 구성 case FontCharset of ARABIC_CHARSET: CSName := 'ARABIC_CHARSET'; EASTEUROPE_CHARSET: CSName := 'EASTEUROPE_CHARSET'; OEM_CHARSET: CSName := 'OEM_CHARSET'; RUSSIAN_CHARSET: CSName := 'RUSSIAN_CHARSET'; TURKISH_CHARSET: CSName := 'TURKISH_CHARSET'; else CSName := 'DEFAULT_CHARSET'; end; // 90문자 표시하도록 문자 수 설정 (행당 30문자 × 3행) CharCount := 90; if Last - First + 1 < CharCount then CharCount := Last - First + 1; // 문자셋 헤더 표시 HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsItalic], 12); HotPDF.CurrentPage.TextOut(50, Y1, 0, WideString(CSName + ' example: ')); // 문자셋 사양과 함께 문자 표시를 위한 적절한 폰트 설정 HotPDF.CurrentPage.SetFont('Arial', [], 14, FontCharset); // 들여쓰기 없이 3행 레이아웃으로 문자 표시 for i := 0 to CharCount - 1 do begin // 행과 행 내 위치 결정 if i < 30 then begin // 첫 번째 행: 30문자, 제목과 정렬 (x=50) Row := 1; CharInRow := i; XPos := 50 + CharInRow * 16; YPos := Y2; end else if i < 60 then begin // 두 번째 행: 30문자, 제목과 정렬 (x=50) Row := 2; CharInRow := i - 30; XPos := 50 + CharInRow * 16; YPos := Y2 + 20; // 첫 번째 행 아래 20픽셀 end else begin // 세 번째 행: 나머지 문자, 제목과 정렬 (x=50) Row := 3; CharInRow := i - 60; XPos := 50 + CharInRow * 16; YPos := Y2 + 40; // 첫 번째 행 아래 40픽셀 end; // 문자 코드 계산 CharCode := First + i; try // 모든 문자에 대해 WideString 변환 사용 HotPDF.CurrentPage.TextOut(XPos, YPos, 0, WideString(WideChar(CharCode))); except // 오류가 발생하면 대체 문자 표시 HotPDF.CurrentPage.TextOut(XPos, YPos, 0, WideString('?')); end; end; end; { ==================================================================== ShowTable - 데모 테이블 구조 그리기 ==================================================================== 목적: 텍스트 포맷팅 효과를 시연하기 위한 간단한 테이블 구조를 생성합니다. 텍스트 스케일링, 문자 간격, 단어 간격 섹션에서 사용됩니다. 매개변수: @param X: Integer - 왼쪽 가장자리 X 좌표 @param Y: Integer - 위쪽 가장자리 Y 좌표 구조: 다음과 같이 나뉜 300x100픽셀 테이블을 생성합니다: - 위쪽 셀: 300x50픽셀 - 아래쪽 셀: 300x50픽셀 - 수직 구분선: 왼쪽 가장자리에서 130픽셀 모든 선은 가시성을 위해 스트로크 작업으로 그려집니다 } procedure ShowTable(X, Y: Integer); begin // 위쪽 테이블 셀 그리기 (300x50 사각형) HotPDF.CurrentPage.Rectangle(X, Y, 300, 50); HotPDF.CurrentPage.Stroke; // 아래쪽 테이블 셀 그리기 (300x50 사각형, 50픽셀 아래로 오프셋) HotPDF.CurrentPage.Rectangle(X, Y + 50, 300, 50); HotPDF.CurrentPage.Stroke; // 두 셀을 통과하는 수직 구분선 그리기 HotPDF.CurrentPage.MoveTo(X + 130, Y); // 위쪽 셀의 상단에서 시작 HotPDF.CurrentPage.LineTo(X + 130, Y + 100); // 아래쪽 셀의 하단까지 그리기 HotPDF.CurrentPage.Stroke; end; { ==================================================================== 메인 프로그램 실행 ==================================================================== 이것은 모든 HotPDF 텍스트 출력 기능을 시연하는 메인 프로그램 본문입니다. 프로그램은 섹션으로 구성되어 있으며, 각각 텍스트 처리의 특정 측면을 시연합니다: 1. 폰트 그룹 - 다양한 폰트 패밀리와 스타일 표시 2. 문자셋 - 문자 인코딩 처리 시연 3. 텍스트 스케일링 - 수평 텍스트 스케일링 효과 표시 4. 문자 간격 - 문자 간격 조정 시연 5. 단어 간격 - 단어 간격 수정 표시 6. 렌더링 모드 - 다양한 텍스트 렌더링 효과 표시 각 섹션에는 적절한 헤더, 탐색 개요, 그리고 해당하는 경우 전후 비교와 함께 실용적인 예제가 포함됩니다. } begin // HotPDF 컴포넌트 초기화 HotPDF := THotPDF.Create(nil); try // 최적의 텍스트 표시를 위한 PDF 문서 속성 구성 HotPDF.AutoLaunch := true; // 생성 후 PDF 자동 열기 HotPDF.FontEmbedding := true; // 시스템 간 일관된 문자 표시를 위한 폰트 임베딩 활성화 HotPDF.StandardFontEmulation := false; // 문자 매핑 문제를 방지하기 위해 폰트 에뮬레이션 비활성화 HotPDF.FileName := 'TextOut.pdf'; // 출력 파일명 설정 HotPDF.PageLayout := plOneColumn; // 뷰어가 한 열을 표시하도록 구성 // PDF 문서 생성 시작 HotPDF.BeginDoc(true); // 압축이 활성화된 PDF 생성 OutlineRoot := HotPDF.OutlineRoot; // 문서 개요 탐색 초기화 // ==================================================================== // 섹션 1: 폰트 그룹 시연 // ==================================================================== // 이 섹션은 다양한 폰트 패밀리가 다양한 스타일 조합 // (일반, 굵게, 기울임, 굵게-기울임)으로 어떻게 나타나는지 시연합니다 // 향상된 포맷팅으로 섹션 헤더 생성 HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20); HotPDF.CurrentPage.TextOut(195, 30, 0, WideString('폰트 표시')); // 이 섹션에 대한 탐색 개요 항목 추가 OutlineRoot.AddChild('폰트 표시', 195, 30); // 좌표에 링크 // 시스템 전반에서 일반적으로 사용 가능한 세 가지 주요 폰트 패밀리 표시 ShowFontGroup('Arial', 50); // X=50에서 산세리프 폰트 ShowFontGroup('Times New Roman', 180); // X=180에서 세리프 폰트 ShowFontGroup('Courier New', 350); // X=350에서 고정폭 폰트 // ==================================================================== // 섹션 2: 문자셋 시연 // ==================================================================== // 이 섹션은 다양한 Windows 문자 인코딩의 적절한 처리를 시연합니다 // 섹션 헤더 생성 HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20); HotPDF.CurrentPage.TextOut(200, 170, 0, WideString('문자셋')); // 확장 가능한 구조로 문자셋에 대한 개요 그룹 생성 // OutlineRoot.AddChild: PDF 탐색 트리에 새 북마크/개요 항목 생성 // 매개변수: ('제목', X좌표, Y좌표) // - '문자셋': PDF 개요/북마크 패널에 표시되는 표시 텍스트 // - 250: 클릭 시 탐색할 X좌표 (수평 위치) // - 170: 클릭 시 탐색할 Y좌표 (수직 위치) CurrnetOutline := OutlineRoot.AddChild('문자셋', 250, 170); CurrnetOutline.Opened := true; // 기본적으로 이 개요 섹션 확장 CurrnetOutline.AddChild('ARABIC_CHARSET', 50, 225); // 아랍어 문자셋: 유니코드 범위 U+0600-U+0659 (90문자) // 범위: 1536-1625 (문자, 구두점, 숫자, 발음 기호를 포함한 아랍어 블록) // 각각 30문자씩 3행으로 90개의 아랍어 문자 표시 // 사용 대상: 아랍어, 페르시아어, 우르두어, 파슈토어, 쿠르드어 및 기타 RTL 스크립트 // procedure ShowCharset(FontCharset: TFontCharset; First, Last: Integer; Y1, Y2: Integer); // First는 첫 번째 문자의 코드이며, Last 문자까지 순차적으로 출력 // Y1은 제목 Y 좌표이고, Y2는 시작 문자 Y 좌표 ShowCharset(ARABIC_CHARSET, 1536, 1625, 225, 250); CurrnetOutline.AddChild('EASTEUROPE_CHARSET', 50, 325); // 동유럽 문자셋: 유니코드 범위 U+00A0-U+00F9 (90문자) // 범위: 160-249 (악센트 문자와 기호가 있는 Latin-1 보충) // 각각 30문자씩 3행으로 90개의 확장 라틴 문자 표시 // 사용 대상: 프랑스어, 독일어, 스페인어, 포르투갈어, 이탈리아어, 네덜란드어, 북유럽 언어 // ShowCharset은 문자 코드를 통해 문자셋의 문자 표시를 시연하기 위한 것입니다 // 일반적인 텍스트 표시의 경우, TextOut을 사용하여 필요한 문자열을 직접 표시하기만 하면 됩니다 ShowCharset(EASTEUROPE_CHARSET, 160, 249, 325, 350); CurrnetOutline.AddChild('OEM_CHARSET', 50, 425); // OEM 문자셋: ASCII 범위 32-121 (90문자) // 범위: 32-121 (공백, 기호, 숫자, 문자를 포함한 인쇄 가능한 ASCII) // 각각 30문자씩 3행으로 90개의 ASCII 문자 표시 // 사용 대상: DOS 애플리케이션, 콘솔 출력, 레거시 시스템 ShowCharset(OEM_CHARSET, 32, 121, 425, 450); CurrnetOutline.AddChild('RUSSIAN_CHARSET', 50, 525); // 러시아어 문자셋: 유니코드 범위 U+0400-U+0459 (90문자) // 범위: 1024-1113 (러시아어, 우크라이나어, 불가리아어 문자를 포함한 키릴 문자 블록) // 각각 30문자씩 3행으로 90개의 키릴 문자 표시 // 사용 대상: 러시아어, 불가리아어, 세르비아어(키릴 문자), 마케도니아어, 우크라이나어, 벨라루스어 ShowCharset(RUSSIAN_CHARSET, 1024, 1113, 525, 550); CurrnetOutline.AddChild('TURKISH_CHARSET', 50, 625); // 터키어 문자셋: 유니코드 범위 U+00A1-U+00FF (95문자) // 범위: 161-255 (제어 문자 128-160을 피한 인쇄 가능한 Latin-1 보충) // 각각 30문자씩 3행으로 90문자 표시 (95개 중 처음 90개) // 터키어 특수 문자 포함: Ç(199), ç(231), Ğ(208), ğ(240), İ(221), ı(253), Ö(214), ö(246), Ş(222), ş(254), Ü(220), ü(252) // 사용 대상: 고유 문자와 유럽 기호가 있는 터키어 ShowCharset(TURKISH_CHARSET, 161, 255, 625, 650); // ==================================================================== // 섹션 3: 텍스트 스케일링 시연 // ==================================================================== // 이 섹션은 수평 텍스트 스케일링이 텍스트 모양에 미치는 영향을 보여줍니다 // 스케일링은 높이를 유지하면서 문자의 너비를 수정합니다 // 고급 텍스트 포맷팅 시연을 위한 새 페이지 시작 HotPDF.AddPage; HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20); OutlineRoot.AddChild('수평 텍스트 스케일링', 180, 40); // 메인 개요 탐색에 추가 HotPDF.CurrentPage.TextOut(180, 40, 0, WideString('수평 텍스트 스케일링')); // 비교 테이블 구조 생성 ShowTable(130, 80); // 비교를 위한 설명 레이블 추가 HotPDF.CurrentPage.SetFont('Times New Roman', [], 12); HotPDF.CurrentPage.TextOut(160, 100, 0, WideString('기본값 100')); // 일반 스케일링 레이블 HotPDF.CurrentPage.TextOut(165, 145, 0, WideString('50으로 설정')); // 압축 스케일링 레이블 // 일반 텍스트 스케일링 시연 (100% - 기본값) HotPDF.CurrentPage.SetFont('Times New Roman', [], 24); HotPDF.CurrentPage.TextOut(280, 95, 0, WideString('단어')); // 압축된 텍스트 스케일링 시연 (50% 너비) HotPDF.CurrentPage.SetHorizontalScaling(50); // 텍스트를 50% 너비로 압축 HotPDF.CurrentPage.TextOut(285, 140, 0, WideString('단어')); HotPDF.CurrentPage.SetHorizontalScaling(100); // 일반 스케일링으로 재설정 // ==================================================================== // 섹션 4: 문자 간격 시연 // ==================================================================== // 이 섹션은 문자 간격이 텍스트 가독성에 미치는 영향을 시연합니다 // 문자 간격은 개별 문자 사이에 균일한 공간을 추가합니다 HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20); OutlineRoot.AddChild('문자 간격', 200, 220); HotPDF.CurrentPage.TextOut(200, 220, 0, WideString('문자 간격')); // 비교 테이블 생성 ShowTable(130, 260); // 설명 레이블 추가 HotPDF.CurrentPage.SetFont('Times New Roman', [], 12); HotPDF.CurrentPage.TextOut(162, 280, 0, WideString('기본값 0')); // 일반 간격 레이블 HotPDF.CurrentPage.TextOut(162, 330, 0, WideString('간격 5로 설정')); // 확장 간격 레이블 // 일반 문자 간격 시연 (0 - 기본값) HotPDF.CurrentPage.SetFont('Times New Roman', [], 24); HotPDF.CurrentPage.TextOut(278, 275, 0, WideString('문자')); // 확장된 문자 간격 시연 (문자 사이에 +5 단위) HotPDF.CurrentPage.SetCharacterSpacing(5); // 각 문자 사이에 5 단위 추가 HotPDF.CurrentPage.TextOut(278, 320, 0, WideString('문자')); HotPDF.CurrentPage.SetCharacterSpacing(0); // 일반 간격으로 재설정 // ==================================================================== // 섹션 5: 단어 간격 시연 // ==================================================================== // 이 섹션은 단어 간격이 텍스트 레이아웃에 미치는 영향을 시연합니다 // 단어 간격은 단어 사이(공백 문자에서)에 특별히 공간을 추가합니다 HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20); OutlineRoot.AddChild('단어 간격', 200, 380); HotPDF.CurrentPage.TextOut(200, 380, 0, WideString('단어 간격')); // 비교 테이블 생성 ShowTable(130, 420); // 설명 레이블 추가 HotPDF.CurrentPage.SetFont('Times New Roman', [], 12); HotPDF.CurrentPage.TextOut(162, 440, 0, WideString('기본값 0')); // 일반 단어 간격 레이블 HotPDF.CurrentPage.TextOut(162, 490, 0, WideString('간격 10으로 설정')); // 확장 단어 간격 레이블 // 일반 단어 간격 시연 (0 - 기본값) HotPDF.CurrentPage.SetFont('Times New Roman', [], 24); HotPDF.CurrentPage.TextOut(280, 430, 0, WideString('단어 간격')); // 확장된 단어 간격 시연 (단어 사이에 +10 단위) HotPDF.CurrentPage.SetWordSpacing(10); // 단어 사이에 10 단위 추가 HotPDF.CurrentPage.TextOut(280, 480, 0, WideString('단어 간격')); HotPDF.CurrentPage.SetWordSpacing(0); // 일반 간격으로 재설정 // ==================================================================== // 섹션 6: 텍스트 렌더링 모드 시연 // ==================================================================== // 이 섹션은 PDF에서 사용 가능한 다양한 텍스트 렌더링 효과를 시연합니다 // 텍스트는 채우기, 윤곽선, 둘 다, 또는 투명(고급 효과용)으로 설정할 수 있습니다 HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20); OutlineRoot.AddChild('렌더링 모드', 200, 550); HotPDF.CurrentPage.TextOut(200, 550, 0, WideString('렌더링 모드')); // 렌더링 모드 비교를 위한 복잡한 테이블 구조 생성 // 메인 테이블 윤곽선 (500x150픽셀) HotPDF.CurrentPage.Rectangle(50, 600, 500, 150); HotPDF.CurrentPage.Stroke; // 동일한 너비의 4개 열을 만드는 수직 구분선 HotPDF.CurrentPage.MoveTo(175, 600); // 첫 번째 구분선 HotPDF.CurrentPage.LineTo(175, 750); HotPDF.CurrentPage.Stroke; HotPDF.CurrentPage.MoveTo(300, 600); // 두 번째 구분선 HotPDF.CurrentPage.LineTo(300, 750); HotPDF.CurrentPage.Stroke; HotPDF.CurrentPage.MoveTo(425, 600); // 세 번째 구분선 HotPDF.CurrentPage.LineTo(425, 750); HotPDF.CurrentPage.Stroke; // 헤더를 내용에서 분리하는 수평 구분선 HotPDF.CurrentPage.MoveTo(50, 665); HotPDF.CurrentPage.LineTo(550, 665); HotPDF.CurrentPage.Stroke; // 각 렌더링 모드를 설명하는 열 헤더 추가 HotPDF.CurrentPage.SetFont('Arial', [], 12); HotPDF.CurrentPage.TextOut(100, 620, 0, WideString('채우기')); // 채우기 모드 - 단색 텍스트 HotPDF.CurrentPage.TextOut(215, 620, 0, WideString('윤곽선')); // 윤곽선 모드 - 외곽선 텍스트 HotPDF.CurrentPage.TextOut(320, 620, 0, WideString('채우기 윤곽선')); // 결합 모드 - 외곽선이 있는 채우기 HotPDF.CurrentPage.TextOut(465, 620, 0, WideString('투명')); // 투명 모드 - 특수 효과용 // 극적인 렌더링 효과 시연을 위한 색상 구성 HotPDF.CurrentPage.SetFont('Arial', [fsBold], 72); // 명확한 가시성을 위한 큰 폰트 HotPDF.CurrentPage.SetRGBStrokeColor(clRed); // 빨간색 윤곽선 색상 HotPDF.CurrentPage.SetRGBFillColor(clYellow); // 노란색 채우기 색상 // 채우기 렌더링 모드 시연 - 단색 텍스트 HotPDF.CurrentPage.SetTextRenderingMode(trFill); HotPDF.CurrentPage.TextOut(90, 670, 0, WideString('P')); // 윤곽선 렌더링 모드 시연 - 윤곽선만 있는 텍스트 HotPDF.CurrentPage.SetTextRenderingMode(trStroke); HotPDF.CurrentPage.TextOut(215, 670, 0, WideString('D')); // 채우기+윤곽선 렌더링 모드 시연 - 색상 윤곽선이 있는 채워진 텍스트 HotPDF.CurrentPage.SetTextRenderingMode(trFillThenStroke); HotPDF.CurrentPage.TextOut(340, 670, 0, WideString('F')); // 투명 렌더링 모드 시연 - 텍스트는 존재하지만 보이지 않음 // (이미지 위의 검색 가능한 텍스트 또는 고급 레이아웃 기법에 유용) HotPDF.CurrentPage.SetTextRenderingMode(trInvisible); HotPDF.CurrentPage.TextOut(475, 670, 0, WideString('X')); // 후속 텍스트를 위해 기본 렌더링 모드로 재설정 HotPDF.CurrentPage.SetTextRenderingMode(trFillThenStroke); // PDF 문서 완료 및 저장 HotPDF.EndDoc; finally // HotPDF 컴포넌트의 적절한 정리 보장 HotPDF.Free; end; end. |
Discover more from losLab Software Development
Subscribe to get the latest posts sent to your email.