SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

現役エンジニア直伝! 「現場」で使えるコンポーネント活用術(ActiveReports)

帳票Windowsアプリ実践構築ガイド
ActiveReports for .NETを使いこなす!

  • X ポスト
  • このエントリーをはてなブックマークに追加

レポートを印刷する

 最近の傾向として、紙資源の有効活用やセキュリティの面から、業務アプリケーションを利用する際も、プレビュー画面で確認したら、印刷をせずPDF出力などで済ませてしまうことも多くなってきたように思います。しかしながら、夜間に締め処理をしてから自動的に印刷するようなバッチ処理や、データ入力後は自動的に印刷するような画面が必要な仕様のアプリケーションもたくさんあります。

 ActiveReportsでは、WindowsフォームにViewerコントロールを張り付けてプレビュー表示から印刷するだけではなく、自動的に印刷・PDF出力する機能を追加することもできます。

 「CZ0905Bound」サンプルに上記機能を追加したのが、「CZ0905PDF」サンプルプロジェクトです。「CZ0905Bound」は、データアクセス部分と帳票定義体とWindowsフォーム部分からできています。このため、Windowsフォーム部分だけを置き換え、他の2つの部分は流用するだけで、自動的にPDF出力する機能を追加できました。

 Windowsフォームにコードを記述する前に、まず次の作業を行いました。

  1. 新しくWindowsフォームのプロジェクトを作成します。
  2. WindowsフォームにButtonコントロールを1つ配置して、「Pdf_Button」という名前にします。
  3. [既存の項目の追加]で、CZ0905BoundサンプルからSeikyu_Reports.vb、CZ0905Bound.vb、Bill.mdbの3つをプロジェクトにコピーし、追加します。

Windowsフォームにコードを記述する

 「CZ0905PDF」サンプルプロジェクトには、Viewerを使わずに、仮想プリンタ定義に基づきパスワード付きPDFファイルを出力するコードを記述しています。

リスト4:CZ0905PDF_Form.vb
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ファイルが出力されます。

図5:「CZ0905PDF」の実行結果
図5:「CZ0905PDF」の実行結果

 PDFファイルを開こうとすると、パスワードが要求されます。「CodeZine」と入力することで、PDFの内容が表示できます(大文字小文字の区別あり)。

図6:CZ0905PDFの実行結果
図6:CZ0905PDFの実行結果

まとめ

 ここまで見てきたように、ActiveReportsはいくつかの点を押さえることで、Windowsアプリに帳票機能を効率的に追加できます。

 次回は、Webアプリケーションの作成方法を紹介していきます。

ワンポイントテクニック

 実際にシステム構築で使ってみると、1番時間がかかるのは帳票定義体で罫線の位置を合わせる作業だったりします。

 定義はコードとして*.Designer.vbに記述されているので、微妙な位置合わせを行う場合、設定箇所をコードから探し出し、プロパティの設定値を微調整すると、1発で決まります。テキストファイルなので、高機能なテキストエディタやVisual Studioの検索・置換機能を駆使すれば、効率的に定義できます。

 Windowsフォームと同じように、帳票定義体のコントロール名などにも命名規約を適用して、コードでも見やすいように工夫するとさらに効率があがるでしょう(今回は製品添付サンプルを改造したので、命名規約などの適用は行っていません)。

製品情報

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
現役エンジニア直伝! 「現場」で使えるコンポーネント活用術(ActiveReports)連載記事一覧

もっと読む

この記事の著者

初音玲(ハツネアキラ)

 国内SIerのSEでパッケージ製品開発を主に行っており、最近は、空間認識や音声認識などを応用した製品を手掛けています。 個人的には、仕事の内容をさらに拡張したHoloLensなどのMRを中心に活動しています。 Microsoft MVP for Windows Development ブログ:http://hatsune.hatenablog.jp/

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3911 2009/05/14 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング