Образец HotPDF компонента Delphi TextOut – Стилизация шрифтов и кодировки
Этот всеобъемлющий образец TextOut компонента HotPDF демонстрирует продвинутую обработку шрифтов, поддержку кодировок, масштабирование текста, настройку интервалов и режимы рендеринга. Образец генерирует подробные демонстрации шрифтов и кодировок с практическими примерами для генерации PDF в приложениях Delphi.
Демонстрируемые ключевые функции
- Поддержка семейств шрифтов: Arial, Times New Roman, Courier New с различными стилями
- Обработка кодировок: Арабская, восточноевропейская, OEM, русская и турецкая кодировки
- Масштабирование текста: Горизонтальное сжатие и расширение текста
- Интервалы между символами: Тонкая настройка интервалов между символами для улучшения читаемости
- Интервалы между словами: Настройка пространства между словами для лучшей компоновки текста
- Режимы рендеринга: Заливка, обводка, заливка+обводка и невидимый рендеринг текста
📝 Важное примечание
ShowCharset используется только для технической демонстрации отображения символов из кодировки через коды символов. Для обычного отображения текста вы можете просто использовать TextOut для прямого отображения желаемой строки без необходимости указания каких-либо кодов символов.
Процедура ShowCharset в этом образце специально разработана для демонстрации того, как различные кодировки символов отображают отдельные символы по их Unicode/ASCII кодам. В реальных приложениях просто используйте метод TextOut с вашими текстовыми строками напрямую.
Техническая реализация
Этот образец демонстрирует всеобъемлющие возможности вывода текста компонента 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 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 485 | {***************************************************************} // Компонент 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 - Начальный код символа Unicode/ASCII @param Last: Integer - Конечный код символа Unicode/ASCII (включительно) @param Y1: Integer - Y координата для отображения названия кодировки @param Y2: Integer - Y координата для отображения сетки символов ДИАПАЗОНЫ СИМВОЛОВ: Каждая кодировка отображает символы из определенных диапазонов Unicode/ASCII: - ARABIC_CHARSET: Unicode 1536-1625 (символы арабского блока) - EASTEUROPE_CHARSET: Unicode 160-249 (дополнение Latin-1) - OEM_CHARSET: ASCII 32-121 (печатаемые символы ASCII) - RUSSIAN_CHARSET: Unicode 1024-1113 (символы кириллического блока) - TURKISH_CHARSET: Unicode 161-255 (печатаемые расширенные Latin) КОМПОНОВКА ОТОБРАЖЕНИЯ: Символы расположены в 3 ряда по 30 символов в ряду: - Ряд 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); // Арабская кодировка: диапазон Unicode U+0600-U+0659 (90 символов) // Диапазон: 1536-1625 (арабский блок, включающий буквы, пунктуацию, цифры и диакритические знаки) // Отображает 90 арабских символов в 3 ряда по 30 символов в каждом // Используется для: арабского, персидского, урду, пушту, курдского и других 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); // Восточноевропейская кодировка: диапазон Unicode U+00A0-U+00F9 (90 символов) // Диапазон: 160-249 (дополнение Latin-1 с символами с диакритическими знаками и символами) // Отображает 90 расширенных латинских символов в 3 ряда по 30 символов в каждом // Используется для: французского, немецкого, испанского, португальского, итальянского, голландского, скандинавских языков // ShowCharset предназначен только для демонстрации отображения символов из кодировки через коды символов // для обычного отображения текста вам нужно только использовать TextOut для прямого показа требуемой строки ShowCharset(EASTEUROPE_CHARSET, 160, 249, 325, 350); CurrnetOutline.AddChild('OEM_CHARSET', 50, 425); // OEM кодировка: диапазон ASCII 32-121 (90 символов) // Диапазон: 32-121 (печатаемые ASCII, включая пробел, символы, цифры и буквы) // Отображает 90 символов ASCII в 3 ряда по 30 символов в каждом // Используется для: DOS приложений, вывода консоли, устаревших систем ShowCharset(OEM_CHARSET, 32, 121, 425, 450); CurrnetOutline.AddChild('RUSSIAN_CHARSET', 50, 525); // Русская кодировка: диапазон Unicode U+0400-U+0459 (90 символов) // Диапазон: 1024-1113 (кириллический блок, включающий русские, украинские, болгарские буквы) // Отображает 90 кириллических символов в 3 ряда по 30 символов в каждом // Используется для: русского, болгарского, сербского (кириллица), македонского, украинского, белорусского ShowCharset(RUSSIAN_CHARSET, 1024, 1113, 525, 550); CurrnetOutline.AddChild('TURKISH_CHARSET', 50, 625); // Турецкая кодировка: диапазон Unicode U+00A1-U+00FF (95 символов) // Диапазон: 161-255 (печатаемое дополнение Latin-1, избегая управляющих символов 128-160) // Отображает 90 символов в 3 ряда по 30 символов в каждом (первые 90 из 95 доступных) // Включает турецкие специальные символы: Ç(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('П')); // Демонстрация режима рендеринга обводки - только контурный текст HotPDF.CurrentPage.SetTextRenderingMode(trStroke); HotPDF.CurrentPage.TextOut(215, 670, 0, WideString('Д')); // Демонстрация режима рендеринга заливка+обводка - залитый текст с цветным контуром HotPDF.CurrentPage.SetTextRenderingMode(trFillThenStroke); HotPDF.CurrentPage.TextOut(340, 670, 0, WideString('Ф')); // Демонстрация невидимого режима рендеринга - текст присутствует, но не виден // (полезно для поисковых текстов поверх изображений или продвинутых техник компоновки) HotPDF.CurrentPage.SetTextRenderingMode(trInvisible); HotPDF.CurrentPage.TextOut(475, 670, 0, WideString('Х')); // Сброс к режиму рендеринга по умолчанию для любого последующего текста 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.