Этот всеобъемлющий образец TextOut компонента HotPDF демонстрирует продвинутую обработку шрифтов, поддержку кодировок, масштабирование текста, настройку интервалов и режимы рендеринга. Образец генерирует подробные демонстрации шрифтов и кодировок с практическими примерами для генерации PDF в приложениях Delphi.
ShowCharset используется только для технической демонстрации отображения символов из кодировки через коды символов. Для обычного отображения текста вы можете просто использовать TextOut для прямого отображения желаемой строки без необходимости указания каких-либо кодов символов.
Процедура ShowCharset в этом образце специально разработана для демонстрации того, как различные кодировки символов отображают отдельные символы по их Unicode/ASCII кодам. В реальных приложениях просто используйте метод TextOut с вашими текстовыми строками напрямую.
Этот образец демонстрирует всеобъемлющие возможности вывода текста компонента HotPDF, включая:
{***************************************************************} // Компонент 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.
HotPDF Delphi组件:在PDF文档中创建垂直文本布局 本综合指南演示了HotPDF组件如何让开发者轻松在PDF文档中生成Unicode垂直文本。 理解垂直排版(縦書き/세로쓰기/竖排) 垂直排版,也称为垂直书写,中文称为縱書,日文称为tategaki(縦書き),是一种起源于2000多年前古代中国的传统文本布局方法。这种书写系统从上到下、从右到左流动,创造出具有深厚文化意义的独特视觉外观。 历史和文化背景 垂直书写系统在东亚文学和文献中发挥了重要作用: 中国:传统中文文本、古典诗歌和书法主要使用垂直布局。现代简体中文主要使用横向书写,但垂直文本在艺术和仪式场合仍然常见。 日本:日语保持垂直(縦書き/tategaki)和水平(横書き/yokogaki)两种书写系统。垂直文本仍广泛用于小说、漫画、报纸和传统文档。 韩国:历史上使用垂直书写(세로쓰기),但现代韩语(한글)主要使用水平布局。垂直文本出现在传统场合和艺术应用中。 越南:传统越南文本在使用汉字(Chữ Hán)书写时使用垂直布局,但随着拉丁字母的采用,这种做法已基本消失。 垂直文本的现代应用 尽管全球趋向于水平书写,垂直文本布局在几个方面仍然相关: 出版:台湾、日本和香港的传统小说、诗集和文学作品…
HotPDF Delphi 컴포넌트: PDF 문서에서 세로쓰기 텍스트 레이아웃 생성 이 포괄적인 가이드는 HotPDF 컴포넌트를 사용하여…
HotPDF Delphiコンポーネント:PDFドキュメントでの縦書きテキストレイアウトの作成 この包括的なガイドでは、HotPDFコンポーネントを使用して、開発者がPDFドキュメントでUnicode縦書きテキストを簡単に生成する方法を実演します。 縦書き組版の理解(縦書き/세로쓰기/竖排) 縦書き組版は、日本語では縦書きまたはたてがきとも呼ばれ、2000年以上前の古代中国で生まれた伝統的なテキストレイアウト方法です。この書字体系は上から下、右から左に流れ、深い文化的意義を持つ独特の視覚的外観を作り出します。 歴史的・文化的背景 縦書きシステムは東アジアの文学と文書において重要な役割を果たしてきました: 中国:伝統的な中国語テキスト、古典詩、書道では主に縦書きレイアウトが使用されていました。現代の簡体字中国語は主に横書きを使用していますが、縦書きテキストは芸術的・儀式的な文脈で一般的です。 日本:日本語は縦書き(縦書き/たてがき)と横書き(横書き/よこがき)の両方の書字体系を維持しています。縦書きテキストは小説、漫画、新聞、伝統的な文書で広く使用されています。 韓国:歴史的には縦書き(세로쓰기)を使用していましたが、現代韓国語(한글)は主に横書きレイアウトを使用しています。縦書きテキストは伝統的な文脈や芸術的応用で見られます。 ベトナム:伝統的なベトナム語テキストは漢字(Chữ Hán)で書かれた際に縦書きレイアウトを使用していましたが、この慣行はラテン文字の採用とともにほぼ消失しました。 縦書きテキストの現代的応用 横書きへの世界的な傾向にもかかわらず、縦書きテキストレイアウトはいくつかの文脈で関連性を保っています: 出版:台湾、日本、香港の伝統的な小説、詩集、文学作品…
Отладка проблем порядка страниц PDF: Реальный кейс-стади компонента HotPDF Опубликовано losLab | Разработка PDF |…
PDF 페이지 순서 문제 디버깅: HotPDF 컴포넌트 실제 사례 연구 발행자: losLab | PDF 개발…
PDFページ順序問題のデバッグ:HotPDFコンポーネント実例研究 発行者:losLab | PDF開発 | Delphi PDFコンポーネント PDF操作は特にページ順序を扱う際に複雑になることがあります。最近、私たちはPDF文書構造とページインデックスに関する重要な洞察を明らかにした魅力的なデバッグセッションに遭遇しました。このケーススタディは、一見単純な「オフバイワン」エラーがPDF仕様の深い調査に発展し、文書構造に関する根本的な誤解を明らかにした過程を示しています。 PDFページ順序の概念 - 物理的オブジェクト順序と論理的ページ順序の関係 問題 私たちはHotPDF DelphiコンポーネントのCopyPageと呼ばれるPDFページコピーユーティリティに取り組んでいました。このプログラムはデフォルトで最初のページをコピーするはずでしたが、代わりに常に2番目のページをコピーしていました。一見すると、これは単純なインデックスバグのように見えました -…