Artículo técnico

Dibujo de lienzo HotPDF

· Software PDF

Este ejemplo del componente HotPDF demuestra cómo crear gráficos PDF con estilo vectorial utilizando el mismo flujo de trabajo de TCanvas que los desarrolladores de Delphi ya utilizan en las aplicaciones VCL. En lugar de tratar la salida PDF como un modelo de dibujo separado, el ejemplo escribe texto y formas a través de HotPDF.Canvas y luego guarda el resultado como un documento PDF.

El ejemplo es útil cuando una aplicación ya tiene código de renderizado de gráficos, diagramas, vistas previas o controles personalizados basado en TCanvas. El patrón principal es simple: cree un objeto THotPDF, asigne el archivo de salida, llame a BeginDoc, configure el estado del lienzo, dibuje el contenido y finalice el archivo con EndDoc.

En el código a continuación, el bucle de dibujo renderiza tres grupos de formas de colores. Cada grupo utiliza el mismo sistema de coordenadas y solo cambia la primitiva que se está dibujando: Rectángulo, Elipse o RectánguloRedondeado. Esto lo convierte en una referencia compacta para probar los colores del lienzo, el comportamiento de relleno, la ubicación del texto y el diseño de la página en un PDF generado.

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.

Lo que muestra el ejemplo.

  • Cómo inicializar THotPDF para una tarea de generación de PDF de Delphi con estilo de consola.
  • Cómo usar HotPDF.Canvas para dibujar texto y formas geométricas básicas.
  • Cómo los colores del pincel afectan las formas rellenas en el PDF generado.
  • Cómo las coordenadas repetidas pueden crear una salida visual en capas sin capturas de pantalla de mapa de bits.

Notas de implementación.

La página del PDF se finaliza solo después de que se llama a EndDoc, por lo que el código de producción debe mantener el bloque try/finally alrededor del ciclo de vida del componente y evitar dejar un archivo parcialmente escrito si el dibujo falla. Para obtener una salida de prueba determinista, reemplace Randomize y los colores aleatorios con valores de color fijos.

El dibujo de PDF basado en Canvas funciona mejor para informes, superposiciones, diagramas y formularios generados, donde la salida debe mantenerse nítida en cualquier nivel de zoom. Si el dibujo de origen depende de los DPI de la pantalla o de fuentes específicas del dispositivo, verifique el PDF final en un sistema limpio antes de enviarlo.