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.
Por que a saída canvas importa
O desenho em estilo canvas é uma escolha prática quando o PDF deve conter geometria gerada em vez de imagens copiadas. Diagramas, rótulos, dashboards, sobreposições de mapa, decoração de formulários e gráficos simples permanecem nítidos com zoom alto porque são desenhados como operações PDF, não como capturas de tela.
O padrão também é fácil de reutilizar. Se um controle VCL existente já sabe se pintar com canetas, pincéis, retângulos e texto, o código de exportação muitas vezes pode reutilizar o mesmo modelo de coordenadas. O principal trabalho passa a ser adaptar tamanho de página, margens e unidades, em vez de reescrever a lógica de desenho.
Planejamento de coordenadas
- Defina a origem da página e as margens antes de levar o código de desenho para produção.
- Mantenha medidas repetidas em constantes nomeadas para que o layout possa ser escalado depois.
- Separe mudanças de estado de desenho, como Brush.Color, do loop de formas quando a saída precisar de estilo previsível.
- Prefira dados de amostra fixos para testes de comparação automatizados.
|
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.
Checklist de validação
- Abra o PDF em vários níveis de zoom e confirme que as bordas permanecem limpas.
- Imprima uma página de amostra se o PDF for usado em formulários ou etiquetas físicas.
- Verifique se todas as formas ficam dentro da caixa de margens prevista.
- Confirme que o texto continua legível quando o Windows substitui fontes.