Этот пример компонента HotPDF демонстрирует, как создавать векторные графические элементы PDF с использованием той же модели TCanvas, которую разработчики Delphi уже используют в приложениях VCL. Вместо того, чтобы рассматривать вывод PDF как отдельную модель отрисовки, этот пример записывает текст и фигуры через HotPDF.Canvas, а затем сохраняет результат в виде документа PDF.
Этот пример полезен, когда приложение уже имеет код отрисовки графиков, диаграмм, предварительного просмотра или пользовательских элементов управления, основанный на TCanvas. Основной принцип прост: создайте THotPDF, укажите выходной файл, вызовите BeginDoc, настройте состояние холста, отрисуйте содержимое и завершите файл с помощью EndDoc.
В приведенном ниже коде цикл отрисовки отображает три группы цветных фигур. Каждая группа использует одну и ту же систему координат и изменяет только примитив, который отрисовывается: прямоугольник, эллипс или круглый прямоугольник. Это делает его компактным справочником для тестирования цветов холста, поведения заливки, размещения текста и компоновки страниц в сгенерированном 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 |
program CanvasDraw; {$APPTYPE CONSOLE} uses {$IFDEF VER230} System.SysUtils, System.Classes, Vcl.Graphics, {$ELSE} SysUtils, Classes, Graphics, {$ENDIF} HPDFDoc; var I, Y: Integer; HotPDF: THotPDF; begin HotPDF:= THotPDF.Create(nil); try Randomize; HotPDF.AutoLaunch := true; HotPDF.FileName := 'CanvasDraw.pdf'; HotPDF.BeginDoc; // Create PDF file HotPDF.Canvas.Font.Size := 14; // Set canvas font size I :=20; Y := 60; HotPDF.Canvas.TextOut(10, 30, 'Canvas Rectangles'); // Print text while I <= 700 do begin // Draw colour HotPDF.Canvas.Brush.Color := random($FFFFFF); // rectangles HotPDF.Canvas.Rectangle(I, Y, I+90, Y + 160); Inc(I, 30); Inc( Y, 3 ); end; I :=20; Y := 350; HotPDF.Canvas.TextOut(10, 320, 'Canvas Ellipses'); // Print text while I <= 700 do // Draw colour begin // ellipses HotPDF.Canvas.Brush.Color := random($FFFFFF); HotPDF.Canvas.Ellipse(I, Y, I+90, Y + 160); Inc(I, 30); Inc( Y, 3 ); end; I :=20; Y := 680; HotPDF.Canvas.TextOut(10, 650, 'Canvas RoundRects'); // Print text while I <= 700 do begin HotPDF.Canvas.Brush.Color := random($FFFFFF); // Draw colour HotPDF.Canvas.RoundRect(I, Y, I+90, Y + 160, 20, 20); // roundrects Inc(I, 30); Inc( Y, 3 ); end; HotPDF.EndDoc; // Close PDF file finally HotPDF.Free; end; end. |
Что демонстрирует этот пример.
- Как инициализировать THotPDF для задачи генерации PDF в консольном стиле в Delphi.
- Как использовать HotPDF.Canvas для отрисовки текста и базовых геометрических фигур.
- Как цвета кистей влияют на залитые фигуры в сгенерированном PDF-документе.
- Как повторяющиеся координаты могут создавать многослойный визуальный вывод без использования снимков экрана.
Замечания по реализации.
Страница PDF-документа завершается только после вызова EndDoc, поэтому в производственном коде следует использовать блок try/finally вокруг жизненного цикла компонента и избегать создания частично записанного файла в случае сбоя отрисовки. Для получения детерминированного результата тестов замените Randomize и случайные цвета на фиксированные значения.
Отрисовка PDF на основе Canvas лучше всего подходит для отчетов, наложений, диаграмм и сгенерированных форм, где вывод должен оставаться четким при любом уровне масштабирования. Если исходная отрисовка зависит от DPI экрана или шрифтов, специфичных для устройства, убедитесь, что окончательный PDF-документ корректно отображается на чистой системе перед его распространением.