レポートを印刷する
最近の傾向として、紙資源の有効活用やセキュリティの面から、業務アプリケーションを利用する際も、プレビュー画面で確認したら、印刷をせずPDF出力などで済ませてしまうことも多くなってきたように思います。しかしながら、夜間に締め処理をしてから自動的に印刷するようなバッチ処理や、データ入力後は自動的に印刷するような画面が必要な仕様のアプリケーションもたくさんあります。
ActiveReportsでは、WindowsフォームにViewerコントロールを張り付けてプレビュー表示から印刷するだけではなく、自動的に印刷・PDF出力する機能を追加することもできます。
「CZ0905Bound」サンプルに上記機能を追加したのが、「CZ0905PDF」サンプルプロジェクトです。「CZ0905Bound」は、データアクセス部分と帳票定義体とWindowsフォーム部分からできています。このため、Windowsフォーム部分だけを置き換え、他の2つの部分は流用するだけで、自動的にPDF出力する機能を追加できました。
Windowsフォームにコードを記述する前に、まず次の作業を行いました。
- 新しくWindowsフォームのプロジェクトを作成します。
- WindowsフォームにButtonコントロールを1つ配置して、「Pdf_Button」という名前にします。
- [既存の項目の追加]で、CZ0905BoundサンプルからSeikyu_Reports.vb、CZ0905Bound.vb、Bill.mdbの3つをプロジェクトにコピーし、追加します。
Windowsフォームにコードを記述する
「CZ0905PDF」サンプルプロジェクトには、Viewerを使わずに、仮想プリンタ定義に基づきパスワード付きPDFファイルを出力するコードを記述しています。
Imports DataDynamics.ActiveReports Imports DataDynamics.ActiveReports.Export.Pdf Public Class CZ0905PDF_Form Private Sub Pdf_Button_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Pdf_Button.Click Dim rpt As New Seikyu_Report() Application.DoEvents() Using _prco As New CZ0905Bound Dim pdf As New PdfExport rpt.DataSource = _prco.GetRecords("admin", "").Tables(0) ' 仮想プリンタを設定します。 rpt.Document.Printer.PrinterName = "" rpt.PageSettings.PaperKind = Drawing.Printing.PaperKind.A4 rpt.PageSettings.Orientation = Document.PageOrientation.Portrait rpt.PageSettings.Margins.Top = ActiveReport3.CmToInch(0.5F) rpt.PageSettings.Margins.Bottom = ActiveReport3.CmToInch(0.5F) ' レポートを作成します。 rpt.Run() 'PDF出力 pdf.Security.Use128Bit = True pdf.Security.OwnerPassword = "hatsune" pdf.Security.UserPassword = "CodeZine" pdf.Security.Permissions = PdfPermissions.AllowPrint pdf.Security.Encrypt = True pdf.Export(rpt.Document, _ System.IO.Path.Combine(My.Application.Info.DirectoryPath, _ "BILL.PDF")) End Using End Sub End Class
DataDynamics.ActiveReports.Export.Pdf.PDFExportのSecurityプロパティを使って、パスワード付きPDFファイルにしています。パスワードは「CodeZine」に設定しています。
実行
「CZ0905PDF」を実行すると、「bin\debug」フォルダにBILL.PDFファイルが出力されます。
PDFファイルを開こうとすると、パスワードが要求されます。「CodeZine」と入力することで、PDFの内容が表示できます(大文字小文字の区別あり)。
まとめ
ここまで見てきたように、ActiveReportsはいくつかの点を押さえることで、Windowsアプリに帳票機能を効率的に追加できます。
次回は、Webアプリケーションの作成方法を紹介していきます。
実際にシステム構築で使ってみると、1番時間がかかるのは帳票定義体で罫線の位置を合わせる作業だったりします。
定義はコードとして*.Designer.vbに記述されているので、微妙な位置合わせを行う場合、設定箇所をコードから探し出し、プロパティの設定値を微調整すると、1発で決まります。テキストファイルなので、高機能なテキストエディタやVisual Studioの検索・置換機能を駆使すれば、効率的に定義できます。
Windowsフォームと同じように、帳票定義体のコントロール名などにも命名規約を適用して、コードでも見やすいように工夫するとさらに効率があがるでしょう(今回は製品添付サンプルを改造したので、命名規約などの適用は行っていません)。