どうも、あおです。
ActiveReportsのレポート出力時、
デフォルトファイル名を設定して「Microsoft Print to PDF」で
出力するサンプルコードをメモ。
(いちいちファイル名を入力せずに出力できます。)
普通のPDF出力との違いですが、
この「Microsoft Print to PDF」で出力すると、DBのテーブルの値に
記号(外字)がある場合に、それも出力することができます。
(普通のPDF出力では出力されません。)
少し裏技的方法です。
以前の記事をベースにしています。
【VB.NET】帳票作成ツール ActiveReportsの使い方(DataTable使用・プレビュー画面作成)
そちらで作成したプレビュー画面にPDF出力ボタンを追加して、
そのボタン押下時処理内に以下を追加します。
Dim fileForm As New System.Windows.Forms.SaveFileDialog
With fileForm
.FileName = Me.Text & Now.ToString("yyyyMMddHHmmss") & ".pdf"
.Filter = "PDFファイル(*.pdf)|*.pdf"
End With
If Not fileForm.ShowDialog() = System.Windows.Forms.DialogResult.OK Then Return
RemoveHandler Me.Report.Document.Printer.EndPrint, AddressOf Me.onEndPrint
Me.Report.Document.Printer.PrinterName = "Microsoft Print to PDF"
Me.Report.Document.Printer.PrinterSettings.PrintToFile = True
Me.Report.Document.Printer.PrinterSettings.PrintFileName = fileForm.FileName
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
Me.Report.Document.Print(False, False)
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
AddHandler Me.Report.Document.Printer.EndPrint, AddressOf Me.onEndPrint
まず、「名前を付けて保存」ダイアログボックスを表示させて、
そこのデフォルトファイル名に画面タイトル+現在日時をセットし、
ユーザーが選択した保存場所+ファイル名を取得しておきます。
次の処理でプリンタ名に「Microsoft Print to PDF」を設定、
印刷ダイアログは表示させないようにして、
保存していた「保存場所+ファイル名」をセットして印刷を行います。
onEndPrintは、印刷後に出力メッセージをダイアログ表示する為に
記載しています。
手前にRemoveHandlerを入れているのは、
出力メッセージが何度も表示されてしまうのを防ぐ為です。
次に、ボタン押下時処理のすぐ下あたりに以下を追加します。
Private Sub onEndPrint(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs)
MsgBox("出力されました。")
End Sub
出力されたことをダイアログ表示します。
onEndPrintは、出力後に通る処理とのことですが、
なぜかダイアログが先に表示されて、その数秒後にファイルが
出力されます。私が動かした際には、2秒ほどだったのでよしとします。

