準備

(なし)

デザイン

1. フォーム (Form1) にボタン (button1) を配置します。
2. フォーム (Form1) にレポートビューア (reportViewer1) を配置します。

サンプルコード (C#)

// 名前空間の追加
using System.Drawing.Printing;

// コード
private void button1_Click(object sender, EventArgs e)
{
  // 変数の宣言
  PageSettings ps = new PageSettings(); // プリンタ設定オブジェクト
  
  // 余白の設定
  ps.Margins.Left = (int)(10 / 10 / 2.54 * 100);   // 約10mm
  ps.Margins.Right = (int)(20 / 10 / 2.54 * 100);  // 約20mm
  ps.Margins.Top = (int)(30 / 10 / 2.54 * 100);    // 約30mm
  ps.Margins.Bottom = (int)(40 / 10 / 2.54 * 100); // 約40mm
  
  // 用紙サイズの設定
  foreach (PaperSize PSize in reportViewer1.PrinterSettings.PaperSizes)
  {
    if (PSize.ToString().Contains("B4"))
    {
      ps.PaperSize = PSize;
      break;
    }
  }
  
  // 給紙方法の設定
  foreach (PaperSource PSource in reportViewer1.PrinterSettings.PaperSources)
  {
    if (PSource.ToString().Contains("MP"))
    {
      ps.PaperSource = PSource;
      break;
    }
  }
  
  // 印刷の向きの設定
  ps.Landscape = true;
  
  // ReportViewer オブジェクトの設定
  reportViewer1.PrinterSettings.PrinterName = "EPSON LP-S5000";
  reportViewer1.SetPageSettings(ps);
}

解説

レポートビューアのページ設定ダイアログの内容を設定しています。 使用するプリンタはこのダイアログには表示されていませんが、ReportViewer コントロールに直接設定できます。尚、Windows 7 環境ではプリンタの変更はできませんが、Windows XP 環境では、このダイアログに [プリンタの設定] ボタンが表示され、プリンタの変更が可能です。 用紙のサイズ、給紙方法、印刷の向き、余白は直接 ReportViewer コントロールに設定ができません。一度 PageSettings オブジェクトを作成し、そのプロパティを変更していきます。そして、最後に ReportViewer コントロールに PageSettings オブジェクトを設定します。この際、ReportViewer コントロールが null の状態の場合は、設定は反映されません。事前に ReportViewer コントロールにデータセットを割り当てデータが表示されている状態にしておく必要があります。そのため、これらのページ設定はデータの設定の後に行う必要があります。 このサンプルでは、EPSON LP-S5000 というプリンタを設定しています。用紙サイズは B4、給紙方法は MP トレイ (手差し)、印刷の向きは横、余白は左/右/上/下の順に 10mm/20/mm/30mm/40mm に設定しています。 PageSettings オブジェクトに設定する余白の単位は 1/100 インチです。そのため、変換の際に誤差が発生するため、実際の指定値が表示されるとは限りません。

結果

動作確認環境

Visual Studio 2015 Professional (C# 6.0)