【VB.NETでActiveReports】レポートをデフォルトファイル名を設定して「Microsoft Print to PDF」で出力するサンプルコード

activereports-print-to-pdf-summne
スポンサーリンク

どうも、あおです。

 

 

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

 

 

PC
スポンサーリンク