Добро пожаловать в подробное руководство по демонстрационной программе HelloWorld для Delphi HotPDF Component!
HotPDF Component – это мощная и универсальная библиотека для обработки PDF, специально разработанная для разработчиков Delphi и C++Builder. Этот комплексный компонент предоставляет обширный API, который позволяет разработчикам легко и точно создавать, манипулировать и изменять PDF-документы.
Пример программы HelloWorld.dpr
служит отличным введением в самую базовую и важную функцию HotPDF Component: функцию TexOut. Эта демонстрационная программа также демонстрирует базовую функциональность создания PDF.
Основная функция программы – генерация PDF-документов, содержащих многоязычный текст “Hello World”. Процедура CreatePDF
демонстрирует:
Программа включает сложную функциональность перечисления окон, которая демонстрирует:
EnumWindows
для итерации по всем окнам верхнего уровняWM_CLOSE
для закрытия PDF-просмотрщиков, которые могут иметь открытые файлыПрограмма демонстрирует лучшие практики для:
Программа создает две версии одного и того же PDF для демонстрации эффективности сжатия FlateDecode:
Программа использует сложную стратегию выбора шрифтов:
Код включает директивы условной компиляции для поддержки как современных, так и устаревших версий Delphi:
Этот пример HelloWorld служит нескольким образовательным целям:
Для запуска этой примерной программы:
Ниже приведен полный, хорошо документированный исходный код демонстрационной программы HelloWorld:
{************************************************************} // HotPDF PDF Component // Copyright(c)2007-2025, https://www.loslab.com {************************************************************} // Демонстрационная программа HelloWorld для HotPDF Component // Эта программа демонстрирует базовые возможности создания PDF // включая многоязычную поддержку текста и опции сжатия {************************************************************} program HelloWorld; {$APPTYPE CONSOLE} // Тип консольного приложения {$I ..\..\..\Lib\HotPDF.inc} // Включить файл конфигурации HotPDF uses // Модули EurekaLog для обнаружения утечек памяти и отладки (опционально) {$IFDEF EurekaLog} EMemLeaks, // Обнаружение утечек памяти EResLeaks, // Обнаружение утечек ресурсов EDebugJCL, // Поддержка отладки JCL EDebugExports, // Экспорт отладочной информации EFixSafeCallException, // Обработка исключений SafeCall EMapWin32, // Поддержка сопоставления Win32 EAppConsole, // Поддержка консольного приложения EDialogConsole, // Поддержка консольного диалога ExceptionLog7, // Логирование исключений {$ENDIF EurekaLog} // Системные модули - разные пространства имен для XE2+ против старых версий {$IFDEF XE2+} WinApi.Windows, // Функции Windows API WinApi.Messages, // Константы сообщений Windows System.SysUtils, // Системные утилиты System.Classes, // Базовые классы (TStringList и т.д.) Vcl.Graphics, // Поддержка графики {$ELSE} Windows, // Функции Windows API (старый Delphi) Messages, // Константы сообщений Windows (старый Delphi) SysUtils, // Системные утилиты (старый Delphi) Classes, // Базовые классы (старый Delphi) Graphics, // Поддержка графики (старый Delphi) {$ENDIF} HPDFDoc; // Основной модуль компонента HotPDF // Создает PDF-файл с многоязычным текстом "Hello World" // Параметры: // FileName: Имя выходного PDF-файла // UseCompression: True для включения сжатия FlateDecode, False для отсутствия сжатия procedure CreatePDF(const FileName: string; UseCompression: Boolean); var HotPDF: THotPDF; // Экземпляр основного компонента HotPDF begin // Создать экземпляр компонента HotPDF HotPDF := THotPDF.Create(nil); try // Настроить свойства PDF HotPDF.AutoLaunch := true; // Автоматически открыть PDF после создания HotPDF.FileName := FileName; // Установить имя выходного файла // Установить сжатие на основе параметра if UseCompression then begin HotPDF.Compression := cmFlateDecode; // Включить сжатие FlateDecode WriteLn('Создание сжатого PDF: ', FileName); end else begin HotPDF.Compression := cmNone; // Без сжатия WriteLn('Создание несжатого PDF: ', FileName); end; HotPDF.FontEmbedding := true; // Встроить шрифты для лучшей совместимости HotPDF.BeginDoc; // Начать создание PDF-документа // Установить Unicode шрифт для поддержки многоязычного текста // Arial Unicode MS поддерживает большинство языков, кроме корейского // procedure SetFont ( FontName: AnsiString; FontStyle: TFontStyles; ASize: Single; FontCharset: TFontCharset = DEFAULT_CHARSET; IsVertical: boolean = false); // DEFAULT_CHARSET: 1 - Шрифт выбирается на основе имени. Если описанный шрифт недоступен в системе, Windows заменит его другим шрифтом HotPDF.CurrentPage.SetFont('Arial Unicode MS', [], 12, 1, False); // Отобразить "Hello World" на нескольких языках // Параметры TextOut: (X, Y, Угол, Текст) HotPDF.CurrentPage.TextOut(80, 50, 0, 'Hello, Delphi PDF world!'); // Английский HotPDF.CurrentPage.TextOut(80, 70, 0, 'Hola, mundo Delphi PDF!'); // Испанский HotPDF.CurrentPage.TextOut(80, 90, 0, 'Hallo, Delphi PDF Welt!'); // Немецкий HotPDF.CurrentPage.TextOut(80, 110, 0, 'Bonjour, monde PDF Delphi!'); // Французский HotPDF.CurrentPage.TextOut(80, 130, 0, 'Ciao, mondo Delphi PDF!'); // Итальянский HotPDF.CurrentPage.TextOut(80, 150, 0, 'Olá, mundo Delphi PDF!'); // Португальский HotPDF.CurrentPage.TextOut(80, 170, 0, 'Здравствуйте, Delphi PDF мир!'); // Русский HotPDF.CurrentPage.TextOut(80, 190, 0, 'こんにちは、Delphi PDFの世界!'); // Японский HotPDF.CurrentPage.TextOut(80, 210, 0, 'Merhaba, Delphi PDF dünyası!'); // Турецкий HotPDF.CurrentPage.TextOut(80, 230, 0, '你好,Delphi PDF世界'); // Китайский // Корейский текст требует специального корейского шрифта // Arial Unicode MS не поддерживает корейские символы должным образом HotPDF.CurrentPage.SetFont('Malgun Gothic Semilight', [], 12, 0, False); HotPDF.CurrentPage.TextOut(80, 250, 0, '여보세요, Delphi PDF 세계!'); // Корейский HotPDF.EndDoc; // Завершить и сохранить PDF-документ WriteLn('PDF успешно создан: ', FileName); finally HotPDF.Free; // Очистить компонент HotPDF end; end; // Глобальные переменные для перечисления окон и создания PDF var Title: String; // Отдельная строка заголовка (не используется в текущей реализации) Titles: TStrings; // Список заголовков окон для поиска Window: HWND; // Дескриптор окна (не используется в текущей реализации) WindowText: array[0..255] of Char; // Буфер для текста окна (не используется в текущей реализации) WindowTitle: String; // Строка заголовка окна (не используется в текущей реализации) I: Integer; // Счетчик цикла (не используется в текущей реализации) // Функция обратного вызова для API EnumWindows // Эта функция вызывается для каждого окна верхнего уровня в системе // Параметры: // hWnd: Дескриптор текущего перечисляемого окна // lParam: Пользовательские данные (в нашем случае указатель на TStrings с целевыми заголовками) // Возвращает: True для продолжения перечисления, False для остановки function EnumWindowsProc(hWnd: HWND; lParam: LPARAM): BOOL; stdcall; var Titles: TStrings; // Список целевых заголовков окон I: Integer; // Счетчик цикла WindowText: array[0..255] of Char; // Буфер для хранения текста окна WindowTitle: String; // Заголовок текущего окна как строка begin Result := True; // Продолжить перечисление по умолчанию Titles := TStrings(lParam); // Привести lParam обратно к TStrings // Получить текст заголовка окна if GetWindowText(hWnd, WindowText, SizeOf(WindowText)) > 0 then begin WindowTitle := String(WindowText); // Преобразовать массив символов в строку // Проверить, содержит ли заголовок окна любую из наших целевых строк for I := 0 to Titles.Count - 1 do begin // Использовать функцию Pos для проверки, содержится ли целевая строка в заголовке окна if Pos(Titles[I], WindowTitle) > 0 then begin // Отправить сообщение WM_CLOSE для закрытия окна PostMessage(hWnd, WM_CLOSE, 0, 0); Break; // Выйти из цикла после нахождения первого совпадения end; end; end; end; // Основное выполнение программы начинается здесь begin // Закрыть любые существующие PDF-файлы, которые могут быть открыты в PDF-просмотрщиках // Это предотвращает конфликты доступа к файлам при создании новых PDF с теми же именами Titles := TStringList.Create; try // Определить список подстрок заголовков окон для поиска // Любое окно, содержащее эти строки, будет закрыто // Это закроет Adobe и Foxit PDF reader & editor и многие другие PDF-приложения Titles.CommaText := '"HelloWorld-compressed.pdf", "HelloWorld-uncompressed.pdf", "Foxit"'; // Перечислить все окна верхнего уровня и закрыть соответствующие // EnumWindows вызывает нашу функцию обратного вызова для каждого окна EnumWindows(@EnumWindowsProc, LPARAM(Titles)); finally Titles.Free; // Очистить список строк end; // Отобразить заголовок программы WriteLn('=== Тест сжатия HotPDF ==='); WriteLn('Эта демонстрация создает два PDF-файла для демонстрации различий в сжатии.'); WriteLn(''); // Сначала создать несжатый PDF // Эта версия будет больше, но быстрее создается CreatePDF('HelloWorld-uncompressed.pdf', False); // Затем создать сжатый PDF // Эта версия будет меньше, но займет немного больше времени для создания CreatePDF('HelloWorld-compressed.pdf', True); // Отобразить сообщение о завершении WriteLn(''); WriteLn('Все PDF-файлы успешно созданы!'); WriteLn('Пожалуйста, проверьте файлы для сравнения сжатых и несжатых версий.'); WriteLn('Вы можете изучить размеры файлов, чтобы увидеть эффект сжатия.'); WriteLn(''); WriteLn('Нажмите Enter для выхода...'); ReadLn; // Ждать ввода пользователя перед закрытием консоли 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番目のページをコピーしていました。一見すると、これは単純なインデックスバグのように見えました -…