SHOEISHA iD

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

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

特集記事

ASP.NETで帳票の印刷機能を実現しよう

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

手順3. レポートを表示させるWebフォームの作成

 [新しい項目の追加]-[Webフォーム Visual Basic]を選択し、新規にWebフォームを作成します。名前は既定の「WebForm1.aspx」のままとします。ドキュメントウィンドウ上で、「WebForm1.aspx」をデザインビューに切り替えておきます。

 [ツールボックス]をクリックし、[AJAX Extensions]グループの[ScriptManager]をWebフォーム上の青い枠の中にドラッグ&ドロップします。ScriptManagerとは、AJAX対応のASP.NET Webページのクライアントスクリプトを管理するコントロールで、ReportViewerをWebフォームで利用する際には必要になります。

 続いて、[レポート]グループの[ReportViewer]も[ScriptManager]のすぐ右にドラッグ&ドロップします。右肩のReportViewerタスクの[レポートの選択]で、手順2で作成したレポート「Report1.rdlc」を選択すると、[ReportViewer]の下に、[ObjectDataSource]コントロールが自動的に配置されます(図16)。

図16 ScriptManagerとReportViewerを配置したところ
図16 ScriptManagerとReportViewerを配置したところ

 [ReportViewer]の幅(400pixel)は必要に応じて少し広げておいても構いません。

 ただし、PDF出力の際には、レポートで設定した幅と高さが有効になるので、ReportViewerの大きさはまったく気にする必要はありません。

 これで、印刷機能を実装したWebフォーム「WebForm1.aspx」ができました。タブの[×]をクリックし、変更を保存して、デザイナーを閉じてください。

 「WebForm1.aspx」を右クリックして、[ブラウザで表示]をクリックします。

 図17のように、画面が表示されれば成功です。

図17 「WebForm1.aspx」をブラウザで表示させたところ
図17 「WebForm1.aspx」をブラウザで表示させたところ

 プリンタに印刷するには、フロッピーディスクの形をしたアイコンをクリックし、PDFへのエクスポートを行い、Acrobat Readerなどで印刷イメージを確認してから印刷します。

 ReportViewerでの表示とPDFでの表示は微妙に異なることがあります。ReportViewerでの表示は仮の姿なので、見栄えに多少問題があっても気にする必要はありません。

 PDFでの表示が完成品になるので、表示に問題があれば、修正する必要があります。

 罫線が表示されない、行間が空いてしまう、などの問題が発生する原因としては、(A)罫線も1pt(ポイント)の幅を占有する、(B)長さの単位を「cm」で設定しても、「inch」ベースに変換して処理されるため誤差が生じる(後述)、といったことが挙げられます。

 このような場合は、以下のような微調整を行ってください。

  1. テキストボックスのプロパティ[Padding]の[Top]と[Bottom]を0ptにする
  2. 各種コントロールのサイズを小さくする

手順4. PDFへの直接出力

 PDFファイルに出力するには、前述したように、ブラウザの画面からエクスポートすることで可能ですが、エンドユーザに余分な負担を強いるものです。

 そこで、Webフォームの表示時に直接PDFへ出力させるようなコードを、Page_Loadイベントに記述します。WebForm1.aspxを右クリックして[コードの表示]をクリックし、WebForm1.aspx.vbのコードを表示させ、リスト2のように修正してください。

リスト2 「WebForm1.aspx.vb」の修正済みのコード
Imports Microsoft.Reporting.WebForms
Public Class WebForm1
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim dataTableAdapter As New DataSet1TableAdapters.StoredProcedure1TableAdapter
        Dim rds As New ReportDataSource
        rds.Name = "DataSet1"
        rds.Value = dataTableAdapter.GetData
        ReportViewer1.LocalReport.DataSources.Add(rds)
        Dim bytes() As Byte = ReportViewer1.LocalReport.Render("PDF", Nothing, Nothing, Nothing, Nothing, Nothing, Nothing)
        Response.ContentType = "Application/pdf"
        Response.BinaryWrite(bytes)
        Response.End()
    End Sub

End Class

 「Dim dataTableAdapter~」~「Me.ReportViewer1~」の5行では、準備したデータをレポートデータとしてReportViewer1のデータソースにセットします。

 「Dim bytes()~」は、レポートからの出力をバイナリデータとして格納する部分です。

 「Response~」の3行では、ブラウザにコンテンツのタイプをPDFと認識させ、バイナリーデータを出力し、それ以降の余分な出力を止める、という処理を行っています。

 太字の部分は、「WebForm1.aspx」のソースを確認し、名称が一致するように注意してください。この処理では「Microsoft.Reporting.WebForms」名前空間を利用しますので、それをインポートする記述も忘れないようにしてください。

 変更が終了したら、コードウィンドウを閉じ、変更を保存してください。WebForm1.aspxをブラウザで表示して、図18のように直接PDFが出力されることを確認してください。

図18 PDFへ出力されたところ
図18 PDFへ出力されたところ

 これで、業務で使える帳票が完成しました。あとは、メニュー画面のボタンなどから、このWebフォームに遷移させるなどして、業務システムに実装してください。

次のページ
PDF出力時の注意事項

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

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

WINGSプロジェクト 遠藤 存(エンドウ アリ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング