Este ejemplo del componente HotPDF exporta un gráfico Delphi TeeChart a un documento PDF. El ejemplo demuestra una solución práctica que conecta los gráficos VCL interactivos con informes PDF distribuidos: los usuarios pueden configurar el estilo del gráfico en el formulario, y luego la aplicación imprime el estado del gráfico seleccionado en una página PDF.
El código es útil para paneles de control, informes de ingeniería, resúmenes financieros y cualquier aplicación Delphi que ya utilice TeeChart para visualización en pantalla. En lugar de reconstruir el gráfico manualmente con llamadas de dibujo PDF, el ejemplo permite que TeeChart se renderice en el lienzo de la página HotPDF.
|
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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
unit ChartUnit; interface uses {$IF CompilerVersion >= 16} Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, VclTee.TeeGDIPlus, VclTee.TeEngine, VclTee.Series, VclTee.TeeProcs, VclTee.Chart, {$ELSE}Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, TeEngine, Series, TeeProcs, Chart, {$ENDIF} HPDFDoc; type TForm1 = class(TForm) RadioGroup1: TRadioGroup; DemoChart: TChart; BarSeries1: TBarSeries; BarSeries2: TBarSeries; BarSeries3: TBarSeries; Panel1: TPanel; Label1: TLabel; RadioGroup2: TRadioGroup; ComboBox1: TComboBox; Button1: TButton; procedure RadioGroup1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure RadioGroup2Click(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.RadioGroup1Click(Sender: TObject); begin Case RadioGroup1.ItemIndex of 0: BarSeries1.MultiBar:=mbNone; 1: BarSeries1.MultiBar:=mbSide; 2: BarSeries1.MultiBar:=mbStacked; 3: BarSeries1.MultiBar:=mbStacked100; end; end; procedure TForm1.FormCreate(Sender: TObject); var H: Integer; begin DemoChart.View3D:=False; Randomize; {$IFDEF VER220} with BarSeries1 do for H:=1 to 12 do Add( Random(100),FormatSettings.ShortMonthNames[H],clTeeColor); with BarSeries2 do for H:=1 to 12 do Add( Random(100),FormatSettings.ShortMonthNames[H],clTeeColor); with BarSeries3 do for H:=1 to 12 do Add( Random(100),FormatSettings.ShortMonthNames[H],clTeeColor); {$ELSE} with BarSeries1 do for H:=1 to 12 do Add( Random(100),ShortMonthNames[H],clTeeColor); with BarSeries2 do for H:=1 to 12 do Add( Random(100),ShortMonthNames[H],clTeeColor); with BarSeries3 do for H:=1 to 12 do Add( Random(100),ShortMonthNames[H],clTeeColor); {$ENDIF} ComboBox1.Items.Clear; for H:=0 to DemoChart.SeriesCount-1 do ComboBox1.Items.Add(DemoChart.Series[H].Name); ComboBox1.ItemIndex:=0; end; procedure TForm1.RadioGroup2Click(Sender: TObject); begin With DemoChart.Series[ComboBox1.ItemIndex] as TBarSeries do BarStyle:=TBarStyle(RadioGroup2.Itemindex); end; procedure TForm1.Button1Click(Sender: TObject); var HotPDF: THotPDF; ChartRect: TRect; begin HotPDF := THotPDF.Create(nil); try case RadioGroup1.ItemIndex of 0: HotPDF.FileName := 'PDFChart-Behind.pdf'; 1: HotPDF.FileName := 'PDFChart-SideToSide.pdf'; 2: HotPDF.FileName := 'PDFChart-Stacked.pdf'; 3: HotPDF.FileName := 'PDFChart-Stacked100.pdf'; end; HotPDF.BeginDoc; ChartRect.Left := 0; ChartRect.Right := 800; ChartRect.Top := 0; ChartRect.Bottom := 600; DemoChart.PrintPartialCanvas( HotPDF.CurrentPage.Canvas, ChartRect ); HotPDF.EndDoc; finally HotPDF.Free; end; end; end. |
Flujo de exportación.
- El formulario crea datos de gráfico de muestra y permite al usuario elegir el diseño de barras.
- El botón de exportación crea un objeto THotPDF y selecciona un nombre de archivo de salida basado en el modo del gráfico.
- ChartRect define el área de dibujo de destino en la página PDF.
- DemoChart.PrintPartialCanvas renderiza el gráfico en el lienzo PDF.
- EndDoc finaliza el archivo PDF.
Recomendaciones de diseño.
Mantenga la proporción del rectángulo del gráfico con el área del gráfico en pantalla, y pruebe las etiquetas de los ejes con texto localizado extenso. Si el PDF forma parte de un informe, reserve espacio para un título, una marca de tiempo, la fuente de datos y notas, para que el gráfico siga siendo significativo cuando se visualiza fuera de la aplicación original.