Artigo técnico

Desenho de tela HotPDF

· Software PDF

Este exemplo do componente HotPDF demonstra como criar desenhos em PDF com estilo vetorial, utilizando o mesmo fluxo de trabalho do TCanvas que os desenvolvedores do Delphi já utilizam em aplicativos VCL. Em vez de tratar a saída PDF como um modelo de desenho separado, o exemplo escreve texto e formas através de HotPDF.Canvas e, em seguida, salva o resultado como um documento PDF.

Este exemplo é útil quando um aplicativo já possui código de renderização de gráficos, diagramas, visualizações ou controles personalizados baseado em TCanvas. O padrão principal é simples: crie um objeto THotPDF, atribua o arquivo de saída, chame BeginDoc, configure o estado do canvas, desenhe o conteúdo e finalize o arquivo com EndDoc.

No código abaixo, o loop de desenho renderiza três grupos de formas coloridas. Cada grupo usa o mesmo sistema de coordenadas e altera apenas o primitivo que está sendo desenhado: Retângulo, Elipse ou RetânguloArredondado. Isso o torna uma referência compacta para testar cores de canvas, comportamento de preenchimento, posicionamento de texto e layout de página em um PDF gerado.

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.

O que este exemplo demonstra.

  • Como inicializar THotPDF para uma tarefa de geração de PDF em estilo de console no Delphi.
  • Como usar HotPDF.Canvas para desenho de texto e formas geométricas básicas.
  • Como as cores do pincel afetam as formas preenchidas no PDF gerado.
  • Como coordenadas repetidas podem criar uma saída visual em camadas sem capturas de tela de bitmap.

Notas de implementação.

A página PDF é finalizada somente após a chamada de EndDoc, portanto, o código de produção deve manter o bloco try/finally ao redor do ciclo de vida do componente e evitar deixar um arquivo parcialmente escrito se a renderização falhar. Para uma saída de teste determinística, substitua Randomize e as cores aleatórias por valores de cor fixos.

A renderização de PDF baseada em Canvas funciona melhor para relatórios, sobreposições, diagramas e formulários gerados, onde a saída deve permanecer nítida em qualquer nível de zoom. Se a renderização de origem depender da DPI da tela ou de fontes específicas do dispositivo, verifique o PDF final em um sistema limpo antes de distribuí-lo.