FastReport VCLでPDF出力
FastReport VCLにはPDFファイルを出力する機能があります。
製品版だけでなく、Embarcadero Editionでも利用できます。
今回は、このPDF出力を試したいと思います。
デモプログラムを動かしてみよう
Fast Reports社のサイト
FastReport Embarcadero Edition - Fast Reports Inc.
から入手できる Embarcadero Edition には、デモプログラムが含まれているので、それにPDF出力を追加してみましょう。1
FastReportをインストールしたフォルダのDemosフォルダに、PrintStringListフォルダがあるので、それを適当な場所にコピーします。
コピーしたプロジェクトを、まずは、コンパイルします。
ボタンをクリックすると、プレビュー画面が表示します。
プレビュー画面のボタンを変えてみよう
プレビュー画面のボタンは、TfrxReportのPreviewOptionsにあるButtonsプロパティで表示する項目を指定できます。
また、PreviewOptionsにあるShowCaptionsプロパティで、Caption表示の有無を指定できます。
OnFormCreateイベントに、次のコードを追加して、プレビュー画面のボタンの表示を変えてみます。
また、データには、数字しか格納していないので、文字に変えてみます。
procedure TForm1.FormCreate(Sender: TObject);
begin
sl := TStringList.Create;
// 格納する文字を変更
sl.Add('リンゴ');
sl.Add('みかん');
sl.Add('イチゴ');
sl.Add('パイナップル');
sl.Add('グレープフルーツ');
sl.Add('梨');
sl.Add('葡萄');
sl.Add('バナナ');
sl.Add('スイカ');
// 追加:ここから
// 印刷プレビューのオプション設定
with frxReport1.PreviewOptions do
begin
// ボタンで不要なものを非表示に
Buttons := Buttons - [pbLoad, pbSave, pbExport, pbOutline, pbEdit];
Buttons := Buttons + [pbNoFullScreen, pbNoEmail];
// キャプションを表示
ShowCaptions := True;
end;
// 追加:ここまで
end;
PDF出力機能を追加してみよう
フォームにTfrxPDFExportを追加し、先ほどのOnFormCreateイベントのコードにPDFボタンを表示する箇所を追加します。
procedure TForm1.FormCreate(Sender: TObject);
begin
sl := TStringList.Create;
sl.Add('リンゴ');
sl.Add('みかん');
sl.Add('イチゴ');
sl.Add('パイナップル');
sl.Add('グレープフルーツ');
sl.Add('梨');
sl.Add('葡萄');
sl.Add('バナナ');
sl.Add('スイカ');
// 印刷プレビューのオプション設定
with frxReport1.PreviewOptions do
begin
// ボタンで不要なものを非表示に
Buttons := Buttons - [pbLoad, pbSave, pbExport, pbOutline, pbEdit];
Buttons := Buttons + [pbNoFullScreen, pbNoEmail];
// PDFボタンを表示 // 追加
Buttons := Buttons + [pbExportQuick]; // 追加
// キャプションを表示
ShowCaptions := True;
end;
end;
プレビュー画面を表示してみると、PDFボタンが追加されています。
PDFファイルを出力し、Adobe Acrobat Readerで表示してみます。
日本語の部分が□になってますね。
レポートを修正しよう
フォーム上にあるfrxReport1を右クリックして「Edit Report...」を選択すると、レポートデザイナーが開きます。2
"[Elements]"のプロパティにて、Fontプロパティのフォント名を「MS ゴシック」に、「文字セット」を「日本語」に設定します。
また、データを日本語に書き換えて文字数も増えたので、すべて表示できるように幅を広げておきます。
コンパイル後、PDFファイルを出力して、Adobe Acrobat Readerで表示してみます。
今度は、日本語も正しく表示されています。
プレビュー画面以外からPDFを出力してみよう
フォームにTRadioGroupを追加し、オブジェクトインスペクタにて、Itemsプロパティに
- 印刷
- 印刷プレビュー
- PDF出力
を設定し、ItemIndexプロパティを1に設定します。
そして、ボタンのOnClickイベントで、プレビュー画面を表示している箇所をRadioGroupのItemIndexプロパティの値によって、印刷・印刷プレビュー・PDF出力を実行できるように変更します。
procedure TForm1.Button1Click(Sender: TObject);
begin
StringDS.RangeEnd := reCount;
StringDS.RangeEndCount := sl.Count;
// 変更:ここから
case RadioGroup1.ItemIndex of
0: // 印刷
begin
frxReport1.PrepareReport(True);
frxReport1.Print;
end;
1: // 印刷プレビュー
frxReport1.ShowReport;
2: // PDF出力
begin
frxReport1.PrepareReport(True);
frxReport1.Export(frxPDFExport1);
end;
end;
// 変更:ここまで
end;
コンパイル後、RadioGroupで「PDF出力」を選択し、ボタンをクリックすると「PDFファイルへのエクスポート」ダイアログが表示し、PDFファイルが出力できます。
PDF出力するとき、ダイアログやメッセージ ウィンドウを表示したくない場合
「PDFファイルへのエクスポート」ダイアログを表示せずに、PDF出力したい場合、TfrxPDFExportのShowDialogプロパティをFalseに設定します。
このとき、TfrxPDFExportのFileNameプロパティにて、出力するPDFのファイル名を指定しておく必要があります。
また、PDFファイル出力中に表示するメッセージ ウィンドウ
を非表示にするには、TfrxPDFExportのShowProgressプロパティをFalseに設定します。
最後に
プログラム内でPDFファイルを生成する処理が必要なとき、ダイアログを出さすにPDF出力したい場合など、結構、あるかと思います。
FastReport以外でも、
Excelを帳票の代わりに使っている場合、
[ エクセル操作フォームEx ] [ PDF 形式の文書で保存 ] - Mr.XRAY
の方法で、PDF出力できますし、
Windows 10 に搭載されている「Microsoft Print to PDF」を利用し、プログラムから「印刷結果を名前を付けて保存」ダイアログを出さずにPDF出力する方法があるようです。
この「Microsoft Print to PDF」でPDF出力する方法に関しては、また別の機会にでも、記事を書きたいと思います。