質問者
Microsoft Report Viewer(RDLC)を用いた空白頁の出力について

質問
-
以下の環境でツールの開発を行っている者です。
・VisualStudio2017(15.6.2)
・開発言語:C#
・Microsoft ReportViewer(140.1000.523)
今回XMLを入力して、ReportViewerを用いてPDFで帳票を出力するツールを作成しています。
2つの帳票を1つのPDFで出力する必要があり、以下のような1つのテンプレートから2つのサブレポートを呼び出すような構成でテンプレート(RDLC)ファイルを作成しております。
2つのサブレポートからは複数ページの一覧が出力されるようにできており、
各一覧のページが奇数の場合は白紙を一枚追加して、偶数ページにしたいのですが良い解決方法はないでしょうか。
(偶数ページにするのは2in1構成で印刷する予定だからです。)
サブレポート側でページ数が取得できれば、白紙用のサブレポートを呼び出してコントロールしようと考えていたのですが、サブレポートからページ数をうまく取得することができずに困っております。
何卒宜しくお願い致します。
- 編集済み KshatriyaFifty 2018年3月21日 8:49
すべての返信
-
メインレポート側でページを数えて、空白にしたいページで改行を発生させるとできます。
メインレポートのプロパティダイアログを表示させて、コードに以下のコードを追加
Shared index As Integer 'ページインデックス用 ''' <summary>ページインデックスを記憶させる</summary> Function SetIndex(ByVal i As Integer) As Integer index = i Return index End Function ''' <summary>現在のページインデックスをヘッダ・フッタ以外でも取得</summary> Function GetIndex() As Integer Return index End Function
あとは以下のようにメインレポートをデザインする
- メインレポートの左上に四角形(A)を配置し、その中に1つ目のサブレポートを配置する。
- 四角形(A)のすぐ下に小さな四角形(B)を配置する。
- 四角形(B)のすぐ下に四角形(C)を配置し、その中に2つ目のサブレポートを配置する。
- メインレポートにページヘッダを追加して、中にテキストボックス(T)を配置する。
- テキストボックス(T)の式を「=Code.SetIndex(Globals!PageNumber)」とする。
これでメインレポート本文でページインデックスが取れるようになる。
- 四角形(A)のプロパティPageBreak.BreakLocaitonをEndにする。
これでまずレポート1の終わりで改ページされる。 - 四角形(B)のプロパティPageBreak.BreakLocaitonをEndにする。
さらに、Hiddenプロパティの式を「=(Code.GetIndex mod 2) = 1」とする。
これで四角形(B)が偶数ページにある場合は四角形(B)が表示されることで改行が発生して空白ページになる。
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
-
上記を試してみましたが、うまくいかない点がありましたのでご報告させて頂きます。
また、不足していた情報も補足させて頂きます。
【前回不足分の説明の追加】・複数のデータ(帳票単位と呼びます)を帳票に出力。帳票単位毎のページ数は帳票内に一覧がある為、 帳票単位毎に異なる。 帳票単位当たりのページ構成は下記のイメージ。 ------------------------------総ページ数帳票単位当たりページ数------------------------------基本情報・・・明細情報(一覧・可変行)・・・・・・------------------------------・上記の帳票単位毎に偶数ページになるように空白ページを挿入した い。 例)A(1/3ページ)A(2/3ページ)A(3/3ページ)←空白ページ挿入B(1/2ページ)B(2/2ページ)C(1/1ページ)←空白ページ挿入【試したこと】
・1つ目のサプレポートを単独で使用し、1ページ分の空白ページのサプレポートをテンプレートの最下部に 配置(テーブル内)し、global! TotalPagesを元に計算してサプレポートの表示非表示を 制御するように式を設定。 →空白ページの挿入自体は制御出来たが、
帳票単位当たりの総ページ数(Global! TotalPages)が途中で変わったり、正確でない。 ・帳票単位あたりのページ数を1つ目と2つ目のサブレポート内で取得できない為、帳票毎で空白ページを挿入できない。