none
Microsoft Report Viewer(RDLC)を用いた空白頁の出力について RRS feed

  • 質問

  • 以下の環境でツールの開発を行っている者です。

     ・VisualStudio2017(15.6.2)

     ・開発言語:C#

     ・Microsoft ReportViewer(140.1000.523)

    今回XMLを入力して、ReportViewerを用いてPDFで帳票を出力するツールを作成しています。

    2つの帳票を1つのPDFで出力する必要があり、以下のような1つのテンプレートから2つのサブレポートを呼び出すような構成でテンプレート(RDLC)ファイルを作成しております。

    2つのサブレポートからは複数ページの一覧が出力されるようにできており、

    各一覧のページが奇数の場合は白紙を一枚追加して、偶数ページにしたいのですが良い解決方法はないでしょうか。

    (偶数ページにするのは2in1構成で印刷する予定だからです。)

    サブレポート側でページ数が取得できれば、白紙用のサブレポートを呼び出してコントロールしようと考えていたのですが、サブレポートからページ数をうまく取得することができずに困っております。

    何卒宜しくお願い致します。



    2018年3月21日 8:46

すべての返信

  • メインレポート側でページを数えて、空白にしたいページで改行を発生させるとできます。

    メインレポートのプロパティダイアログを表示させて、コードに以下のコードを追加

    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
    あとは以下のようにメインレポートをデザインする
    1. メインレポートの左上に四角形(A)を配置し、その中に1つ目のサブレポートを配置する。
    2. 四角形(A)のすぐ下に小さな四角形(B)を配置する。
    3. 四角形(B)のすぐ下に四角形(C)を配置し、その中に2つ目のサブレポートを配置する。
    4. メインレポートにページヘッダを追加して、中にテキストボックス(T)を配置する。
    5. テキストボックス(T)の式を「=Code.SetIndex(Globals!PageNumber)」とする。
      これでメインレポート本文でページインデックスが取れるようになる。
    6. 四角形(A)のプロパティPageBreak.BreakLocaitonをEndにする。
      これでまずレポート1の終わりで改ページされる。
    7. 四角形(B)のプロパティPageBreak.BreakLocaitonをEndにする。
      さらに、Hiddenプロパティの式を「=(Code.GetIndex mod 2) = 1」とする。
      これで四角形(B)が偶数ページにある場合は四角形(B)が表示されることで改行が発生して空白ページになる。

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2018年3月21日 11:56
  • ご返信ありがとうございます。

    取り急ぎ、上記のコードを試してみようと思います。

    結果は別途報告させて頂きます。

    2018年3月26日 5:25
  • 上記を試してみましたが、うまくいかない点がありましたのでご報告させて頂きます。

    また、不足していた情報も補足させて頂きます。

    【前回不足分の説明の追加】
    ・複数のデータ(帳票単位と呼びます)を帳票に出力。帳票単位毎のページ数は帳票内に一覧がある為、帳票単位毎に異なる。帳票単位当たりのページ構成は下記のイメージ。
    ------------------------------
    総ページ数
    帳票単位当たりページ数
    ------------------------------
    基本情報
    明細情報(一覧・可変行)
    ・・・
    ・・・
    ------------------------------
    上記の帳票単位毎に偶数ページになるように空白ページを挿入したい。
    例)
    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つ目のサブレポート内で取得できない為、帳票毎で空白ページを挿入できない。

    2018年3月29日 11:29
  • サブレポート内ではなくメインページ側でGlobals!PageNumberを取得なのですが、できなかったという事なのでしょうか…

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2018年3月29日 19:47