이 HotPDF 구성 요소 예제는 Delphi TeeChart 차트를 PDF 문서로 내보냅니다. 이 예제는 대화형 VCL 차트와 배포 가능한 PDF 보고서 간의 실용적인 연결을 보여줍니다. 사용자는 폼에서 차트 스타일을 구성한 다음, 애플리케이션이 선택한 차트 상태를 PDF 페이지로 인쇄합니다.
이 코드는 대시보드, 엔지니어링 보고서, 재무 요약 및 화면 표시용으로 TeeChart를 이미 사용하는 모든 Delphi 애플리케이션에 유용합니다. 차트를 수동으로 다시 만들고 PDF 그리기 호출을 사용하는 대신, 이 예제에서는 TeeChart가 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. |
내보내기 흐름
- 폼은 샘플 차트 데이터를 생성하고 사용자가 막대 레이아웃을 선택할 수 있도록 합니다.
- 내보내기 버튼은 THotPDF를 생성하고 차트 모드에 따라 출력 파일 이름을 선택합니다.
- ChartRect는 PDF 페이지의 대상 그리기 영역을 정의합니다.
- DemoChart.PrintPartialCanvas는 차트를 PDF 캔버스에 렌더링합니다.
- EndDoc은 PDF 파일을 완료합니다.
레이아웃 권장 사항
차트 영역을 화면에 표시되는 차트 영역에 맞춰 가로 세로 비율을 유지하고, 긴 지역화된 텍스트로 축 레이블을 테스트하십시오. PDF가 보고서의 일부인 경우, 차트가 원래 애플리케이션 외부에서 볼 때도 의미가 유지되도록 제목, 타임스탬프, 데이터 소스 및 메모를 위한 공간을 예약하십시오.