どうも、あおです。
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秒ほどだったのでよしとします。